第六章指针练习题及答案
一、填空题
1、定义int a[]={1,2,3,4,5,6},*p=a;语句printf("%d",(*++p)++);的输出结果是( )。
2、以下程序的执行结果是( )。
main()
{ char s[]="abcdefg"; char *p;
p=s; printf("ch=%c\n",*(p+5)); }
3、以下程序的执行结果是( )。
main()
{ int a[][={1,2,3,4,5,6};
for(p=&a[5];p>=a;p--) printf("%d",*P);
printf("\n"); }
4、以下程序的执行结果是( )。
main()
{ int a[12]={1,2,3,4,5,6,7,8,9,10,11,12},*p[4],i;
for(i=0;i<4;i++)
p[i]=&a[i*3];
printf("%d\n",p[3][2]);}
5、设包含如下程序的文件名为myprog.c,编译后键入命令:myprog one two three,则执行结果是( )。
main(int argc,char *argv[])
{ int i;
for(i=1;i<argc;i++)
字符串操作函数puts printf("%s%c",argv[i],(i<argc-1)?":');}
6、下面程序的运行结果是( )
char s[80],*sp="HELLO!";sp=strcpy(s,sp); s[0]='h'; puts(s);
7、下面程序段的运行结果是( )
char *s1="AbcdEf",*s2="aB";
s1++; t=(strcmp(s1,s2)>0); printf("%d\n",t);
8、下面程序段的运行结果是( )
char str[]="abc\0def\0ghi"; char *p=str; printf("%s",p+5)
9、若有以下定义和语句:
int a[4]={0,1,2,3},*p; p=&a[1]; 则++(*p)的值是( )。
10、若有定义:int a[2][3]={2,4,6,8,10,12};则*(&a[0][0]+2*2+1)的值是( ),*(a[1]+2)的值( )。
11、若有定义:int a[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是( ),*(a+5)的值是( )。
12、若有以下定义和语句: int a[4]={0,1,2,3},*p; p=&a[2]; 则*--p的值是()。
13、若有以下定义和语句: int s[2][3]={0},(*p)[3]; p=s; 则(*(p+1)+2)的值是()。
14、若有定义:int a[2][3]={2,4,6,8,10,12}; 则a[1][0]的值是( ),*(*(a+1)+0)的值是( )。
15、若有定义:int a[]={2,4,6,8,10,12,14,16,18,20,22,24},*q[3],k;则下面程序段的输出是()。
for(k=0;k<3;k++) q[k]=&a[k*4]; printf("%d\n",q[2][3]);
16、若有以下输入:1,2<CR>(<CR>代表回车),则下面程序的运行结果是()。
main()
{int a[2][3]={2,4,6,8,10,12} , (*p)[3],i,j;
p=a; scanf("%d,%d",&i,&j); printf("%d\n",*(*(p+i)+j); )
17、下面程序的运行结果是()。
main()
{ char *a[]={"P","C","B","L"}, (* *p)[ ]; int j;
p=a+3;
for(j=3;j>=0;j--) printf("%s",*(p--));}
18、以下程序的执行结果是()。
main()
{ char *p1,*p2,str[20]="xyz"; p1="abcd"; p2="ABCD";
strcpy(str+1,strcat(p1+1,P2+1)); printf("%s",str); }
19、若输入的值分别是1 3 5,下面程序的运行结果是()
main()
{int a=0,i,*p,sum; p=&a;
for(i=0;i<=2;i++) { scanf("%d",p); sum=s(p); printf("sum=%d,",sum); }}
s(int *p)
{int sum=10; sum=sum+*p; return(sum); }
20、下面程序段的运行结果是()
char s[20]="abcd"; char *sp=s; sp++; puts(strcat(sp,"ABCD"));
21、下面程序段的运行结果是()
char a[]="12345",*p; int s=0;
for(p=a;*p!='\0';p++) s=10*s+*p-'0'; printf("%d\n",s);
22、下面程序段的运行结果是()
char a[]="123456789",*p; int i=0; p=a;
while(*p) {if(i%2==0) *p='*'; p++;i++; } puts(a);
23、下面程序的运行结果是()。
main()
{ char *str[]={"Pascal","C language","Dbase","Cobol"}; char **p; int k;
p=str;
for(k=0;k<4;k++) printf("%s,",*(p++)); }
二、选择题
1、以下程序的运行结果是()
void sub (int x,int y,int *z)
{ *z=y-x;}
main()
{ int a,b,c; sub(10,5,&a); sub(7,a,&b); sub(a,b,&c); printf("%4d,%4d,%4d\n",a,b,c);}
A) 5, 2, 3 B) -5, -12, -7
C) -5, -12, -17 D) 5, -2, -7
2、执行以下程序后,b的值为()
main()
{int b,k=4,m=6,*p1=&k,*p2=&m; b=(-*p1)/(*p2)+7; printf("%d\n",b); }
A)5 B)6 C)7 D)10
3、下面程序应能对两个整型变量的值进行交换。以下正确的说法是()
main()
{int a=10,b=20; printf("%d,%d",a,b); swap(&a,&b); printf("%d,%d",a,b); }
swap(int p,int q)
{ int t; t=p;p=q;q=t;}
A)该程序完全正确
B)该程序有错,只要将语句swap(&a,&b);中的参数改为a,b即可
C)该程序有错,只要将swap()函数中的形参p和q以及t均定义为指针(执行语句为变)即可
D)以上说法都不正确
4、设*p,i;以下正确的语句是()。
A)*p=&i; B)i=p; C)i=*p; D)p=2*p+1;
5、设char s[10];int i=1;以下正确的表达式是()。
A)[i+2] B)*(s+i) C)*(&s+i) D)*((s++)+i)
6、设有语句:int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;以下对a数组的元素值不正确的引用是()。
A)a[p-a] B)*(&a[i]) C)p[i] D)*(a[0]+1)
7、设有说明int(*ptr)[M];其中ptr是()。
A)M个指向整型变量的指针 B)指向M个整型变量的函数指针
C)一个指向具有M个整型元素的一维数组的指针
D)具有M个指针元素的一维指针数组,每一元素只能指向整型量
8、如下程序的执行结果是()。
main()
{ int i; char *s="a\\\\\n"; for(i=0;s[i]!='\n';i++) printf("%c",*(s+i)); }
A)a B)a\ C)a\\ D)a\\\\
9、有四组对指针变量进行操作的语句,以下判断正确的选项是()
(1)int *p,*q;q=p;
int a,*p,*q;*p=*q=&a;
(2)int a,*p,*q;q=&a;p=*q;
int a=20,*p;*p=a;
(3)int a=b=0,*p;p=&a;b=*p;
int a=20,*p,*q=&a;*p=*q;
(4)int a=20,*p,*q=&a;p=q;
int p,q;q=&p;
A)(1)正确,其余错 B)(1),(4)正确,其余错
C)(3)正确,其余错 D)以下结论都不正确
10、以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是()
main()
{ int *p,*q,a,b; p=&a; scanf("%d",*p);........ }
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论