第6章练习及答案

2018-12-04 22:34

第六章 指针练习题

知识点:

1.掌握指针、地址、指针类型等概念;

2.掌握指针变量的定义和初始化、指针的间接访问、指针的加减运算、指针变量比较运算和指针表达式;

3.掌握指针与数组、函数、字符串等的联系; 4.掌握引用参数的使用。

一、选择题

1.若有以下定义,则说法错误的是( D)。 int a=100,*p=&a ;

A.声明变量p,其中*表示p是一个指针变量 B.变量p经初始化,获得变量a的地址 C.变量p只可以指向一个整形变量 D.变量p的值为100

2. 若有以下定义,则赋值正确的是(C )。 int a ,b , *p; float c, *q;

A.p=&c B.q=p C.p=NULL D.q=new int

3. 如果x是整型变量,则合法的形式是( D )。

A.&(x+5) B.*x C.&*x D.*&x

4. 若有语句int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则( B )不是对a数组元素的正确引用(其中0≤i<10)。

A.p[i] B.*(*(a+i)) C.a[p-a] D.*(&a[i])

5. 以下程序的输出结果是( B )。 #include int main()

{ int a[3]={10,15,20}; int *p1=a,*p2=&a[1]; *p1=*(p2-1)+5; *(p1+1)=*p1-5; cout<

A.5 B.10 C.15 D.20

6. 执行以下程序段后,m的值为 ( A)。 int a[2][3]={{1,2,3},{4,5,6}}; int m,*p=&a[0][0];

m=(*p)*(*(p+2))*(*(p+4));

1

A.15 B.14 C.13 D.12

7. 以下程序的输出结果是(C )。 #include

void fun(int x,int y,int *cp,int *dp) { *cp=x+y; *dp=x-y; }

int main() { int a,b,c,d; a=30,b=50; fun(a,b,&c,&d);

cout<

A.50,30 B.30,50 C.80,-20 D.80,20

8. 要求函数的功能是交换x和y中的值,且通过正确调用返回交换结果。能正确执行此功能的函数是( A )。

A.funa(int *x,int *y) B.funb(int x,int y) { int *p=new int ; { int t; *p=*x; t=x; *x=*y; x=y; *y=*p; y=t; } }

C.func(int *x,int *y) D.fund(int x,int y) { *x=*y; { *x=*x+*y; *y=*x; *y=*x-*y; } *x=*x-*y; }

9. 以下程序的输出结果是(C)。 #include int main()

{ char *s=\int v1=0,v2=0,v3=0,v4=0; for (int k=0;s[k]; k++) switch(s[k]) { default: v4++; case '1': v1++; case '3': v3++; case '2': v2++; }

cout<

2

}

A.4,2,1,1 B.4,9,3,1 C.5,8,6,1 D.8,8,8,8

10. 若有如下语句:

int **pp, *p, a=10, b=20; pp=&p; p=&a; p=&b;

cout<<*p<<”,”<<**pp<

A.10,20 B.10,10 C.20,10 D.20,20

11.若有以下定义,则变量p所占内存空间的字节数是( C )。 float *p;

A.1 B.2 C.4 D.8

12.若有以下定义,则赋值错误的是( A )。 int a,*p,*q;

A. *p=&a ; B.p=new int ; C.q=NULL; D.p=q

13. 下列程序运行结果是( B )。 #include int main() { int a=10,*q; if(q==NULL)

cout<<\else q=&a;

cout<<*q<

A. #### B.10 C. 有语法错误 D.*q

14. 若程序段static char line[]=”Visual C++”; char *point=line;则输出point的值为( A)。

A. ”Visual C++” B. line的首地址 C. Visual D. \\0

15. 相同数据类型的数组名和指针变量均表示地址,以下不正确的说法是( D )。

A. 数组名代表的地址不变,指针变量存放的地址可变。

B. 数组名代表的存储空间不变,指针变量指向的存储空间长度可变。 C. A和B的说法均正确。 D. 没有差别。

16. 若有以下定义,则下列操作错误的是( B )。

3

int a[5]={1,3,5,7,9}, *p=new int [5];

A.p=a; B.*p=a; C.*(p+1)=a[1]; D.*p=*a

17. 若有以下定义,则释放指针所指内存空间的操作是( C )。 int *p=new int [10];

A.delete []p; B.delete *p C.delete p; D. delete p[]

18. 若有以下定义,下列值为6的表达式是(C )。 int a[3][5]={{1,2},{2,4,6,8},{10,20,30,40,50}};

A.*(a+2)+3 B.a[2][3] C.*(*(a+1)+2) D.*(*(a+2)+3)

19. 执行下列程序段后,字符串str1的值是( C )。 char str1[8] , str2[]=”AA\\0BB”; strcpy(str1,str2);

A. AA\\0BB B. AA BB C. AA D.AA\\0BB\\0

二、写出下列程序运行结果: 1. #include int main()

{ int *pn, n=10,m=20;

float *pf, px=3.14159,py=2.71828; pn=&n; *pn+=m;

cout<<”n 现在的值是: ”<<*pn<

cout<<”py现在的值是:”<

2. 写出下列程序运行结果: #include int main()

{ int I,*p,a[]={10,20,30,40,50,60}; p=a;

for(I=0;I<5;I++)

cout<<”a[“<<<’\\t’<<”*(p+”<

3. 写出下列程序运行结果: #include int main()

{ int x=100,y=200; int *p=&x;

4

(*p)++; p=&y; *p=x;

cout<

4. 写出下列程序运行结果: #include int main()

{ int a[]={10,20,30,40,50,60,70,80,90,100}; int i,*p,sum=0; p=a;

for(i=1;i<10;i=i+2) sum+=p[i];

cout<<\}

5. 写出下列程序运行结果: #include int main()

{ float b[][4]={1.0,2.0,1.2,3.0,4.0,3.1,1.6,1.7,1.8,1.9,2.0,2.1}; float *p,sum=1.0; int i;

p=&b[0][1]; for(i=0;i<3;i++)

{ sum=sum*(*(p+i));

cout<<\} }

6. 写出下列程序运行结果: #include int main()

{ char *b[]={\char *p; p=b[2];

cout<<*p<<'\\t'<<*b<

7. 写出下列程序运行结果: #include int main()

{ int i,a[]={10,20,30,40},*p[4],**q; for(i=0;i<4;i++)

5


第6章练习及答案.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:天星教育2017届高三毕业生第一次大联考

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: