C语言习题集答案(指针)_第1页
C语言习题集答案(指针)_第2页
C语言习题集答案(指针)_第3页
C语言习题集答案(指针)_第4页
C语言习题集答案(指针)_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第五章 指针习题一选择题1. 若定义 int a=8,b,*p=&b; 则下面对赋值语句 p=&a; *p=a; 的正确解释为【 】。A)两个语句都是使p指向aB)p=&a;是使p指向a,而*p=a是将a的值赋予*pC)两个语句都是将a的值赋予*pD)p=&a是将a的值赋予*p,而*p=a是使p指向a2. 若定义 int b=8,*p=&b; 则下面均表示b的地址的一组选项为【 】。A)*p, *&b B)*p, &*b C)p, *&b, &*p D)&*p, p, &b3. 若定义 int a,b,*p

2、1=&a,*p2=&b; 使p1指向b的赋值语句是【 】。A)*p1=&b; B) p1=&p2; C)p1=*&p2; D) p1=*&b;4. 若定义 int a,b,*p; 下述程序段中正确的是【 】。A)p=&a; scanf("%d",&p; B) scanf("%d",&a; *p=a;C)p=&a; scanf("%d",&b;*p=b; D) p=&a; scanf("%d",*p;5. 若有定义int

3、a=7,b=9,*p1,*p2;下列赋值语句中,正确的是【 】。A)p2=&a;p1=&b;*&a=*p1; B) p1=&a;p2=*&p1;a=&*p2;C)p1=&b;p2=&p1;*p1=*p2; D) p2=*&a;p1=*&b;6. 执行下面程序段后,c的值是【 】。int a,b,c,*p;a=2;b=10;p=&a;c=a+b+*p;A)12 B)14 C) 22 D) 247. 若定义 int i,*p; 使p指向i的赋值语句是【 】。A) p=&i; B) *p=&i;

4、C) *p=i; D) p=*&i;8. 若定义int i=100,*p=&i;设为i分配的内存地址为200201,则【 】。A)p为201 B) *p为100 C) *p为200 D) p为1009. 若有定义float a,b,*p;下述程序段中正确的是【 】。A) p=&b;scanf("%f",&a;*p=&a; B) a=10;*p=a;printf("%f",*p;C) scanf("%f",&b;*p=b; D) p=&a;*p=9;printf("%f&

5、quot;,*&a;10. 下面程序是实现两个整数a和b交换的,请将程序填完整。# include main( int a,b;int *pa,*pb , p;pa=&a;pb=&b;scanf("%d%d",pa,pb;p=*pa;*pa=*pb;*pb=【 】;printf("a=%d,b=%dn",*pa,*pb;A) pa B) pb C) *pa D) p11. 若定义 int b7,*p=b; 则p+3表示【 】。A) 元素b3的值 B) 元素b4的地址C) 元素b4的值 D) 元素b3的地址12. 下列程序的输出值为

6、【 】。# include main(int a= 1,3,5,7,9,d=1,*p=a;p+=3;d+=*p;printf("%dn", d;A) 10 B) 8 C) 6 D) 713. 下列操作中,正确的是 【 】。A) char s7; int *p=s=580; B) char s6; int *p,*p2=s;*p=*p2;C) int a7,*p; p=a; D) int a6,*p; p=&a;14. 若有定义int a=1,2,3,4, *p=a, i=2;,则*(p+i的值是【 】。A) 1 B) 2 C) 3 D) 415. 有下面的程序段,i

7、nt a=9,8,7,6,5,4,3,2,1,0,*p=a,i;其中i=3,则对a中元素引用错误的是【 】。A) a10 B) p9 C) *(&ai D) *(&pi16. 下面的程序运行后, 输出结果是【 】。# include main(int a5= 1,2,3,4,5, *p=a;p+=3;*p=*p+3;printf("%dn",a3;A) 3 B) 7 C) 4 D) 617. 下面的程序运行后, 如果第一个printf语句输出100, 则第二个printf语句输出为【 】。# include main( long int a= 1,2,3,4

8、,5,6,7, *p;p=&a3;printf("%p",a;printf("%p",p;A) 106 B) 103 C) 112 D) 10C18. 下面的程序运行后, 输出为【 】。# include main( long int a= 1,2,3,4,5,6,7, *p;p=&a2;printf("%d", *p;A) 2 B) 4 C) 3 D) 119. 运行下面程序段的输出结果是【 】。# include main(int a10= 2,4,6,8,10;int y=0,x,*p;p=&a1;for

