您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > _C语言程序设计26指针习题课
1.假如p是一个指针变量,下列表达式中正确的是_____。A*(p--)-=2B(++p)++C++(p++)D++p++2.假定有数组a[3][7],下列表达式中_____是错误的。A*(*a+2)B*(*(a+1))C*(&a[0][0]+2)D*(a+2)[5]答案:A答案:D练习题3.对表达式double(*f)(int,char*)的正确理解为_____。Af是一个返回双精度指针的函数Bf是一个需要两个参数的函数,该函数为double型C该函数是一个返回double型的需要两个参数的双精度指针Df是一个需要两个参数的返回double型的函数指针答案:D4.设有inta,*p=&a;下列表达式中,不正确表达式是()A&(*p)B&(*a)C*(&p)D*(&a)5.已知inta[5][5],int(*pa)[5];正确赋值语句是()Apa=a[1];Bpa=*(a+1);Cpa=&(a+1);Dpa=a+1;答案:B答案:D6.假定有数组inta[4][4],下列表达式中_____不是a[2][3]的地址。Aa[2]+3B*(a+2)+3C&a[2][3]D*(a[2]+3)答案:D7.已知函数fp原型是:intfp(double*(*)[10]),下列数组_____可作为参数:Adouble*arr[10];Bdouble*arr[5][10];Cdoublearr[5][10];Ddouble**arr[10];8.假定有inta[3][7],*pt,(*pa)[7];下列语句_____是错误的。Apt=&a[0][0];Bpt=a[0];Cpa=a;Dpt=a;答案:B答案:D9.对表达式char*(*pa[3])(char*)的正确理解为_____。Apa是一个返指针的函数数组,需要一个字符指针参数Bpa是一个需要字符指针参数的函数,该函数返回char*型C该函数是一个返回char*型的需要一个char*参数指针数组D由3个指针组成的数组,每个指针指向返回char*型,需要char*型参数的函数答案:D10.假如有语句char*s1=“abc”;chars2[]=“xyz”;下列_____语句是错误的。A*s1++;B*s2++;C*(s1+1);D*(s2+1);11.执行下列语句后,屏幕上输出的是_____。#defineTESTchars[]=“xyz”,*p=s;#ifndefTESTwhile(*p++);while(--p=s)printf(“%c”,*p);#elsewhile(*p)printf(“%c”,*p++);#endifAxyzBzyxC无输出D乱码答案:B答案:A12.对表达式int*(*fp[5])(char*)的正确理解为_____。Afp是一个返指针的函数,需要一个字符型指针参数Bfp是一个需要字符型指针参数的函数,该函数返回int*型Cfp是一个指向一个返回int*型的需要一个char*参数的函数指针Dfp是一个指针数组、数组的元素是指向返回int*,需要char*做参数的函数的指针答案:D13.已知函数fn原型是:char*fn(char*(*)(char),char*[]),且有char**v1;char*v2[];char*fp(char);正确的函数调用语句是()Afn(fp(3),v2);Bfn(v1,v2);Cfn(fp,&v2);Dfn(fp,v1);答案:D14.设有intarr[3][3],*p,(*pa)[3];表达式()的类型是int*型:AarrB&arr[0]C&arr[0][0];Dpa答案:C改错1./*strcmp:return0ifst,0ifs==t,0ifst*/#includestring.hintstrcmp(char*s,char*t){for(;*s==*t;s++,t++)if(*s=‘\0’)return0;return*(s–t);}答案:9./*strcmp:return0ifst,0ifs==t,0ifst*/#includestring.hintstrcmp(char*s,char*t){for(;*s==*t;s++,t++)if(*s=‘\0’)return0;if(*s==0)return*(s–t);}return*s–*t;改错2.下列函数的功能是用冒泡法对6个字符串由小到大排序。voidbubblesort(int*a[6]){inti,j;char*p;for(j=0;j5;j++){for(i=j+1;i6;i++)if(strcmp(*(a+j),a+i)0){{p=*(a+j);*(a+j)=a+i;*(a+I)=p;}}}答案:voidbubblesort(char*a[6]){inti,j;char*p;for(j=0;j5;j++){for(i=j+1;i6;i++)if(strcmp(*(a+j),a+i)0){if(strcmp(*(a+j),*(a+i))0){p=*(a+j);*(a+j)=a+i;*(a+i)=p;}*(a+j)=*(a+i);}}改错3.函数revs将一个字符串反转voidrevs(char*s){chart,*p=s;while(*p++);p--;while(p--s){t=*p;*p=*s;*s=t;}}答案:voidrevs(char*s){chart,*p=s;while(*p++);p--;while(p--s){改为――(--ps)t=*p;*p=*s;*s=t;}}――*s++=t;或*s=t;s++;改错4.下列程序的功能是将两个字符串链接起来#includestring.hvoidstrcat(char*s,char*t){for(;*s++;);s++;while(*s==*t)s++;t++;}答案:#includestring.hvoidstrcat(char*s,char*t){for(;*s++;);s++;删除该行while(*s==*t)将s++;t++;用{}扩起来s++;t++;}改错5.函数doublefn(int*x)的功能是计算整型数组x中所有正数的平均值并返回。该数组用0作为结束标志。doublefn(int*x){intsum=0.0;intc=0;while(*x){if(*x0){sum+=*x;c++;}x++;}sum\=c;returnsum;}答案:doublefn(int*x){intsum=0.0;intc=0;floatsum=0.0;while(*x){if(*x0){sum+=*x;c++;}x++;}sum\=c;returnsum;}sum/=c;分析下面程序的运行结果inta[3][3]={10,9,8,7,6,5,4,3,2};int*pa[3]={a[0],a[1],a[2]};int*p=a[0];main(){inti;for(i=0;i3;i++)printf(%d\t%d\t%d\n,*a[i],*(*(pa+i)),p[i]);}101010779448六.假定内存的初始分配如下图左方所示,执行下述语句后,分析内存分配情况,将结果写在右边内存示意图相应位置。short*pi,*pj,t;long*pl;double*pd;*pd+=(double)*pi;pi=&t;*pi=(short)*pl;pj=pi;*pj/=3;++pj;++*pj;六.假定内存的初始分配如下图左方所示,执行下述语句后,分析内存分配情况,将结果写在右边内存示意图相应位置。short*pi,*pj,t;long*pl;double*pd;*pd+=(double)*pi;pi=&t;*pi=(short)*pl;pj=pi;*pj/=3;++pj;++*pj;编写一个函数delodds。功能是从字符串s中删除所有ASCII码位奇数的字符,串中剩余字符形成一个新串放在t所指的数组中。函数原型如下:(10分)voiddelidds(char*s,chart[])voiddelodds(char*s,chart[]){inti,j=0,n;n=strlen(s);for(i=0;in;i++)if(s[i]%2==0)t[j++]=s[i];t[j]='\0';}六.分析下面程序的运行结果(10分)#includestdio.hvoidmain(){chars1[]=“gawsie”;chars2[]=“bletonism”;char*ps;inti=0;for(ps=s1;*ps;ps++){if(*ps==‘a’||*ps==‘e’)putchar(*ps);else(*ps)--;putchar(*ps);}putchar(‘\n’);while(s2[i]){printf(“%c”,i%3?s2[i]:‘*’);i++;}}faavrhee*le*on*sm
本文标题:_C语言程序设计26指针习题课
链接地址:https://www.777doc.com/doc-3656637 .html