第六章指针练习题及答案
一、填空题
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小时内删除。