欢迎来到天天文库
浏览记录
ID:38120237
大小:21.89 KB
页数:7页
时间:2019-05-26
《实验七 指针与数组 参考答案》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、1、设计程序sy6-1.c,有三个整形变量i,j,k。设置三个指针变量p1,p2,p3,分别指向i,j,k。然后通过指针变量使i,j,k三个变量的值顺序交换,即原来i的值赋给j,把j的原值赋给k,把k的原值赋给i。i,j,k的原值由键盘输入,要求输出i,j,k的原值和新值。 参考答案:# include void main() { int i,j,k,*p1,*p2,*p3,t; printf("请输入i,j,k: "); scanf("%d%d%d",&i,&j,&k); printf("交换前: i=%d j=%d,k
2、=%d",i,j,k); p1=&i; p2=&j; p3=&k;//p1指向i,p2指向j,p3指向k t=*p3; *p3=*p2;*p2=*p1,*p1=t;//通过指针间接访问i,j,k并实现交换printf("交换后: i=%d j=%d k=%d",i,j,k); } 2、设计程序sy6-2.c,已知数组{1,3,5,7,9},在其中分别用下标法、地址法和指针法访问数组元素,将它们输出。 参考答案:# include void main() { int a[5]={1,3,5,7,9},i,*p;
3、printf("下标法a[i]: "); for(i=0;i<5;i++) printf("%3d",a[i]);printf(" 地址法*(a+i):*(a+i):"); for(i=0;i<5;i++) printf("%3d",*(a+i)); printf("指针法*p: "); for(p=a;p4、 Yuan.”,并输出结果。 参考答案: # include void main() { char str[]="I have 50 Yuan."; char *p,*q; //定义两个字符指针p=q=str;//两个字符指针都指向字符串str while(*p!=' ') //p的目标单元等于' '循环结束{ if(*p!='0') //如果p的目标单元不为要被删除的字符'0' {*q=*p;q++;} //就把它赋值给q的目标单位p++; //赋值一次,p后移一个存储单元} *q=' ';//给新的字符串添加结束5、标志' 'printf("删除0字符后的字符串: %s",str); }? 运行结果 4、设计程序sy6-4.c,要求输入三行字符(每行不超过80个字符)存于二维字符数组中,统计出其中大写字母、小写字母、空格及其它字符的个数。(要求使用指向一维数组的指针变量) 参考答案: # include void main() { char ch,s[3][80],(*p)[80]; //p为指向一维数组的行指针变量int i,j,lower=0,uppr=0,space=0,other=0; printf("请输入3个字符串:6、"); for(i=0;i<3;i++) //等待从键盘接收3个可以带空格的字符串gets(s[i]); //分别赋给s[i],s[i]-第i行的首地址p=s; for(i=0;i<3;i++)//分别从0行到第2行for( j=0 ( ch=*(*(p+i)+j)) != ' ' j++ )//*(*(p+i)+j))等同于p[i][j]和a[i][j]//每行访问到当前行的结束标志即' '结束if(ch>='A' && ch<='Z') uppr++; //当前字符为大写字母,uppr++; else if(ch>='a' &7、& ch<='z') lower++;//当前字符为小写字母,lower++; else if(ch==' ') space++; //当前字符为空格,space++; else other++; //否则,other++; printf("小写字母个数: %d",lower); printf("大写字母个数: %d",uppr); printf("空格的个数: %d",space); printf("其它字符个数: %d",other); }? 运行结果 5、设计程序sy6-5.c,请用指向一维数组的指针变量实现二维矩阵的8、转置,二维矩阵为int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};转置后的结果存在int b[4][3]里面。 参考答案
4、 Yuan.”,并输出结果。 参考答案: # include void main() { char str[]="I have 50 Yuan."; char *p,*q; //定义两个字符指针p=q=str;//两个字符指针都指向字符串str while(*p!=' ') //p的目标单元等于' '循环结束{ if(*p!='0') //如果p的目标单元不为要被删除的字符'0' {*q=*p;q++;} //就把它赋值给q的目标单位p++; //赋值一次,p后移一个存储单元} *q=' ';//给新的字符串添加结束
5、标志' 'printf("删除0字符后的字符串: %s",str); }? 运行结果 4、设计程序sy6-4.c,要求输入三行字符(每行不超过80个字符)存于二维字符数组中,统计出其中大写字母、小写字母、空格及其它字符的个数。(要求使用指向一维数组的指针变量) 参考答案: # include void main() { char ch,s[3][80],(*p)[80]; //p为指向一维数组的行指针变量int i,j,lower=0,uppr=0,space=0,other=0; printf("请输入3个字符串:
6、"); for(i=0;i<3;i++) //等待从键盘接收3个可以带空格的字符串gets(s[i]); //分别赋给s[i],s[i]-第i行的首地址p=s; for(i=0;i<3;i++)//分别从0行到第2行for( j=0 ( ch=*(*(p+i)+j)) != ' ' j++ )//*(*(p+i)+j))等同于p[i][j]和a[i][j]//每行访问到当前行的结束标志即' '结束if(ch>='A' && ch<='Z') uppr++; //当前字符为大写字母,uppr++; else if(ch>='a' &
7、& ch<='z') lower++;//当前字符为小写字母,lower++; else if(ch==' ') space++; //当前字符为空格,space++; else other++; //否则,other++; printf("小写字母个数: %d",lower); printf("大写字母个数: %d",uppr); printf("空格的个数: %d",space); printf("其它字符个数: %d",other); }? 运行结果 5、设计程序sy6-5.c,请用指向一维数组的指针变量实现二维矩阵的
8、转置,二维矩阵为int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};转置后的结果存在int b[4][3]里面。 参考答案
此文档下载收益归作者所有