9、(x=0; x<3; x+y+=*(p+x;printf("%dn",y;A) 20 B) 24 C) 12 D) 1820 若定义 int a7,*p1=a,*p2=p1; 则对数组元素a3的正确引用是【 】。A) *(p2+3 B) *(p1+4 C) p1+3 D) *(&a0+421. 若定义 int b8,*p=b; 则对数组元素b4地址的非法引用为【 】。A) p+4 B) &b+4 C) &b0+4 D) b+422. 以下程序的输出结果是【 】 。# include main(int a= 1,2,3,4,5,6,*p;p=a;

10、*(p+4+=2;printf("%d,%dn",*p,*(p+4;A) 1,6 B) 4,4 C) 4,5 D) 1,723. 下列程序运行输出的值为【 】。# include main( int a= 1,3,5,7,9,b= 10,8,6,4,2,c,*p=a,*q=b;p+=2;q+=4;c=(*p+/(*q+4;printf("%dn", c;A) 6 B) 5 C) 7 D) 不确定值24. 若有说明 int i=2,j=3,a54=1,2,3,4,5,6,7,8,*p=a0;则对数组元素aij之地址的正确引用为【 】。A) *(p+i+j

11、B) *(*(a+i+j C) pi+j D) p+4*i+j25. 若有说明 int i=2,j=3,a34=1,2,3,4,5,6,7,8,9,*p=a0;则对数组元素aij之值的正确引用为【 】。A) *ai+j B) *(p+i+j C) (pi+j D) *(p+i*4+j26. 若有说明 int i=2,j=3,a54=1,2,3,4,5,6,7,8,9,*p=a0; 则pi*j的值为【 】 。A) 0 B) 6 C) 7 D) 527. 若有说明 int i=2,j=3,a54=1,2,3,4,5,6,7,8,(*p4=a; 则对数组元素aij之地址的错误引用为【 】。A) p+

12、4*i+j B) *(a+i+j C) pi+j D) *(p+i+j28. 若有说明 int a34=1,2,3,4,5,6,7,8,9,(*p4=a;则对数组元素a23之值的正确引用为【 】。A) *(p+2+3 B) *(p2+3 C) *(p+2*4+3 D) (a+2329. 下面程序的运行结果是【 】。# include main(int a34= 1,3,5,7,9,11,13,15,17,19,21,23,(*p4;p=a;printf("%d",*(*(p+2+3;A)9 B) 15 C) 21 D) 2330. 若有int a34,(*p4=a;则对数组

13、元素aij(其中0<=i<=2,0<=j<=3)之值的正确引用为【 】。A) *(p+ij B) *pij C)pij D) pi+j31. 设数组a的起始地址为100H,则printf语句输出为【 】。# include main(int a54= 1,2,3,4,5,6,7,8,9,10,11,12,13,14,14,16,17,(*p4;p=a;printf("%pn",*(p+3+3;A) 130 B) 160 C) 11E D) 13C32. 下面程序的运行结果是【 】。# include main( int a34= 1,3,5,7,9,

14、11,13,15,17,19,21,23;int i,j,k=0;int (*p4=a;for(i=0; i<3; i+for(j=0; j<2; j+k+=*(*(p+i+j;printf("%dn",k;A) 99 B) 60 C) 108 D) 6833. 若有int i, j, a54, *p5;for(i=0;i<5;i+ pi=ai;i=j=3;则对数组元素aij之值的正确引用为【 】。A) (*(p+ij B)*(*(p+ij C)*(p+i+j D)*pij34. 若有int i, j, a54, *p5;for(i=0;i<5;i+

15、 pi=ai;i=4; j=2;则对数组元素aij之地址的正确引用为【 】。A) *(p+i+j B) *pi+j C) pij D) pi+j35. 以下选项中正确的是【 】。A) int a54, b45,*p; p=a; b=p;B) float a54, (*p5, (*q4; p=a; q=a;C) double a54,*p5; p0=a0;D) int a54,(*p4; p=a00;36. 设 char str45; 所定义的数组在内存中的起始地址为50(十进制, 则数组元素str33的地址为十进制的【 】。A)62 B)86 C)63 D)6837. 若有说明:char *p

