实验六 参考答案
更新时间:2024-03-25 19:47:01 阅读量: 综合文库 文档下载
- 实验六实验报告表推荐度:
- 相关推荐
实验六 指针与数组(参考答案)
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的原值和新值。 算法分析:
以前能实现两个数的交换,现在换为3个数的交换。算法应先将k的值赋给中间变量,然后依次将j赋给k,i赋给j,最后将保存在中间变量中的k赋给i;用指针实现,就是去访问每个变量都用指向该变量的指针去间接访问。 参考答案:
# include
int i,j,k,*p1,*p2,*p3,t; printf(\请输入 i,j,k: \
scanf(\%d%d\
printf(\交换前: i=%d j=%d,k=%d\\n\
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\\n\
}
运行结果:
2、设计程序sy6-2.c,已知数组{1,3,5,7,9},在其中分别用下标法、地址法和指针法访问数组元素,将它们输出。 算法分析:
指针p指向了一维数组a,则对数组元素的访问可以有如下几种方式:a[i],p[i],*(a+i),*(p+i) 参考答案:
# include
int a[5]={1,3,5,7,9},i,*p; printf(\下标法a[i]: \for(i=0;i<5;i++)
printf(\a[i]);
printf(\地址法*(a+i):*(a+i): \for(i=0;i<5;i++)
printf(\*(a+i));
printf(\指针法*p: \for(p=a;p
} 运行结果
3、设计程序sy6-3.c,利用字符指针编程,要求在一行文字:“I have 50 Yuan.”中,删去字符‘0’,使其变成:“I have 5 Yuan.”,并输出结果。 算法分析:
将字符串保存在字符数组中,然后令两个字符指针p、q变量同时指向该字符数组,p指针逐一去遍历字符串直到’\\0’结束,遍历过程中,p的目标单元只要不是要被删除的字符就把它赋给q的目标单元,赋一次值q++一次。循环完,给被删除‘0’字符的新串添上结束标志’\\0’,最后输出新串。 参考答案:
# include
char str[]=\
char *p,*q; //定义两个字符指针
p=q=str; //两个字符指针都指向字符串str
while(*p!='\\0') //p的目标单元等于'\\0'循环结束
{ if(*p!='0') //如果p的目标单元不为要被删除的字符'0' {*q=*p;q++;} //就把它赋值给q的目标单位 p++; //赋值一次,p后移一个存储单元 }
*q='\\0'; //给新的字符串添加结束标志'\\0' printf(\删除0字符后的字符串 : %s\\n\}?? 运行结果
4、 设计程序sy6-4.c,要求输入三行字符(每行不超过80个字符)存于二维字符数组中,统计出其中大写字母、小写字母、空格及其它字符的个数。(要求使用指向一维数组的
指针变量)
算法分析:
遍历二维字符数组与遍历二维字符数组的方式基本相同,都要用双重循环,内循环访问每一行时,结束的标志为该行字符串的结束标志’\\0’;另外需要用到指向一行的字符指针变量去遍历和访问每个元素。 参考答案:
# include
char ch,s[3][80],(*p)[80]; //p为指向一维数组的行指针变量 int i,j,lower=0,uppr=0,space=0,other=0; printf(\请输入3个字符串:\\n\
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)) != '\\0' ; j++ )//*(*(p+i)+j))等同于p[i][j]和a[i][j] //每行访问到当前行的结束标志即'\\0'结束 if(ch>='A' && ch<='Z') uppr++; //当前字符为大写字母,uppr++; else if(ch>='a' && ch<='z') lower++;//当前字符为小写字母,lower++; else if(ch==' ') space++; //当前字符为空格,space++; else other++; //否则,other++; printf(\小写字母个数: %d\\n\ printf(\大写字母个数 : %d\\n\ printf(\空格的个数: %d\\n\ printf(\其它字符个数 : %d\\n\}?? 运行结果
5、 设计程序sy6-5.c,请用指向一维数组的指针变量实现二维矩阵的转置,二维矩阵为int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};转置后的结果存在int b[4][3]里面。 算法分析:
转置的方法以前已经掌握,这里要用指针来处理,注意定义的指针指向a数组的行应包含4个整形数,而指向转置结果的指针变量应包含3个整形数据的行指针。 参考答案:
#include
void main() { int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; int i,j, (*p)[4],(*q)[3]; //p为行指针,即可以指向一行包含4个整形数的一行
int b[4][3]; //数组b用来存放转置后的结果
p=a; q=b; //p为行指针,将行指针常量a赋给它,q指向转置后的数组b printf(\转置以前a:\\n\for(i=0;i<3;i++) {for(j=0;j<4;j++)
{printf(\ *(*(p+i)+j)); //*(*(p+i)+j)等同于p[i][j],a[i][j] q[j][i]=p[i][j]; //转置
}
printf(\ //输出一行4个数换行 }
printf(\转置后b:\\n\
for(i=0;i<4;i++) {for(j=0;j<3;j++) printf(\*(*(q+i)+j)); //*(*(q+i)+j)等同于q[i][j],b[i][j] printf(\ //输出一行3个数换行 }
}
运行结果
正在阅读:
实验六 参考答案03-25
数据库图书信息管理数据库SQL语句09-05
2021年庆祝建党100周年党章和党的基础知识竞赛题库及答案(共130道)05-04
幼儿园大班10月份育儿知识03-22
购物囧事作文700字07-07
庆元旦迎新年活动策划方案03-10
会计专业双语课程教学方法改革初探06-26
科目:语文 年级:高二 教师:孙忠惠06-02
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 答案
- 参考
- 实验
- 广东省2011年普通高等学校招生全国统一考试 - 图文
- 成都市市政桥梁清水混凝土技术指南
- 绕口令注音版
- 建筑工程定额与预算在线测试答案
- 公租房可行性研究报告
- LEHY-II - 无能量反馈、C语言 - 小分类故障显示
- 高一篮球比赛规程
- 武汉市房管局房屋买卖合同范本
- 大学生心理健康教育实践课作业模板(二)
- 专题复习 - 化学反应速率与化学平衡
- 2016年全国高中数学联赛陕西省预赛试题及答案
- 广西壮族自治区药械集中采购平台 - 图文
- 2009-2010学年江苏省如皋市对口升学计算机专业二模试卷(含答案
- 2016届高三生物一轮复习 第一单元 神经调节和体液调节单元过关检
- 成都广告设计招标流程及评分标准
- 政府经济学综合练习题(二)(2011春季学期)
- 汉中市城市功能定位与经济产业发展专题研究20090706 - 图文
- 单体液压支柱维修方案
- 采煤工艺设计
- 小微金融主体的构成及其对小微经济群体扶助方向分析