版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、西安交通大学实验报告课程 _计算机程序设计 _实验名称 _控制结构 _第 1 页 共 15 页系 别 实 验 日 期 2014 年 3 月 10 日专业班级 _ 组别 实 验 报 告 日 期 2014 年 3 月 15 日姓 名_ 学号 _ 报 告 退 发 ( 订正 、 重做 )同 组 人 教 师 审 批 签 字一、实验目的:掌握 C+语言中的基本控制结构:顺序结构、条件结构、循环结 构( do while ;for ;while等)的使用,尤其是多重循环和条件结构的复合。二、实验内容:1. 第一题:编写程序求斐波那契数列的第 n项和前 n项和 。斐波那 契数列是形如:0、1、1、2、3、5、
2、8、13、其通项为:F0=0; F1=1; Fn=Fn-1+Fn-2.(1)要点分析: 步骤一:输入需要计算的项数 n; 步骤二:判断输入的项数是否合理,若否,返回第一步; 步骤三:从第一项逐项加到第 n 项;步骤四:输出计算结果; 步骤五:选择是否继续运算,若是,返回第一步;否则结束程序。(2)源程序代码:1 / 14 #include using namespace std;int main()int an_1=0,ch,an=1,S=0,i=1,m=0;double n; / 将 n定义为双精度以便检验输入是否合理;do/ 开始循环体;coutn;while (n=0|n!=( int
3、)n) / 对 n输入有误的重新输入;coutn;while (in) / 求前 n项和,由 1到 n逐项相加;S=S+an;m=an;/ 将 an储存于 m中; an=an+an_1;an_1=m;/ 将原来的 an赋予 an_1 ;i=i+1;cout 前 n项和为: S ;第 n项为: F( n-1)= mendl; coutch; while (ch=1); / 选择是否再进行新一轮运算;cout 运行结束! ;return 0;(3) 实验结果:测试了输入合理和输入不合理以及多次输入的功能:2 / 144)问题分析:不知道第 n项是 Fn还是 Fn-1, 最终按照 Fn-1 算了。这
4、样的话, 输入的第 n项应为 Fn-1而不是 Fn.2. 第二题: 用截弦法求一元方程 f(x)=0 在区间x0,x1 之间的一个 根。(1)要点分析: 步骤一:预先定义一个函数,其后按照该函数进行计算; 步骤二:输入区间端点以及误差范围; 步骤三:通过不断的趋近找到近似值, 当满足误差范围时停止循环并 输出结果。(2)源程序代码:#include #include using namespace std;double F( double x) / 预先定义一个函数;double y; y= x*x-4*x+3; return y;3 / 14int main()double x0,x1,x2
5、,q,m,n;coutx0x1q;m=x0;/ 将输入的初始区间储存在 m,n 中;n=x1;x2=x0-(x0-x1)*F(x0)/(F(x0)-F(x1); / 进行第一次计算得到 x2 的初始值; do/ 不断缩小区间直至满足误差范围;if (F(x2)*F(x0)0)x0=x2;elsex1=x2; x2=x0-(x0-x1)*F(x0)/(F(x0)-F(x1); while (fabs(x2-x0)=q&fabs(x1-x2)=q);cout 方程x*x-4*x+3=0 在区间 m, n 上的一个根为: x2endl; return 0;(3) 实验结果: 考虑了不同误差范围对结果
6、的影响,以及输入范围 过大而导致的无法执行的情况:1)误差范围为 0.1 :4 / 142)误差范围为 0.000001 :3)误差范围为 0.00001 ,但是从 1 到 5,而对于方程 x2-4x+3=0 来 说,闭区间 1,5 内有两解,并且 1 就是其一个解。此时无法求解:4)误差范围为 0.00001 ,但区间改为 1.1,5 ,此时只有一解便可执 行求解。5 / 143. 第三题:编写一个程序,寻找用户输入的几个整数中的最小值。假 定用户输入的第一个数值指后面要输入的数值个数。(1)要点分析:步骤一: 输入所要输入的整数的个数; 步骤二:输入要输入的某个整数; 步骤三:判断输入的是
7、否为整数,若不是,提示重新输入,返回第二 步;步骤四:对输入的第一个整数, 将其储存下来作为已输入的最小整数, 对后来的输入的整数,判断其是否小于原来储存的最小数,若是,用 该数替换原最小数; 步骤五:判断需要输入的整数是否已经输入完毕, 若否,返回第二步; 若是,执行下一步;步骤六:输出最小数。(2)源程序代码:#include using namespace std;6 / 14int main()int n;double a,b;int i=1;coutn;while (i=n) / 循环输入 n个整数;cout 请输入您要输入的第 ia;while (a!=( int )a) / 判断
8、是否为整数;couta;if (i=1) / 对第一次输入的整数,默认将其储存下来作为最小数; b=a;b;if (ab) / 比较输入值与前面 i-1 个数中的最小值,将小者储存于 b=a;i=i+1;cout 您输入的整数中最小的是 : bendl; return 0;(3) 实验结果:7 / 14(4)问题所在:关于i=1 时的a.b比较的问题:程序中通过将前面输入的数字的最小值 储存下来,然后再下一轮将其与输入的数字比较再保留较小者来实现 筛选最小数, 而第一次输入的时候没有已储存的较小数, 因而将第一 个数要默认储存下来, 因而对第一个数的处理与以后略有不同, 故设 计了 if (i
9、=1) b=a; 的语句。4第四题 :有一分数序列:(即后一项的分母为前一项的分子, 后一项的分子为前一项的分子与 分母之和),求其前 n 项和。(1)要点分析: 步骤一:预设数列的第一项的分母与分子,并设和 S=0,i=1 ; 步骤二:输入需要计算的项数 n;步骤三:求 S+第 i 项即前 i 项和;步骤四:由第 i 项得到第 i+1 项 ;步骤五: i=i+1;步骤六:判断是否已经计算完前 n 项,若是,输出前 n 项和;否则 返回第三步。(2)源程序代码:#include using namespace std;int main()int n,a=2,b=1,i=1,m;8 / 14 d
10、ouble S=0; int co;docoutn;do S=S+(a/(b*1.0);m=a;/ 将前一项的分子储存于 m; a=a+b; / 得到后一项的分子; b=m;/ 将前一项的分子赋给后一项的分母; i=i+1; while (i=n);cout 该分数列的前 n 项和为: S( n)= Sendl; coutco; while (co=1); / 选择继续计算时执行循环体; return 0;(3) 实验结果:(4) 问题分析: 关于数的类型的选择的问题。起初选择了将所有数都定义为 double ,但这样占内存太多,于是将大多数直接改为 int ,结果后来 的运算中总是会警告,给
11、 b乘以 1.0 才算了事。9 / 145. 第五题:将所有水仙花数求和,再计算平均数,输出和数与平均数 (必做题)(1) 要点分析: 步骤一:定义初始 S=100,sum=0,i=0 ; 步骤二:分离出 S 的各位数字;步骤三:判断 S 是不是水仙花数,若是, i=i+1,sum=sum+S; 步骤四: S=S+1;步骤五:判断 S 是否仍未三位数,若是,返回第二步;若否,求平均 数 ave=sum/i, 输出平均数以及这些数的和。(2) 源程序代码:#include using namespace std;int main()double ave;int i=0,a,b,c,S=100,s
12、,sum=0;doa=S/100; / 分离百位数; b=S/10%10; / 分离十位数;c=S%10;/ 分离个位数; s=a*a*a+b*b*b+c*c*c;if (S=s) / 统计其中的水仙花数;i=i+1; / 统计水仙花数的个数; sum=sum+S;/ 求和; ave=sum/(i*1.0); / 求平均数;S=S+1; while (S=999); / 在三位数范围内循环判断;cout 共有 i 个水仙花数,它们的和为: sumendl;cout 它们的平均数为: aveendl;return 0;10 / 143)实验结果:( 4)问题分析 : 需要分离各位数字;还有数据类
13、型的转化: ave=sum/(i*1.0) 。6. 第六题: 找出 1000-2000 之间所有整数中满足如下条件的数:该 数的高端两位数字的和与低端两位数字的和值相等,如 1001, 1120 。程序能输出所有满足条件的数以及它们的总个数。 (必做题) (1)要点分析:步骤一:定义初始值 s=1000,i=0 ;步骤二:分离 s的各位数字; 步骤三:判断是否满足条件,若是,输出该数并 i=i+1;步骤四: s=s+1, ;步骤五:判断 s是否仍在执行范围内,若是,返回第二步;若否,输 出个数I 并结束程序。(2)源程序代码:#include using namespace std;11 /
14、14 int main()int s=1000,i=0,a,b,c,d;cout 满足条件的数如下: n ;doa=s/1000; / 分离每一位上的数; b=s/100%10;c=s/10%10; d=s%10;if (a+b=c+d)couts ;;i=i+1; / 统计满足条件的数字发的个数; s=s+1; while (s=2000);cout n 共有 i 个 endl; return 0;(3) 实验结果:7. 第七题:将第2章PPT课件中加法练习程序修改成学生可以循环练习 加法运算, 并且每次加法输入结果直到正确为止, 再转入下一次加法 练习。(选做题)(1)要点分析:12 / 14 步骤一:随机产生两个一百以内的整数; 步骤二:计算两数之和; 步骤三:输出这两个数组成的和式并要求输入结果; 步骤四:判断输入值与所求和是否相等; 步骤五:若不相等,提示再次输入并返回第四步;若相等,执行下一 步; 步骤六:询问是否继续,若是,返回第一步;否则结束程序。(2)源程序代码:#include #include using namespace std;int main()int a,b,c,m,n;int input;char right= 正确,祝贺! ;char wrong= 错误,再想想! ;doa=rand(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025服务员聘用合同
- 2025借款合同填写注意事项
- 施工安全合同书(乙方承担全部责任版)
- 课题申报参考:黎巴嫩女性文学中的性别叙事与国家建构
- 课题申报参考:老龄化背景下衰老信念对年长员工工作绩效影响的机制研究
- 2025年新世纪版选修1历史上册阶段测试试卷
- 2025年外研版三年级起点选择性必修三语文上册月考试卷
- 2024年华东师大版八年级地理上册月考试卷含答案
- 2025年人教新起点八年级历史下册月考试卷含答案
- 2025年度物联网设备制造与销售合同范本4篇
- 2024年山东省泰安市高考物理一模试卷(含详细答案解析)
- 护理指南手术器械台摆放
- 肿瘤患者管理
- 2025年中国航空部附件维修行业市场竞争格局、行业政策及需求规模预测报告
- 2025春夏运动户外行业趋势白皮书
- 《法制宣传之盗窃罪》课件
- 通信工程单位劳动合同
- 2024年医疗器械经营质量管理规范培训课件
- 零部件测绘与 CAD成图技术(中职组)冲压机任务书
- 2024年计算机二级WPS考试题库380题(含答案)
- 高低压配电柜产品营销计划书
评论
0/150
提交评论