




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
4.第三次实验C语言程序设计 实验报告专业 计算机科学与技术 班级 信安1302班 日期 2014.4.12 成绩 实验组别 第 3 次实验 流程控制实验 指导教师 学生姓名 学号 同组人姓名 实验名称 流程控制实验 4.1实验目的1.掌握复合语句,if语句,switch语句的使用,熟练掌握for,while,do-while三种基本的循环控制语句的使用,掌握重复循环技术,了解转移语句与标号语句。2.掌握运用for,while,do-while语句来编写程序。3.练习转移语句和标号语句的使用。4.使用集成开发环境的调试功能:单步执行,设置断点,观察变量值。4.2实验内容(一)在不用数组的情况下求n个数的最大值最小值和平均值源程序如下shangji3chengxu14#include int main() int max,min,n,x,i; float s; s=0;i=1; printf(enter n:); scanf(%d,&n); printf(enter the first number:); scanf(%d,&x); s=s+x; max=x;min=x; do scanf(%d,&x); s+=x; if(xmax) max=x; else if(xmin) min=x; i+; while(i=n-1); printf(the max=%dn,max); printf(the min=%dn,min); printf(the average is %.2fn,s/n); return 0;实验步骤:步骤一:定义两个整型变量分别存放最大值最小值,定义一个整型变量用来存放输出的数的和,定义一个变量n用来存放应该输入的数的个数,定义一个变量i用来控制循环。步骤二:键入n的值,输入第一个数的值,并将此值赋给最大值和最小值。在循环结束前,将后来输入的数分别与当前最大值和最小值比较,不断将目前的最大值和最小值分别赋给两个变量。在不断输入的过程中,将后来输入的数加到s上。步骤三:循环结束,输出最大值和最小值,并将和除以n得平均值。调试及编译过程:测试数据:n=5,输入11,12,13,14,15测试数据:n=5,输入15,14,13,12,11(反向输入)出现的不足及修改:1.如何控制输入的数为n个时,本来将i的循环条件写为i=n,发现这样写得输入n+1个数才能将输入流中的数送入运算器。这样的错误时由于没有完全弄明白do while循环的特点,后改为i=n-1,这样输入倒数第二个数时还要进行最后一次循环,于是输入最后一个数。(二)依据下列格里高利公式,计算圆周率。要求最后一项10-6。源程序如下:shangji3chengxu15#include #define EPS 1e-6int main() int i,j; double s; for(s=0,i=1;(1.0/i)EPS;i+) j=(i%2)?1:-1; s+=j*(1.0/(2* i-1); printf(s=%.lf,4*s); return 0;实验步骤: 步骤一:在执行函数前定义精确度,定义两个整型变量分别控制循环和决定加上的数的正负. 步骤二:开始循环,控制循环结束的条件为再次加上的数的绝对值小于精确值。 步骤三:结束循环,将累次相加的结果输出。调试及编译过程:出现的不足及修改:无 运行结果:输出预期的结果。(三)完全数是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和恰好等于它本身。试求出11000范围内的所有完全数。源程序如下:shangji3chengxu16#include int wqs(int x);int main() int i; for(i=1;i=1000;i+) if(wqs(i) printf(%4d,i); return 0;int wqs(int x) int i,s; s=0; for(i=1;i=x/2;i+) if(!(x%i) s+=i; if(s=x) return (1); else return (0);实验步骤: 步骤一:定义一个子函数用来判断一个数是否为完全数,即将1到该数的一半的数进行测试,若是此数的因子,则加到存放因子之和的变量中。 步骤二:控制1到1000的循环,对每一个数用子函数进行测试,若是完全数,则输出。调试及编译过程: 出现的不足及修改:无 运行结果:输出预期的结果。(四)水仙花数是指一个 3 位数,它的每个位上的数字的 3 次幂之和等于它本身。例如:13 + 53 + 33 = 153。试求出所有的水仙花数。源程序如下:shangji3chengxu17#include int sxh(int x);int main() int i; for(i=100;i=999;i+) if(sxh(i) printf(%4d,i); return 0;int sxh(int x) int s,r,x1; x1=x; s=0; do r=x%10; s+=r*r*r; while(x/=10)!=0); if(s=x1) return (1); else return (0);实验步骤: 步骤一:定义一个子函数用来判断一个数是否为水仙花数。即在子函数中,通过控制循环将此数的三个位数上的数字的三次方相加 ,若等于这个数本身即为水仙花数。 步骤二:建立一个循环过程将100到999之间的数试一遍,调用子函数逐个判断哪些是水仙花数并输出。调试及编译过程:出现的不足及解决:1.第一次编写程序的过程中,在写子函数的过程中,由于在控制循环时将x的值改变,于是在判断x是否等于个位数字幂次方和时不能得出正确结果。因为在循环过程中x的值已经改变。 后来将x的值在循环前赋给另一个整型变量x1,也就是说将x的值保存在命名为x1的单元中,后来只用比较x1和幂次方和,即可判断。 运行结果:修改后能够输出正确的结果。(五)一个的数,其七进制和九进制均为3位数,且3位数的数字正好相反。试求出这个数。源程序如下:shangji3chengxu18#include int q(int x);int j(int y);int p(int x1,int x2);int main() int i; for(i=10;i=1000;i+) if(p(q(i),j(i) printf(%4d,i); return 0;int q(int x) int j,r,i=1;int s=0; do r=x%7; for(j=1;j=i-1;j+) r*=10; s+=r; i+; while(x/=7)!=0); return (s);int j(int y) int j,r,i=1;int s=0; do r=y%9; for(j=1;j=i-1;j+) r*=10; s+=r; i+; while(y/=9)!=0); return (s);int p(int x1,int x2) int r1,r2,r3; r1=x1%10;r2=(x1/=10)%10;r3=(x1/=10)%10; if(r1*100+r2*10+r3)=x2) return (1); else return (0);实验步骤: 步骤一:定义两个子函数分别用来求出一个数的七进制数和九进制数,再定义一个子函数用来判断两个三位数是否为各位数字相反。 步骤二: 在每个子函数编译过程中,控制循环使该数分别除以7和9,直到除以后为0,再将此值返回到调用处。在用以判断的子函数中,将已给的两个形式参数中的一个各位调换位置比较是否与另一个相同。 步骤三:逐个检测,找出符合要求的数。调试及编译过程:出现的不足及修改:开始时没有发现有范围是三位数,于是在转换进制的过程中以n为位数,循环条件为除以后不为0,加大了计算的繁琐性,但具有一般性。 运行结果:输出预期的结果,经检验此结果为正确的。(六)求解1313的尾数三位是多少。源程序如下:shangji3chengxu19#include int remain(int x);int main() int i,s=13; for(i=2;i=13;i+) s*=13; s=remain(s); printf(the last three numbers are %d,s); return 0;int remain(int x) int i=1,j,r,s=0; do r=x%10; for(j=1;j=i-1;j+) r*=10; s+=r; i+; x/=10; while(i=3); return (s);实验步骤: 步骤一:通过分析得知只要在计算过程中不断保留计算结果的低三位即可得出结果,于是定义一个子函数用来计算一个数保留低三位后的值。 步骤二:控制循环将累次乘的积不断乘以13,将结果调用子函数保留低三位,直到循环结束输出结果。调试及编译过程:出现的不足及修改:无 运行结果:输出预期的结果。(七)解100!尾数有多少个0。源程序如下:shangji3chengxu20#include int main() int r,s=0,r1=100; do r=r1/5; s+=r; while(r1/=5); printf(the number of 0 is %d,s); return 0;实验步骤: 步骤一:通过查找资料并分析得,造成0的原因为一对2和5的乘积,而在1到100的数中,有2的因子比有5的因子多得多,于是只用计算一个数中5的因子有多少个,再把它们相加。 步骤二:由于1到100中,每隔五个数就有一个数是5的倍数,而在这些5的倍数中,又每隔5个数就会有一个是25的倍数,只是5的倍数而不是25的倍数时,能得出1个零,是25的倍数时,能得出2个零。 步骤三:将100除以5得出20个数,再将20除以5得出4,4除以5为0 ,因此计算得20+4+0=24.用算法实现上述过程即可。调试及编译过程:现的不足及修改:开始时打算通过保留末尾零以及下一位(即87000保留7000)来计算结果,但这样做会造成两个结果,一是会造成溢出,二是有些事25及更大的倍数如2500,若只保留500,在乘以4的时候会少算一个零,这样做无法确定合适的保留位数。于是通过查找资料等方式,寻求到了科学的解决方法。4.3实验总结1. 通过此次实验,了解到算法是以简洁为灵魂的,在一个问题有多种解决办法时应首先采取简洁的方法,而且在设计算法时不能只考虑理想情况,还要考虑到算法的时间复杂性和空间复杂性。2. 通过本次实验,加强子函数调用和循环控制的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030中国燃气具安装维修服务标准化建设现状报告
- 2025-2030中国液化天然气储运设备产业链发展现状及未来趋势研究报告
- 2025-2030中国污水处理技术升级需求及市场空间预测报告
- 2025-2030中国日化用品管理咨询市场现状及未来投资价值评估报告
- 2025-2030中国数据中心绿色节能技术应用与东数西算工程效益评估报告
- 2025年初中学业水平考试地理模拟卷及答案(地理实验探究)试题型
- 2025年消防执业资格考试题库:消防应急救援装备培训与考核试题
- 房屋装修工程合同模板
- 2025年数字货币在支付领域的应用可行性研究报告
- 2025年新能源汽车品牌形象塑造可行性分析报告
- 节后复工安全培训通讯课件
- 冰雪场馆建设施工方案
- 食用菌科普课件模板
- 各种引流管的固定及护理
- 核心高考高频688词汇(高考高频词汇)
- 国开2025年人文英语4写作形考答案
- 足球俱乐部会员权益规定
- AIGC艺术设计 课件全套 第1-8章 艺术设计的新语境:AI的介入 -AIGC艺术设计的思考与展望
- 老年教育课程体系2025年优化与探究式教学模式实践报告
- 学堂在线 遥测原理 期末考试答案
- 2025年湖南省市场监督管理局下属事业单位招聘考试笔试试题【答案】
评论
0/150
提交评论