C语言习题集答案指针.docx

上传人:b****2 文档编号:2535057 上传时间:2023-05-03 格式:DOCX 页数:23 大小:21.93KB
下载 相关 举报
C语言习题集答案指针.docx_第1页
第1页 / 共23页
C语言习题集答案指针.docx_第2页
第2页 / 共23页
C语言习题集答案指针.docx_第3页
第3页 / 共23页
C语言习题集答案指针.docx_第4页
第4页 / 共23页
C语言习题集答案指针.docx_第5页
第5页 / 共23页
C语言习题集答案指针.docx_第6页
第6页 / 共23页
C语言习题集答案指针.docx_第7页
第7页 / 共23页
C语言习题集答案指针.docx_第8页
第8页 / 共23页
C语言习题集答案指针.docx_第9页
第9页 / 共23页
C语言习题集答案指针.docx_第10页
第10页 / 共23页
C语言习题集答案指针.docx_第11页
第11页 / 共23页
C语言习题集答案指针.docx_第12页
第12页 / 共23页
C语言习题集答案指针.docx_第13页
第13页 / 共23页
C语言习题集答案指针.docx_第14页
第14页 / 共23页
C语言习题集答案指针.docx_第15页
第15页 / 共23页
C语言习题集答案指针.docx_第16页
第16页 / 共23页
C语言习题集答案指针.docx_第17页
第17页 / 共23页
C语言习题集答案指针.docx_第18页
第18页 / 共23页
C语言习题集答案指针.docx_第19页
第19页 / 共23页
C语言习题集答案指针.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C语言习题集答案指针.docx

《C语言习题集答案指针.docx》由会员分享,可在线阅读,更多相关《C语言习题集答案指针.docx(23页珍藏版)》请在冰点文库上搜索。

C语言习题集答案指针.docx

C语言习题集答案指针

第五章指针习题

一.选择题

1.若定义inta=8,b,*p=&b;则下面对赋值语句p=&a;*p=a;的正确解释为【】。

  A)两个语句都是使p指向a

  B)p=&a;是使p指向a,而*p=a是将a的值赋予*p

  C)两个语句都是将a的值赋予*p

  D)p=&a是将a的值赋予*p,而*p=a是使p指向a

2.若定义intb=8,*p=&b;则下面均表示b的地址的一组选项为【】。

  A)*p,*&b    B)*p,&*b  

  C)p,*&b,&*p  D)&*p,p,&b

3.若定义inta,b,*p1=&a,*p2=&b;使p1指向b的赋值语句是【】。

  A)*p1=&b;  B)p1=&p2;

  C)p1=*&p2;  D)p1=*&b;

4.若定义inta,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.若有定义inta=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的值是【】。

inta,b,c,*p;

a=2;b=10;

p=&a;

c=a+b+*p;

  A)12  B)14    C)22    D)24

7.若定义inti,*p;使p指向i的赋值语句是【】。

  A)p=&i;B)*p=&i;  C)*p=i;  D)p=*&i;

8.若定义inti=100,*p=&i;设为i分配的内存地址为200~201,则【】。

  A)p为201B)*p为100C)*p为200D)p为100

9.若有定义floata,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",*&a);

10.下面程序是实现两个整数a和b交换的,请将程序填完整。

#include

main()

{

inta,b;

int*pa,*pb,p;

pa=&a;

pb=&b;

scanf("%d%d",pa,pb);

p=*pa;

*pa=*pb;

*pb=【】;

printf("a=%d,b=%d\n",*pa,*pb);

}

  A)pa  B)pb  C)*paD)p

11.若定义intb[7],*p=b;则p+3表示【】。

  A)元素b[3]的值B)元素b[4]的地址

  C)元素b[4]的值D)元素b[3]的地址

12.下列程序的输出值为【】。

#include

main()

{

inta[]={1,3,5,7,9},d=1,*p=a;

p+=3;

d+=*p;

printf("%d\n",d);

}

  A)10  B)8  C)6  D)7

13.下列操作中,正确的是【】。

  A)chars[7];int*p=s=580; B)chars[6];int*p,*p2=s;*p=*p2;

  C)inta[7],*p;p=a;     D)inta[6],*p;p=&a;

14.若有定义inta[]={1,2,3,4},*p=a,i=2;,则*(p+i)的值是【】。

  A)1 B)2C)3D)4

