第10章指针(2)1.以下程序的运行结果sub(intx,inty,int*z){*z=y-x;}main(){inta,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,3B.–5,-12,-7C.–5,-12,-17D.5,-2,-72.以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是_________。main(){int*p,*q,a,b;p=&a;printf(“inputa:”);scanf(“%d”,*p);…}A.*p表示的是指针变量p的地址B.*p表示的是变量a的值,而不是变量a的地址C.*p表示的是指针变量p的值D.*p只能用来说明p是一个指针变量3.已有定义intk=2;int*ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是____________。A.k=*ptr1+*ptr2;B.ptr2=k;C.ptr1=ptr2;D.k=*ptr1*(*ptr2);4.若有说明:int*p1,*p2,m=5,n;以下均是正确赋值语句的选项是______。A.p1=&m;p2=&p1;Bp1=m;p2=n;*p1=*p2;C.p1=&m;p2=p1;D.p1=&m;*p2=*p1;5.下面判断正确的是___________。A.char*a=“china”;等价于char*a;*a=“china”;B.charstr[10]={“china”};等价于charstr[10];str[]={“china”};C.char*s=“china”;等价于char*s;s=“china”;D.charc[4]=“abc”,d[4]=“abc”;等价于charc[4]=d[4]=“abc”;6.下面程序段的运行结果是______________char*s=”abcde”;s+=2;printf(“%d”,s);A.cdeB.字符’c’C.字符’c’的地址D.无确定的输出结果7.下面程序段的运行结果是___________char*p=”abcdefghijk”;p+=3;printf(“%d\n”,strlen(strcpy(p,”ABCDE”)));A.11B.16C.5D.98.下列程序的功能是从输入的十个字符串中找出最长的那个串。请选择填空。#includestdio.h#includestring.h#defineN10main(){charstr[N][81],*sp;inti;for(i=0;iN;i++)gets(str[i]);sp=1)___C_______;for(i=1;iN;i++)if(strlen(sp)strlen(str[i]))sp=2)_____A______;printf(“sp=%d,%s\n”,strlen(sp),sp);}1)2)A.str[i]B.&str[i][0]C.StrD.str[N]9.下面程序的功能是将字符串a的所有字符传送到字符串b中,要求每传送三个字符后再存放一个空格,例如字符串a为”abcdefg”,则字符串b为”abcdefg”,请选择填空。#includestdio.hmain(){inti,k=0;chara[80],b[80],*p;p=a;gets(p);while(*p!=’\0’){for(i=1;1)___________;p++,k++,i++}b[k]=*p;if(__2)_______){b[k]=‘’;k++;}}b[k]=’\0’;puts(b);}1)A.i3B.i=3C.i3&&*p!=’\0’D.i=3&&*p!=’\0’2)A.i==4B.*p==’\0’C.!*pD.i!=4#includestdio.hmain(){inti,k=0;chara[80],b[80],*p;p=a;gets(p);while(*p!=’\0’){for(i=1;*p!=’\0’;p++,i++}{b[k]=*p;k++;if(i%3==0){b[k]=‘’;k++;}}}b[k]=’\0’;puts(b);}11.若有以下定义,则对a数组元素的正确引用是___________inta[5],*p=a;A.*&a[5]B.a+2C.*(p+5)D.*(a+2)12.若有以下定义,则对a数组元素地址的正确引用是___________inta[5],*p=a;A.p+2B.*a+1C.&a+1D.a[0]13.若有定义:inta[2][3];则对a数组的第i行第j列(假设i,j已正确说明并赋值)元素值的正确引用为___________A.*(*(a+i)+j)B.(a+i)[j]C.*(a+i+j)D.*(a+i)+j14.若有定义:inta[2][3];则对a数组的第i行第j列(假设i,j已正确说明并赋值)元素地址的正确引用为___________A.*(a[i]+j)B.(a+i)C.*(a+j)D.a[i]+j15.若有定义:int(*p)[4];则标识符p___________A.是一个指向整型变量的指针B.是一个指针数组名C.是一个指针,它指向一个含有四个整型元素的一维数组D.定义不合法16.若有定义:int*p[4];则标识符p___________A.是一个指向整型变量的指针B.是一个指针数组名C.是一个指针,它指向一个含有四个整型元素的一维数组D.定义不合法17.若有以下定义,则*(p+5)表示___________inta[10],*p=a;A.元素a[5]的地址B.元素a[5]的值C.元素a[6]的地址D.元素a[6]的值18.若有以下定义,则p+5表示___________inta[10],*p=a;A.元素a[5]的地址B.元素a[5]的值C.元素a[6]的地址D.元素a[6]的值21.以下程序的功能是:通过指针操作,找出三个整数中的最小值并输出。请填空。#include“stdio.h”main(){int*a,*b,*c,num,x,y,z;a=&x;b=&y;c=&z;printf(“输入3个整数:”);scanf(“%d%d%d”,a,b,c);printf(“%d,%d,%d\n”,*a,*b,*c);num=*a;if(*a*b)1)__num=*b____;if(num*c)2)__num=*c____;printf(“输出最小数:%d\n”,num);}22.假设a数组中的数据已按由小到大的顺序存放,以下程序可把a数组中相同的数据删得只剩一个,然后以每行4个数据的格式输出a数组。请填空。#includestdio.hvoidmain(void){inti,j,n;inta[10]={30,30,35,35,35,60,70,70,85,98};n=9;i=9;while(i0){if(*(a+i)==*(a+i-1)){for(j=___i+1____;j=n;j++)*(a+j-1)=*(___a+j____);n--;}i--;}for(i=0;i=n;i++){if(i%4==0)printf(“\n”);printf(“%4d”,*(__a+i___));}printf(“\n”);}或改为:#defineM10#includestdio.hvoidmain(void){inti,j,n,*p,*q;inta[10]={30,30,35,35,35,60,70,70,85,98};n=9;p=a+n;while(p!=a){if(*(p)==*(p-1)){for(q=p;q=a+n;q++)*q=*(q+1);n--;}p--;}i=0;for(p=a;p=a+n;p++,i++){if(i%4==0)printf(\n);printf(%4d,*p);}printf(\n);}23.下面程序可以逐行输出由language数组元素所指向的5个字符串。请填空。main(){char*language[]={“BASIC”,“FORTRAN”,“PROLOG”,“JAVA”,“C++”};char______;intk;q=___________;for(k=0;k5;k++,_______)printf(“%s\n”,*q);}key:**qlanguageq++24.设有5个学生,每个学生考4门课,以下程序能检查这些学生有无考试不及格的课程。若某一学生有一门或一门以上课程不及格,就输出该学生的序号(序号从0开始)和其全部课程成绩。请填空。main(){intscore[5][4]={{62,87,67,96},{95,85,98,73},{66,92,81,69},{78,56,90,99},{60,79,82,89}};int(*p)[4],j,k,flag;/*p为行指针变量*/p=score;for(j=0;j5;j++){flag=0;for(k=0;k4;k++,p++)if(______________)flag=1;if(flag==1){printf(No.%disfail,scoresare:\n”,j);for(k=0;k4;k++)printf(“%5d”,____________);printf((“\n”);}}}key:*(*p+k)60或score[j][k]60*(*p+k)或score[j][k]25.以下程序找出二维数组a中每行的最大值,并按对应的顺序放入一维数组s中。即第零行中的最大值,放入s[0]中,第一行中的最大值,放入s[1]中,…。然后输出每行的行号和最大值。请填空。#defineN3#defineM6main(){inta[N][M];ints[N],i,j,k;int(*p)[M],*q;clrscr();p=a;for(i=0;iN;i++,_______)for(j=0;jM;j++)scanf(%d,*p+j);p=a,q=s;for(i=0;iN;i++,p++,q++){*q=*(*p);for(j=1;jM;j++)if(*q_____*(*p+j))*q=_________;}_________;for(i=0;iN;i++,______)printf(Row=%2dMax=%5d\n,i,*_____);}key:p++*(*p+j)q=sq++q