资源描述:
《实验七_指针与数组答案》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
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的原值和新值。参考答案:#includevoidmain(){inti,j,k,*p1,*p2,*p3,t;printf("请输入i,j,k:");scanf("%d%d%d",&i,&j,&k);printf("交换前:i=%dj=%d,k=%d",
2、i,j,k);p1=&i;p2=&j;p3=&k;//p1指向i,p2指向j,p3指向kt=*p3;*p3=*p2;*p2=*p1,*p1=t;//通过指针间接访问i,j,k并实现交换printf("交换后:i=%dj=%dk=%d",i,j,k);}运行结果:2、设计程序sy6-2.c,已知数组{1,3,5,7,9},在其中分别用下标法、地址法和指针法访问数组元素,将它们输出。参考答案:#includevoidmain(){inta[5]={1,3,5,7,9},i,*p;printf("下标法a[i]:");for(i=0;i
3、<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;pvoidmain(){c
4、harstr[]="Ihave50Yuan.";char*p,*q;//定义两个字符指针p=q=str;//两个字符指针都指向字符串strwhile(*p!=' ')//p的目标单元等于' '循环结束{if(*p!='0')//如果p的目标单元不为要被删除的字符'0'{*q=*p;q++;}//就把它赋值给q的目标单位p++;//赋值一次,p后移一个存储单元}*q=' ';//给新的字符串添加结束标志' 'printf("删除0字符后的字符串:%s",str);}运行结果4、设计程序sy6-4.c,要求输入三行字符(每行不超过80个字符)
5、存于二维字符数组中,统计出其中大写字母、小写字母、空格及其它字符的个数。(要求使用指向一维数组的指针变量)参考答案:#includevoidmain(){charch,s[3][80],(*p)[80];//p为指向一维数组的行指针变量inti,j,lower=0,uppr=0,space=0,other=0;printf("请输入3个字符串:");for(i=0;i<3;i++)//等待从键盘接收3个可以带空格的字符串gets(s[i]);//分别赋给s[i],s[i]-第i行的首地址p=s;for(i=0;i<3;i++)//
6、分别从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++;elseif(ch>='a'&&ch<='z')lower++;//当前字符为小写字母,lower++;elseif(ch=='')space++;//当前字符为空格,space++;elseother++;//否则,other++;printf("小写字母个数:%d
7、n",lower);printf("大写字母个数:%d",uppr);printf("空格的个数:%d",space);printf("其它字符个数:%d",other);}运行结果5、设计程序sy6-5.c,请用指向一维数组的指针变量实现二维矩阵的转置,二维矩阵为inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};转置后的结果存在intb[4][3]里面。参考答案:#includevoidmain(){inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,1
8、1,12}};inti,j,(*p)[4],(*q)[3];//p为行指针,即可以指向一行包含