15.有下面的程序段,

    inta[]={9,8,7,6,5,4,3,2,1,0},*p=a,i;

  其中i=3,则对a中元素引用错误的是【】。

  A)a[10] B)p[9] C)*(&a[i]) D)*(&p[i])

16.下面的程序运行后,输出结果是【】。

#include

main()

{

inta[5]={1,2,3,4,5},*p=a;

p+=3;

*p=*p+3;

printf("%d\n",a[3]);

}

  A)3 B)7C)4 D)6

17.下面的程序运行后,如果第一个printf语句输出100,则第二个printf语句输出为【】。

#include

main()

{

longinta[]={1,2,3,4,5,6,7},*p;

p=&a[3];

printf("%p",a);

printf("%p",p);

}

  A)106B)103C)112D)10C

18.下面的程序运行后,输出为【】。

#include

main()

{

longinta[]={1,2,3,4,5,6,7},*p;

p=&a[2];

printf("%d",*p);

}

  A)2 B)4 C)3 D)1

19.运行下面程序段的输出结果是【】。

#include

main()

{

inta[10]={2,4,6,8,10};

inty=0,x,*p;

p=&a[1];

for(x=0;x<3;x++)

y+=*(p+x);

printf("%d\n",y);

}

  A)20    B)24   C)12  D)18

20若定义inta[7],*p1=a,*p2=p1;则对数组元素a[3]的正确引用是【】。

  A)*(p2+3)  B)*(p1+4) C)p1+3  D)*(&a[0]+4)

21.若定义intb[8],*p=b;则对数组元素b[4]地址的非法引用为【】。

  A)p+4  B)&b+4 C)&b[0]+4D)b+4

22.以下程序的输出结果是【】。

#include

main()

{

inta[]={1,2,3,4,5,6},*p;

p=a;

*(p+4)+=2;

printf("%d,%d\n",*p,*(p+4));

}

  A)1,6  B)4,4  C)4,5  D)1,7

23.下列程序运行输出的值为【】。

#include

main()

{

inta[]={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("%d\n",c);

}

  A)6    B)5     C)7  D)不确定值

24.若有说明inti=2,j=3,a[5][4]={1,2,3,4,5,6,7,8},*p=a[0];则对数组元素a[i][j]之地址的正确引用为【】。

  A)*(p+i)+j  B)*(*(a+i)+j) C)p[i]+j  D)p+4*i+j

25.若有说明inti=2,j=3,a[3][4]={1,2,3,4,5,6,7,8,9},*p=a[0];则对数组元素a[i][j]之值的正确引用为【】。

  A)*a[i]+j  B)*((p+i)+j) C)(p[i]+j)  D)*(p+i*4+j)

26.若有说明inti=2,j=3,a[5][4]={1,2,3,4,5,6,7,8,9},*p=a[0];则p[i*j]的值为【】。

  A)0    B)6     C)7    D)5

27.若有说明inti=2,j=3,a[5][4]={1,2,3,4,5,6,7,8},(*p)[4]=a;则对数组元素a[i][j]之地址的错误引用为【】。

  A)p+4*i+j  B)*(a+i)+j   C)p[i]+j    D)*(p+i)+j

28.若有说明inta[3][4]={1,2,3,4,5,6,7,8,9},(*p)[4]=a;则对数组元素a[2][3]之值的正确引用为【】。

  A)*((p+2)+3)B)*(p[2]+3) C)*(p+2*4+3)D)(a+2)[3]

29.下面程序的运行结果是【】。

#include

main()

{

inta[3][4]={1,3,5,7,9,11,13,15,17,19,21,23},(*p)[4];

p=a;

printf("%d",*(*(p+2)+3));

}

  A)9    B)15   C)21   D)23

30.若有inta[3][4],(*p)[4]=a;则对数组元素a[i][j](其中0<=i<=2,0<=j<=3)之值的正确引用为【】。

  A)*(p+i)[j]  B)*p[i][j]  C)p[i][j]   D)p[i]+j

31.设数组a的起始地址为100H,则printf语句输出为【】。

#include

main()

{

inta[5][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,14,16,17},(*p)[4];

p=a;

printf("%p\n",*(p+3)+3);

}

  A)130 B)160 C)11E D)13C

32.下面程序的运行结果是【】。

