《C++指针》习题参考答案_第1页
《C++指针》习题参考答案_第2页
《C++指针》习题参考答案_第3页
《C++指针》习题参考答案_第4页
《C++指针》习题参考答案_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.C+指针习题学号 姓名 一、 选择题1、有定义如下:int a5, *p; 则下列描述错误的是 B A表达式p=p+1是合法的B表达式a=a+1是合法的C表达式p-a是合法的D表达式a+2是合法的2、函数定义为Fun(int &i),变量定义n=100,则下面调用该函数正确的是 C AFun(20)BFun(20+n)CFun(n)DFun(&n)3、若有说明int I,j=2,*p=&i;则能完成i=j赋值功能的语句是 B Ai=*p;B*p=*&j;Ci=&j;Di=*p;4、设已有定义char *st = how are you;下列程序中正确的是 A Achar a11,*p;strcpy(p=a+1,&st4);Bchar a11;strcpy(+a,st);C. char a11;strcpy(a,st);D. char a,*p;strcpy(p=a1,st+2);5、设有数组int array34,下列引用数组元素的方法中错误的是 D AarrayijB*(*(array+i)+j)C. *(arrayi+j)D. *(array+i*4+j)6、有定义int s45,(*ps)5;ps=s;则对数组s中元素引用的正确的是 C Aps+1B*(ps+3)C. ps02D. *(ps+1)+37、设有说明int b44,以下不能等价表示元素b33的是: B A*&b33 B(*(*(b+3)+3) C*(b3+3) D*(*(b+3)+3)8、若有说明char *s=234,5678,9012,3456,7890;,则表达式*s1 *s3比较的是 B A1234和9012 B5和3 Cl和9 D5678和34569、设语句char *s=Student,Teacher,Father,Mother,*ps=s2;,执行语句cout*s1,ps,*psn;,则输出结果是 A AT,Father,F BTeacher,F,Father CTeacher,Father,Father D语法错无输出10、设有以下说明语句: char sl20=hello,s220=china;const char *ptr=s1; 以下语句中不符合C+语法规则的语句是 D Astrcpy(s2,ptr); Bptr=s2; Cptr=ptr+4; D*ptr=*s2;11、设s和t分别为指向两个长度相同的字符数组的指针,则循环语句while( C );可以正确实现字符串t到s的完整复制功能。 A*s=*t&*t!=O Bs+=t+&*t!=0C*s+=*t+ D*(+s)=*(+t)12、设有说明:char s110,*s2=s1;则以下正确的语句是 C As1=”computer” Bs110=”computer”Cs2=”computer” D*s2=”computer”13、设有说明:int a4=1,2,3,4,5,6,7,8,9,10,*p=*(a+1);以下可得数值为9 的表达式是 B A p+=3,*p+ Bp+=4,*(p+)Cp+=4,*+p Dp+=4,+*p14、设有说明:int a44=1,2,3,4,5,6,7,8,9,10,*p=a1,(*q)4=a;则以下不能访问数值为7的数组元素的表达式是 A A *(a+1)+2 B p2 C *(a1+2) D q12二、填空题1、在如下定义中 float a =100,200,300; float *p =&a0, &a1, &a2; 语句cout*p2的输出是 300 2、若有说明语句char *name=newspaper; 则coutname+2的输出是 wspaper ,cout*(name+3) 的输出是 s 。3、int a5=100, 200,300, 400, 500, *p1=&a0; 则表达式(*p1)+的值是 100 。4、有如下定义中char *str =“Follow me”, “BASIC”, “Great Wall”, “Department”中输出”BASIC”字符串的语句是:cout str1 5、执行以下语句:int a5=25,14,27,18,*p=a;(*p)+; 则 *p的值为 26 ,再执行语句:*p+;则 * p的值为 14 6、设有说明语句char s=123t45600089,*p=s;执行以下两个语句:cout*(p+5)n;cout(p+5)n;则输出为 5 和 56 。7、设有如下函数定义。如果在主函数中有语句coutf(“goodbye!”); 则输出 9 int f(char *s) char *p=s;while(*p+);return(ps);8、执行以下程序后,y的值是 10 int main() int a4=2,4,6; int y=0,*p=a; for(;*p+;)if(*p)y+=*p; coutyendl;9、三、程序阅读题1、 写出如下程序的运行结果。char s = abcdefgh ,*p = s;p += 3;coutstrlen(strcpy(p,ABCD)endl; /4coutsendl; /abcABCD2、 写出如下程序的运行结果。char *p = abcdefgh,*r;long *q = (long *)p;q+;r = (char *)q;coutrendl; /efgh3、 写出如下程序的运行结果。void sub(int x,int y,int *z)*z = y - x;int main()int a,b,c;sub(10,5,&a);sub(7,a,&b);sub(a,b,&c);coutatbtcendl; /-5 -12 -7return 0;4、 写出如下程序的运行结果。void ss(char *s,char t)while(*s)if(*s=t)*s = t - a + A;s+;int main()char str1100=abcddfefdbd,c=d;ss(str1,c);coutstr1endl; /abcDDfefDbDreturn 0;5、void swap(int *p1, int *p2)int *p;p=p1; p1=p2; p2=p;cout*p1t*p2endl;int main(void)int a=5, b=9;swap(&a, &b);coutatbendl;return 0;程序第一行输出 9 5 ,第二行输出 5 9 6、void exchange(int *x, int *y)int temp;temp=*x; *x=*y;*y=temp;void main(void)int data8=15,12,20,0,8,-5,17,1;for(int i=0;i=7;i+)for (int j=i;jdataj)exchange(&datai, &dataj);coutdataiendl;函数exchange的作用是: 交换指针变量指向的数 ,&datai表示的是: datai的地址 ,程序的输出结果是: -5 0 1 8 12 15 17 20 7、写出如下程序的输出结果void invert(char*a,int x,int y)char t,*p,*q; p=a+x; q=a+y; while(pq) t=*p; *p=*q; *q=t; p+;q-; int main() char dt13=GoodBookNice; int i=0,n=1; while(i8)invert(dt,i,i+5); cout第n+次计算:endl; for(int j=i;j=i+5;j+) coutdtj,; coutendl; i+=6;cout共执行了i次计算。endl;return 0;第1次计算:o,B,d,o,o,G,第2次计算:e,c,i,N,k,o,共执行了12次计算8、写出如下程序的运行结果。char ch25=6934,8254; char *p2; int i,j,s=0;for(i=0;i2;i+)pi=chi;for(i=0;i0&pij=9;j+=2) s+=10*(pij-0);couts; /2209、写出如下程序的运行结果。int sum(int p,int *w,int n)int i;int s=0,m=0;for(i=0;im) m=pi; *w=i; return s; int main() int aa33=2,4,8,7,5,3,2,6,9;int row3,col3=0,0,0;for(int i=0;i3;i+)rowi=sum(aai,col+i,3);coutrow(i)=rowiendl;for(i=1;i3;i+)cout第i行位置:coliendl;return 0;row(0)=14row(1)=15row(2)=17第1行位置:0第2行位置:210、写出如下程序的运行结果。double fl(double x) return x+x;double f2(double(*f)(double x),int a) int x;double sum=0; for(x=a;x=a+1;x+)sum+=f(x) * f(x); return sum;int main() double sum;for(int i=1;i5;i+) sum=f2(fl,i); coutsumendl; 205210016411、以下程序运行后,输出是 3 3 2 ,如果去掉A行的continue语句,则输出 3 4 3 char *s=121; int k=0,a=0,b=0;do k+; if(k%2=0) a+=sk-0;continue; /A if(sk) b+=sk-0;a+=sk-0;while(sk);coutktatbn;四、程序填空题1、下面程序的功能是:主函数定义了一个整型数组data,从键盘上输入一个数x,调用函数fsum()断该数x是否在数组data中。如果x在数组中,则得到x在data中第一次出现时的下标值p,同时求出下标从0到P之间所有元素之和,函数返回x的下标值p;否则,x不在数组中,函数fsum()返回-1,主函数提示相应信息。主函数输出计算结果。请完善程序。#include using namespace std;int fs(int *a,int n,int x,int &sum) sum=0; for(int i=0;in;i+) sum = sum + ai ; if(x=ai) return i;return-1;int main()int data=12,31,16,28,7,29,35,18,40;int x,s,index;coutx;index=fs( data, 9,x,s );if( index=-1 ) coutx不在数组中endl;else coutx是数组中下标为index的元素。; cout数组中前 index 项之和为:sendl;return 0;2、下面程序的功能是:从输入的一行字符串中求出最长英文单词长度及最长单词个数,并输出长度和个数,单词之间只能用一个或多个空格隔开。如输入字符串”I am a student”时,最长单词的长度为7,个数为1。而输入字符串”word body book try”时,最长单词的长度为4,个数为3,即有三个单词均为最长单词。#includeint lenofLongest(char *s,int &num)int maxlen=0,curlen=0;num=0; for(; *s!=0 ;) while(*s= ) s+ ; /跳过空格 if(*s!=0) while(*s!= & *s) curlen+;s+; if(curlenmaxlen) m

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论