16、1, *p2, *p3, *p4,ch; 则下列选项中错误的是【 】。A) getchar(*p3; B) ch=getchar(;C) p2=&ch; scanf("%c",p2; D) p4=&ch; *p4=getchar(;38. 下列选项中含有错误的是【 】。A) char str10; str="string"B) char str1="string",str2="1234" strcpy(str1,str2;C) char *str ; str="string"D)

17、 char str7='s','t','r','i','n','g'39. 以下选项错误的是【 】。A) char *s; s="ab" B) char s10="ab"C) char *s="ab" D) char s10; s="ab"40. 若有char *c="China","America","Russia","England",&

18、quot;France" 则语句printf("%p",c3;的输出为【 】。A)字符串 England B)格式说明不正确C)字符串 England 的首地址 D)字母E41. 下面各程序段中不能正确实现两个字符串交换的是【 】。A)char p9="12345678",q9="abcdef",*t; t=p;p=q;q=t;B)char *p="12345678",*q=" abcdef ",*t; t=p;p=q;q=t;C)char p9=" 12345678&quo

19、t;,q9=" abcdef ",t; int i;for (i=0;i<9;i+ t=pi;pi=qi;qi=t;D)char p9=" 12345678",q9=" abcdef ",t9;strcpy(t,p;strcpy(p,q;strcpy(q,t;42. 运行下面的程序段,输出结果是【 】。char s120="abcd", s220="efg", s320="hi"strcat(strcpy(s2,s3,s1;puts(s2;A) hiabcd B) hi

20、gabcd C) abcdhi D) abcdhig43. 若有 char str7; 要将键盘输入的字符串"a pear"存入str, 应使用【 】。A) gets(str; B) scanf("%s",str;C) str="a pear" D) getchar(str;44. 运行下面的程序片段,将输出【 】(已知'A'的ASCII码是十进制的65)。char str ="ABCD" , *p=str ;printf ( "%d n" , *(p+4 ;A)68 B)0 C

21、)字符D的地址 D)不确定值45. 下列程序的运行结果是【 】。# include main(char ch210= "1234","5678",*p2;int i,j,s=0;for(i=0; i<2; i+pi=chi;for(i=0; i<2; i+s=10*s+pii-'0'printf("%dn", s;A) 12 B) 56 C) 16 D) 5246. 若已定义char c,*p;,下述各程序段中能使变量c从键盘获取一个字符的是【】A) *p=c;scanf("%c",p;

22、 B) p=&c;scanf("%c",*p;C) p=&c;scanf("%c",p; D) p=*&c;scanf("%c",p;47. 若在定义语句int a,*p=&a;之后,接着执行以下选项中的语句,则能正确执行的是【】。A) scanf("%d",a; B) scanf("%d",*p;C) scanf("%d",p; D) scanf("%d",&p;48. 若有如下说明和语句,则【】是对数组元素的错误

23、引用int a=1,2,3,4,5,6,7,8,9,0,*p,i;p=a; i=6;A) *(a+i B) *(&ai C) ap-a D) p+i49. 若有说明int a =1,2,3,4,5,6,7,8,9,10,*p=a,i; 则数组元素地址的正确表示是【】。A) &(a+1 B) *a+ C) &p D) &pi50. 下列各程序段中,对指针变量定义和使用正确的是【】A) char s6,*p=s; char *p1=*p; printf("%c",*p1;B) int a6,*p; p=&a;C) char s7;char

