C语言习题集答案指针.docx
- 文档编号:12052305
- 上传时间:2023-04-16
- 格式:DOCX
- 页数:23
- 大小:21.93KB
C语言习题集答案指针.docx
《C语言习题集答案指针.docx》由会员分享,可在线阅读,更多相关《C语言习题集答案指针.docx(23页珍藏版)》请在冰豆网上搜索。
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++; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 习题集 答案 指针