您好,欢迎访问三七文档
当前位置:首页 > 中学教育 > 高中教育 > 指针-习题九及参考答案
习题九一、单选题1、已知:int*p,a;则语句p=&a;中的运算符&的含义是()。A)位与运算B)逻辑与运算C)取指针内容D)取变量地址2、已知:inta,x;则正确的赋值语句是()。A)a=(a[1]+a[2])/2B)a*=*a+1;C)a=(x=1,x++,x+2);D)a=goog;3、已知:inta,*p=&a;则下列函数调用中错误的是()。A)scanf(%d,&a);B)scanf(%d,p);C)printf(%d,a);D)printf(%d,p);4、main(argc,argv)中形式参数argv的正确说明形式应当为()。A)char*argv[]B)charargv[][]C)charargv[]D)char*argv5、说明语句int(*p)();的含义是()。A)p是一个指向一维数组的指针变量B)p是一个指针变量,指向一个整型数据C)p是一个指向函数的指针,该函数的返回值是一个整型D)以上都不对6、设有说明int(*ptr)[M];其中的标识符ptr是()。A)M个指向整型变量的指针B)指向M个整型变量的函数指针C)一个指向有M个整型元素的一维数组的指针D)具有M个指针元素的一维指针数组,每个元素都只能指向整型变量7、已知:double*p[6];它的含义是()。A)p是指向double型变量的指针B)p是double型数组C)p是指针数组D)p是数组指针8、已知函数说明语句:void*f();则它的含义是()。A)函数f的返回值是一个通用型的指针B)函数f的返回值可以是任意的数据类型C)函数f无返回值D)指针f指向一个函数,该函数无返回值9、已知:chars[10],*p=s,则在下列语句中,错误的语句是()。A)p=s+5;B)s=p+s;C)s[2]=p[4];D)*p=s[0];10、已知:charb[5],*p=b;则正确的赋值语句是()。A)b=abcdB)*b=abcdC)p=abcdD)*p=abcd11、下列对字符串的定义中错误的是()。A)charstr[7]=FORTRANB)charstr[]=FORTRANC)char*str=FORTRAND)charstr[]={'F','O','R','T','R','A','N','\0'}12、已知:chars[20]=programming,*ps=s;则不能引用字母o的表达式是()。A)ps+2B)s[2]C)ps[2]D)ps+=2,*ps13、已知:inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;则不能表示数组a中元素的表达式是()。A)*pB)a[10]C)*aD)a[p-a]14、已知:char**s;正确的语句是()。A)s=computer;B)*s=computer;C)**s=computer;D)*s='A’;15、已知:charc[8]=beijing,*s=c;inti;则下面的输出语句中,错误的是()。A)printf(%s\n,s);B)printf(%s\n,*s);C)for(i=0;i7;i++)D)for(i=0;i7;i++)printf(%c,c[i]);printf(%c,s[i]);16、已知:inti=0,j=1,*p=&i,*q=&j;错误的语句是()。A)i=*&j;B)p=&*&i;C)j=*p++;D)i=*&q;17、已知:char*p,*q;选择正确的语句()。A)p*=3;B)p/=q;C)p+=3;D)p+=q;18、已知:inta,*p=&a;则为了得到变量a的值,下列错误的表达式为();A)*&pB)*pC)p[0]D)*&a19、C语言主函数main()最多允许有()个参数。A)1B)2C)0D)320、已知:inta[4][3]={1,2,3,4,5,6,7,8,9,10};int(*ptr)[3]=a,*p=a[0];则以下能够正确表示数组元素a[1][2]的表达式是()。A)*((ptr+1)[2])B)*(*(p+5))C)(*ptr+1)=2D)*(*(a+1)+2)二、填空题1、下面的函数是求两个整数之和,并通过行参传回结果。intadd(intx,inty,________z)(int*){________=x+y;}(*z)2、下面程序通过指向整型的指针将数组a[3][4]的内容按3行4列的格式输出,请给printf()填入适当的参数,使之通过指针p将数组元素按要求输出。#includestdio.hinta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}},*p=a;main(){inti,j;for(i=0;i3;i++){for(j=0;j4;j++)printf(%4d,___________);(*p+i*4+j)}}3、下面程序的功能是:从键盘上输入一行字符;存入一个字符数组中,然后输出该字符串。#includestdio.hmain(){charstr[81],*sptr;inti;for(i=0;i80;i++){str[i]=getchar();if(str[i]=='\n')break;}str[i]=___________;('\0')sptr=str;while(*sptr)putchar(*sptr_______);(++)}4、下面的程序实现从10个数中找出最大和最小值。#includestdio.hintmax,min;find_max_min(int*p,intn){int*q;max=min=*p;for(q=________;________;q++)(q=pqp+n)if(________)max=*q;(*qmax)elseif(________)min=*q;(*qmin)}main(){inti,num[10];printf(input10numbers:\n)for(i=0;i10;i++)scanf(%d,&num[i]);find_max_min(num,10);printf(max=%d;min=%d\n,max,min);}三、编程题1、编写一函数,其功能是交换两个变量x、y的值。编程序实现对数组a[100],b[100]调用此函数,交换a、b中具有相同下标的数组元素的值,且输出交换后的a、b数组。/*p279_1.c*/#includestdlib.hvoidswap(int*pa,int*pb){intt;t=*pa;*pa=*pb;*pb=t;}main(){inta[100],b[100],i;for(i=0;i100;i++)/*产生数组a和b*/{a[i]=random(100);b[i]=random(100);}printf(beforeswapA:\n);/*输出交换前数组a*/for(i=0;i100;i++)printf(%3d,a[i]);printf(\n);printf(beforeswapB:\n);/*输出交换前数组b*/for(i=0;i100;i++)printf(%3d,b[i]);printf(\n);for(i=0;i100;i++)/*a、b数组元素交换*/swap(&a[i],&b[i]);printf(afterswapA:\n);/*输出交换后数组a*/for(i=0;i100;i++)printf(%3d,a[i]);printf(\n);printf(afterswapB:\n);/*输出交换后数组b*/for(i=0;i100;i++)printf(%3d,b[i]);printf(\n);}_2、用数组方案和指针方案分别编写函数insert(s1,s2,f),其功能是在字符串s1中的指定位置f处插入字符串s2。解1:/*P279_2A.c*/#includestring.hinsert(char*sa,char*sb,intn){charsf[80],*p,*q;inti=0;for(p=sa+n;*p!='\0';p++)sf[i++]=*p;sf[i]='\0';for(p=sa+n;*sb!='\0';p++,sb++)*p=*sb;for(q=sf;*q!='\0';p++,q++)*p=*q;*q='\0';}main(){chars1[80]=dsahfdjkahfke;chars2[40]=sdajkhew;intn;puts(s1);puts(s2);n=strlen(s1);printf(Inputn(0----%d):\n,n);scanf(%d,&n);insert(s1,s2,n);puts(s1);}解2:/*P279_2B.C*/#includestring.hinsert(charsa[],charsb[],intn){charsf[80];inti=0,k=0;while(sa[n+i]!='\0')sf[i]=sa[n+i++];sf[i]='\0';i=0;while(sb[i]!='\0')sa[n+i]=sb[i++];while(sf[k]!='\0')sa[n+i++]=sf[k++];sa[n+i]='\0';}main(){chars1[80]=dsahfdjkahfke;chars2[40]=sdajkhew;intn;puts(s1);puts(s2);n=strlen(s1);printf(Inputn(0----%d):\n,n);scanf(%d,&n);insert(s1,s2,n);puts(s1);}解3#includestring.hmain(){chars1[80],s2[30];intn;gets(s1);gets(s2);printf(Inputn(nstrlen(s1):\n);doscanf(%d,&n);while(n=strlen(s1));insert(s1,s2,n);puts(s1);}insert(char*p1,char*p2,intk){chartem[80];strcpy(tem,p1+k);/*保存第k个字符开始的字符*/*(p1+k)='\0';/*使第k个字符之前的字符为一个独立字符串*/strcat(p1,p2);/*将p2复制到p1之后*/strcat(p1,tem);/*再将保存再tem中的字符串连接到p1末尾*/}3、用指针编写比较两个字符串s和t的函数strcmp(s,t)。要求st时返回-1,s=t时返回0,st时,返回1。解1:/*P279_3.C*/intstrcmp(char*s1,char*t1){while(*s1!='\0'&&*t1!='\0'){if(*s1*t1)return1;if(*s1*t1)return-1;if(*s1++==*t1++)continue;}if(*s1*t1)return1;if(*s1==*t1)return0;if(*s1*t1)return-1;}main(){intk;chars[80]=123456;chart[40]=123456;puts(s);puts(t);k=strcmp(s,t);if(k==1)printf(st:%d\n,k);if(k==0)printf(s==t:%d\n,k);if(k==-1)printf(st:%d\n,k);解2:/*P279_3b.c*/#includestring.hintsstrcmp(char*s,char*p){while(*s!='\0'&&*p!='\0'&&*s++==*p++);if(*s*p)return1;elseif(*s==*p)return0;elsereturn-1;}main(){chara[80],b[80];intk;gets(a);gets(b);k=sstrcmp(a,b);if(k==1)printf(ab\n);if(k==0)printf(a==b\n
本文标题:指针-习题九及参考答案
链接地址:https://www.777doc.com/doc-5860431 .html