#include

main()

{

inta[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};

inti,j,k=0;

int(*p)[4]=a;

for(i=0;i<3;i++)

for(j=0;j<2;j++)

k+=*(*(p+i)+j);

printf("%d\n",k);

}

  A)99  B)60  C)108 D)68

33.若有

inti,j,a[5][4],*p[5];

for(i=0;i<5;i++)p[i]=a[i];

i=j=3;

  则对数组元素a[i][j]之值的正确引用为【】。

  A)(*(p+i))[j] B)*(*(p+i)[j])  C)*((p+i)+j)  D)*p[i][j]

34.若有

inti,j,a[5][4],*p[5];

for(i=0;i<5;i++)p[i]=a[i];

i=4;j=2;

  则对数组元素a[i][j]之地址的正确引用为【】。

  A)*(p+i+j)  B)*p[i]+j  C)p[i][j]  D)p[i]+j

35.以下选项中正确的是【】。

  A)inta[5][4],b[4][5],*p;p=a;b=p;

  B)floata[5][4],(*p)[5],(*q)[4];p=a;q=a;

  C)doublea[5][4],*p[5];p[0]=a[0];

  D)inta[5][4],(*p)[4];p=a[0][0];

36.设charstr[4][5];所定义的数组在内存中的起始地址为50(十进制),则数组元素str[3][3]的地址为十进制的【】。

  A)62  B)86  C)63  D)68

37.若有说明:

char*p1,*p2,*p3,*p4,ch;则下列选项中错误的是【】。

  A)getchar(*p3);  B)ch=getchar();

  C)p2=&ch;scanf("%c",p2);D)p4=&ch;*p4=getchar();

38.下列选项中含有错误的是【】。

  A)charstr[10];str="string";

  B)charstr1[]="string",str2[]="1234";strcpy(str1,str2);

  C)char*str;str="string";

  D)charstr[7]={'s','t','r','i','n','g'};

39.以下选项错误的是【】。

  A)char*s;s="ab";    B)chars[10]="ab";

  C)char*s="ab";      D)chars[10];s="ab";

40.若有char*c[]={"China","America","Russia","England","France"};

则语句printf("%p",c[3]);的输出为【】。

  A)字符串England   B)格式说明不正确

  C)字符串England的首地址D)字母E

41.下面各程序段中不能正确实现两个字符串交换的是【】。

  A)charp[9]="12345678",q[9]="abcdef",*t;t=p;p=q;q=t;

  B)char*p="12345678",*q="abcdef",*t;t=p;p=q;q=t;

  C)charp[9]="12345678",q[9]="abcdef",t;inti;

for(i=0;i<9;i++){t=p[i];p[i]=q[i];q[i]=t;}

  D)charp[9]="12345678",q[9]="abcdef",t[9];

strcpy(t,p);strcpy(p,q);strcpy(q,t);

42.运行下面的程序段,输出结果是【】。

chars1[20]="abcd",s2[20]="efg",s3[20]="hi";

strcat(strcpy(s2,s3),s1);

puts(s2);

  A)hiabcd  B)higabcd  C)abcdhi  D)abcdhig

43.若有charstr[7];要将键盘输入的字符串"apear"存入str,应使用【】。

  A)gets(str); B)scanf("%s",str);

  C)str="apear"; D)getchar(str);

44.运行下面的程序片段,将输出【】(已知'A'的ASCII码是十进制的65)。

charstr[]="ABCD",*p=str;

printf("%d\n",*(p+4));

  A)68  B)0  C)字符D的地址  D)不确定值

45.下列程序的运行结果是【】。

#include

main()

{

charch[2][10]={"1234","5678"},*p[2];

inti,j,s=0;

for(i=0;i<2;i++)

p[i]=ch[i];

for(i=0;i<2;i++)

s=10*s+p[i][i]-'0';

printf("%d\n",s);

}

  A)12  B)56C)16  D)52

46.若已定义charc,*p;,下述各程序段中能使变量c从键盘获取一个字符的是【】。

  A)*p=c;scanf("%c",p);  B)p=&c;scanf("%c",*p);

  C)p=&c;scanf("%c",p);  D)p=*&c;scanf("%c",p);