24、 *p=s=260;scanf("%c",p+2;D) int a7,*p; p=a;51. 若已定义int b5=3,4,7,9,*p2=b,*p1=p2;,则对数组元素b2的正确引用是【】A) &b0+2 B) *(p1+1 C) *(p1+2 D) *p2+252. 设有定义int a10=1,2,3,4,5, b10,*p;则下列语句正确的是【】A) p=a; B) b=a; C) a+; D) a=p;53. 以下选项中正确的是【】A) int a54,b34,*p; p=*a; b32=*(p+3*4+2;B) float a54,(*p4,(*q5;

25、p=a; q=p;C) double a54,*p5; p0=*a; p1=*(a+1; p2=&a20; p3=a3; p4=*a+128;D) int a54,(*p4; int (*q4; p=a; q=p;54. 若有说明 int a54;,则指向数组a的指针数组的正确定义方式为【】A) int (*p4; B) int *p4; C) int *p5; D) int (*p5;55. 下面程序的运行结果是【】。#include main( char s180="ABCD", s280="EFGH"char *ps1=s1,*ps2=s2

26、;while(*ps1ps1+;while(*ps1+=*ps2+;printf("%s: %sn",s1,s2;A) ABCD: EFGH B) EFGH: ABCDC) ABCDEF: ABCD D) ABCDEFGH: EFGH56. 设有定义char s20="Beijing", *p=s; 以下语句中描述正确的是【】A) 可以用*p表示s0 B) 可以用(*p+2,表示s2C) 可以用p表示s0 D) s和p都是指针变量二、读程序写结果1. #include main(int a24 =1, 2, 3, 4, 5, 6, 7, 8;int (*

27、pa4=a;printf("%d, %d", *(*(pa+1+2, pa13;2.#include main( int a= 1,3,5,7,9, b= 2,4,6,3,7, c, d=1, *p=a, *q=b;p+=3;q+=2;c=*p+;d+=*q;printf("%d,%d,%d,%dn", *p, *q, c, d;3. 若输入字符串Personal Computer,下列程序的运行结果是:#include main(char str80,*p,ch='o'int count=0;gets(str;for(p=str; *p

28、!='0' p+if(*p=ch count+;printf("There are %d 'o' in %s.",count,str;4.#include main(int a= 1,2,3,4,5,6,*p;p=a+1;*(p+3+=2;printf("%d,%dn",*p,*(p+3;5. #include main(char a10="123",*p="china"p=a;printf("%s,%c",p,*(p+2;6. #include main(int

29、 a= 2,4,6,8,10;int x,*p;p=&a1;for(x=0; x<=3; x+printf("%d ",*(p+x;7. # include main(int x=3, y=5;int *p, *q, *t;p=&x; q=&q;t=p;p=q;q=t;printf("%d, %dn", x, y;8. #include #define N 10main(int aN, *p;int i;p=a;for(i=0; i if(i%2=0*p=i/2;else*p=3*i+1;p+;for(p=a; p prin

30、tf("%d ",*p;9. #include #define N 10main(int aNN;int *pN;int i,j;for(i=0; i pi=ai;for(i=0; i pi0=pii=1;for(j=1; j pij=pi-1j+pi-1j-1;i=3;for(j=0; j<=i; j+printf("%4d", pij;printf("n"10. #include #define N 80main(char sN="foot and tooth"char *p;char c1='o

31、', c2='e'p=s;while(*pif(*p=c1*p=c2;p+;p=s;printf("%sn", p;三、程序填空题1. 利用指针计算一维数组中的最大值。#include #define N 10main(int aN = 66, 88, 94, 65, 98, 72, 76, 93, 79, 86, max;int *pa, *pmax;pa=a;pmax=【1】;*pmax=【2】;while(pa if(*pmax<*pa*pmax=【3】;pa+;printf("Max is %dn", max;2.

32、利用指针计算一维数组中的平均值。#include #define N 20main(int aN = 66,88,94,65,98,72,76,93,79,86,77,87,63,100,83,70,64,62,96,84, ;double average;int *pa, sum;/* 计算平均值 */pa=a;【1】;while(pa sum=【2】;pa+;average=【3】;printf("Average = %.2lfn", average;3. 利用指针将字符串逆序。#include #define N 80main(char sN="This i

33、s an example."char *p, *q, t;printf("nbefore inverse : %sn", s;q=s;while(*q q+;【1】;【2】=s;while(p t=*p;【3】;*q=t;【4】;q-;printf("nafter inverse : %sn", s;四、编程题1. 利用指针将字符串中的大写字母转换成相应的小写字母,同时将小写字母转换成大写字母,其余字符不变。例如"Abc*Def#"将被转换成"aBC*dEF#"。2. 利用指针统计一维整型数组中偶数的个数。第5章一、选择题1. B 2. D 3. C 4. C 5. A 6. B 7. A 8. B 9. D 10. D11. D 12. B 13. C 14. C15. A 16. B 17. D 18. C

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论