收藏 分销(赏)

第十章-指针习题答案.doc

上传人:仙人****88 文档编号:8605590 上传时间:2025-02-21 格式:DOC 页数:8 大小:64.50KB 下载积分:10 金币
下载 相关 举报
第十章-指针习题答案.doc_第1页
第1页 / 共8页
第十章-指针习题答案.doc_第2页
第2页 / 共8页


点击查看更多>>
资源描述
第十章习题答案 一、单项选择题 8 1. C 2. A 3. B 4. B 5. D 6. D 7. A 8. C 9. B 10. D 11. B 12. A 13. C 14. C 15. C 16. D 17. C 18. B 19. A 20. C 21. C 22. A 23. C 24. D 25. B 26. C 或 D 27. D 28. A 29. C 30. D 31. C 32. D 33. B 二、填充题 1. 地址 加减 赋值 数组名 2. 地址 NULL 3. 取地址运算符 相互赋值 赋NULL 4. 加减整数 ++, -- 5. 间接访问 取地址 6. 比较 7. 3 +3 8. double *p=&a 9. 地址 所指的变量值 地址 10. sz[i] p[i] *(sz+i) 和 *(p+i) 11. ABCD A 12. static int a[5]; 13. int a[4][5], **p=a; 14. 50 15. *min, *a, *b, *c a, b, c *a, *b, *c *min=*b *min=*c *min 16. ’\0’ ++ 17. sp=str[i] sp strlen(sp) 三、程序分析题 1. 输出结果: udent 2. 输出结果: our 3. 输出结果: 3 ello 4. BBB AAA 123 5. 程序输出:ABCDEDGH 6. 程序的主要功能:把输入的10个整数反序一行一个的输出。 7. 程序运行的输出结果:A ABCD B BCD C CD D D 8. 该程序找出数组中最大和最小的元素,分别与第一和最后的元素交换,运行结果输出:13,10,-3,1,7,-21 9. 程序用pi和指针pj指向字符串s的头尾,然后逐步向中比较字符,到不等时终止。 若都相等,则是“回文”,回答“YES”,否则回答“NO”。因此当输入字符串“LEVEL” 时,输出“YES”,当输入字符串“LEVAL”时输出“NO”。 10. 四个字符指针指向四个字符串,程序每次循环p指向一个字符串,*p输出第一个字符,运行的输出结果:AEIM 11. 程序运行输出结果:0 1 2 3 -1 0 1 2 -2 –1 0 1 -3 –2 –1 0 12.程序运行输出结果: 1 0 0 1 13. 程序运行输出结果: x=10 , y=5 x=10 , y=10 14.程序运行输出结果: 3 , 2 , 5 3 , 3 , 4 四、程序设计题(全部题目均要求用指针方法实现) 1.解: #include <stdio.h> void main( ) { int a,b,c, *pa=&a, *pb=&b, *pc=&c; scanf(“%d,%d,%d“,pa,pb,pc); if(*pa>=*pb) if(*pb>*pc) printf(“%d,%d,%d\n“,*pa,*pc,*pb); else if(*pa>*pc) printf(“%d,%d,%d\n“,*pa,*pc,*pb); else printf(“%d,%d,%d\n“,*pc,*pa,*pb); else if(*pc>*pb) printf(“%d,%d,%d\n“,*pc,*pb,*pa); else if(*pa>*pc) printf(“%d,%d,%d\n“,*pb,*pa,*pc); else printf(“%d,%d,%d\n“,*pb,*pc,*pa); } 2.解: #include <stdio.h> #define N 15 void main( ) { int a[N],b,*p,*q; for(p=a;p<a+N;p++) scanf(“%d”,p); for(p=a,q=a+N-1;p<a+N/2;p++, q--); { b=*p, *p=*q; *q=b; } for(p=a;p<a+N;p++) printf(“%3d”,*p); printf(“\n”); } 3.解: #include <stdio.h> #include <string.h> void main( ) { char str[81], *sptr; gets(str); sptr=str+srlen(str)-1; for( ;sptr>=str ; sptr--) printf(“%c”,*sptr); printf(“\n”); } 4.解: #include <stdio.h> #define N 10 void main( ) { float a[N], avg, *pm, *ps, *p; for(p=a;p<a+N;p++) scanf(“%f”,p); pm=ps=a; avg=*a; for(p=a+1;p<a+N;p++); { if(*p>*pm) pm=p; if(*p<*ps) ps=p; avg+=*p; } printf(“一维实型数组最大值=%f\n”,*pm); printf(“一维实型数组最小值=%f\n”,*ps); printf(“一维实型数组平均值=%f\n”,avg/N); } 5.解: #include <stdio.h> void main( ) { int a[3][6], (*p)[6] , i , j , maxh=0,maxl=0,minh=0,minl=0,max,min; for(p=a,i=0;i<3;i++) for(j=0;j<6;j++) scanf(“%d”,*(p+i)+j); printf(“二维数组是:\n”); for(p=a,i=0;i<3;i++,p++) { for(j=0;j<6;j++) printf(“%3d”,(*p)[j]); printf(“\n”); } max=min=a[0][0]; for(p=a,i=0;i<3;i++) for(j=0;j<6;j++) { if(*(*(p+i)+j)>max) { maxh=i; maxl=j; max=*(*(p+i)+j); } if(*(*(p+i)+j)<min) { minh=i; minl=j; min=*(*(p+i)+j); } } printf(“最大值是:%d所在的行:%d所在的列:%d\n”,a[maxh][maxl],maxh,maxl); printf(“最小值是:%d所在的行:%d所在的列:%d\n”,a[minh][minl],minh,minl); } 6.解: #include <stdio.h> #include <string.h> void main( ) { char s[3][81], *p[3]={s[0],s[1],s[2]}.*tp; int i; printf(“输入3个字符串:\n”); for(i=0;i<3;i++) gets(p[i]); tp=p[0]; for(i=1;i<3;i++) if(strcmp(p[i],tp)>0) tp=p[i]; printf(“其中最大的字符串是:%s\n”,tp); } 7.解: #include <stdio.h> #include <string.h> void main( ) { char a[40],b[40],c[80],*s,*t=c; gets(a); gets(b); s=a; for( ;*s; ) *t++ = *s++; s=b; for( ; *s ; ) *t++ = *s++; *t=’\0’; puts(c); } 8.解: #include <stdio.h> #include <string.h> void main( ) { char a[81],b[81],*s=a,*t=b; gets(a); gets(b); while(*s&&*t) if(*s++!=*t++) break; if(!*s&&!*t) printf(“%s 与 %s 相等\n“,a,b); else printf(“%s 与 %s 不相等\n“,a,b); } 9.解: #include <stdio.h> #include N 10 void main( ) { int s[N],*p=s, *min, *max, t1,t2; printf(“输入十个整数(用空格分开):\n“); for(p=s;p<s+N;p++) scanf(“%d“, p); min=&s[0]; max=&s[N-1]; for(p=s; p<s+N;p++) { if (*p<*min) min=p; if (*p>*max) max=p; } t1=*min; *min=s[0]; s[0]=t1; t2=*max; *max=s[N-1]; s[N-1]=t2; for(p=s; p<s+N;p++) printf(“%d“,*p); } 10.解: #include <stdio.h> void main( ) { int s[10],i,,end_num, *p; for( i=0; i<10; i++) scanf(“%d“, &s[i]); printf(“\n“); for( i=0;i<4;i++) { end_num=s[9]; for(p=&s[9] ; p>=s; p--) *p=*(p-1); // 移动数据 s[0]=end_num; } printf(“移动后的数组值是:“); for( p=s; p<s+10; p++) printf(“%d “,*p); } 11.解: #include <stdio.h> void main( ) { int a[3][3],i,j,t,*p,(*q)[3]; p=a[0]; printf(“输入3×3个整数:\n“); for(i=0;i<3;i++) for(j=0;j<3;j++) scanf(“%d“,p++); p=a[0]; printf(“输出3×3个整数矩阵:\n“); for(i=0;i<3;i++) { for(j=0;j<3;j++) printf(“%3d“, *(p+i*3+j)); printf(“\n“); } q=a; for(i=0;i<3;i++) for(j=i;j<3;j++) { t=*(*(q+i)+j); *(*(q+i)+j)=*(*(q+j)+i); *(*(q+j)+i)=t;} printf(“转置后3×3的整数矩阵:\n“); for(i=0;i<3;i++) { for(j=0;j<3;j++) printf(“%3d“,*(*(q+i)+j)); printf(“\n“); } } 12.解: #include <stdio.h> #include <string.h> void main( ) { char a[80],*p; int up=0,1p=0,k=0,s=0,q=0; printf(“输入一个字符串:\n“); gets(a); p=a; while(*p!=’\0’) { if(’A’<= *p && *p<=’Z’) up++; else if(’a’<= *p && *p<=’z’) lp++; else if(’0’<= *p && *p<=’9’) s++; else if(*p ==’ ’) k++; else q++; p++; } printf(“大写字母个数是:%d\n“,up); printf(“小写字母个数是:%d\n“,lp); printf(“空格个数是:%d\n“,k); printf(“数字个数是:%d\n“,s); printf(“其他字符个数是:%d\n“,q); } 13.解: #include <stdio.h> #include <string.h> void main( ) { char a[80],b[80],*p,*q; int m; printf(“输入一个字符串:\n“); gets(a); printf(“输入第几个字符开始复制:“); scanf(“%d“,&m); p=a; q=b; for(p=p+m-1; *p!=’\0’; p++,q++) *q= *p; *q=’\0’; printf(“被复制的字符串是:%s\n“,b); } 14.解: #include <stdio.h> #include <string.h> void main( ) { char a[10][80],t[80],*p[10],*k; int i,j; printf(“输入10个字符串:\n“); for(i=0;i<10;i++) { p[i]=a[i]; gets(p[i]); } printf(“这10个字符串原来是:\n“); for(i=0;i<10;i++) puts(p[i]); for(i=0;i<9;i++) { k=p[i]; for(j=i+1; j<9; j++) if(strcmp(k, p[j])>0) k=p[j]; if(k!=p[i]) { strcpy(t, k); strcpy(k, p[i]); strcpy(p[i], t); } } printf(“这10个字符串交换后:\n“); for(i=0;i<10;i++) puts(p[i]); } 15. 解: #include <stdio.h> #include <stdio.h> void strmcpy(char s[ ],char t[ ], int m) void strmcpy(char *s, char *t, int m) { int j; { for( t=t+m-1; *t !=’\0’; s++, t++) for( j=0; t[j]!=’\0’; j++) * s= *t; s[j]=t[j+m-1]; *s=’\0’; s[j]=’\0’; } }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服