47.若在定义语句inta,*p=&a;之后,接着执行以下选项中的语句,则能正确执行的是【】。

  A)scanf("%d",a);  B)scanf("%d",*p);

  C)scanf("%d",p);  D)scanf("%d",&p);

48.若有如下说明和语句,则【】是对数组元素的错误引用。

inta[]={1,2,3,4,5,6,7,8,9,0},*p,i;

p=a;i=6;

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

49.若有说明inta[]={1,2,3,4,5,6,7,8,9,10},*p=a,i;则数组元素地址的正确表示是【】。

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

50.下列各程序段中,对指针变量定义和使用正确的是【】。

  A)chars[6],*p=s;char*p1=*p;printf("%c",*p1);

  B)inta[6],*p;p=&a;

  C)chars[7];char*p=s=260;scanf("%c",p+2);

  D)inta[7],*p;p=a;

51.若已定义intb[5]={3,4,7,9},*p2=b,*p1=p2;,则对数组元素b[2]的正确引用是【】。

  A)&b[0]+2  B)*(p1+1)  C)*(p1+2)  D)*p2+2

52.设有定义inta[10]={1,2,3,4,5},b[10],*p;则下列语句正确的是【】。

  A)p=a;  B)b=a;  C)a++;  D)a=p;

53.以下选项中正确的是【】。

  A)inta[5][4],b[3][4],*p;p=*a;b[3][2]=*(p+3*4+2);

  B)floata[5][4],(*p)[4],(*q)[5];p=a;q=p;

  C)doublea[5][4],*p[5];p[0]=*a;p[1]=*(a+1);

  p[2]=&a[2][0];p[3]=a[3];p[4]=*a+128;

  D)inta[5][4],(*p)[4];int(*q)[4];p=a;q=p;

54.若有说明inta[5][4];,则指向数组a的指针数组的正确定义方式为【】。

  A)int(*p)[4];B)int*p[4];C)int*p[5];D)int(*p)[5];

55.下面程序的运行结果是【】。

#include

main()

{

chars1[80]="ABCD",s2[80]="EFGH";

char*ps1=s1,*ps2=s2;

while(*ps1)

ps1++;

while(*ps1++=*ps2++)

;

printf("%s:

%s\n",s1,s2);

}

  A)ABCD:

EFGH  B)EFGH:

ABCD

  C)ABCDEF:

ABCDD)ABCDEFGH:

EFGH

56.设有定义chars[20]="Beijing",*p=s;以下语句中描述正确的是【】。

  A)可以用*p表示s[0]B)可以用(*p+2),表示s[2]

  C)可以用p表示s[0]D)s和p都是指针变量

二、读程序写结果

1.#include

main()

{

inta[2][4]={1,2,3,4,5,6,7,8};

int(*pa)[4]=a;

printf("%d,%d",*(*(pa+1)+2),pa[1][3]);

}

2.

#include

main()

{

inta[]={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,%d\n",*p,*q,c,d);

}

3.若输入字符串PersonalComputer,下列程序的运行结果是:

#include

main()

{

charstr[80],*p,ch='o';

intcount=0;

gets(str);

for(p=str;*p!

='\0';p++)

if(*p==ch)count++;

printf("Thereare%d'o'in%s.",count,str);

}

4.

#include

main()

{

inta[]={1,2,3,4,5,6},*p;

p=a+1;

*(p+3)+=2;

printf("%d,%d\n",*p,*(p+3));

}

5.

#include

main()

{

chara[10]="123",*p="china";

p=a;

printf("%s,%c",p,*(p+2));

}

6.

#include

main()

{

inta[]={2,4,6,8,10};

intx,*p;

p=&a[1];

for(x=0;x<=3;x++)

printf("%d",*(p+x));

}

7.

#include

main()

{

intx=3,y=5;

int*p,*q,*t;

p=&x;q=&q;

t=p;

p=q;

q=t;

printf("%d,%d\n",x,y);

}

8.

#include

#defineN10

main()

{

inta[N],*p;

inti;

p=a;

for(i=0;i

{

if(i%2==0)

*p=i/2;

else

*p=3*i+1;

p++;

}

for(p=a;p

printf("%d",*p);

}

9.

#include

#defineN10

main()

{

inta[N][N];

int*p[N];

inti,j;

for(i=0;i

{

p[i]=a[i];

}

for(i=0;i

{

p[i][0]=p[i][i]

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2