实验3和实验4程序设计的三种基本结构(第2次实验第4周)_第1页
实验3和实验4程序设计的三种基本结构(第2次实验第4周)_第2页
实验3和实验4程序设计的三种基本结构(第2次实验第4周)_第3页
实验3和实验4程序设计的三种基本结构(第2次实验第4周)_第4页
实验3和实验4程序设计的三种基本结构(第2次实验第4周)_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、完成下面实验内容,将程序清单或运行结果截图复制到实验文档中,以“学号+姓名+班级+实验2.doc”命名实验文档,将文档上传至课程中心。一、 实验目的1、 理解算法和结构化程序设计的基本概念2、 掌握if,switch分支语句的使用3、 掌握while语句,dowhile语句,for语句的功能。4、 掌握用循环结构实现累加、累乘、穷举等常用算法。5、 掌握在循环结构程序中使用break语句和continue语句。6、 锻炼调试程序的能力。二、实验内容和实验要求按实验指导书P148至P154的要求,完成实验3的实验内容及自测练习;按实验指导书P155至P160的要求,完成实验4的实验内容及自测练习

2、。1. P148-练习题1 已知三条边a、b、c,求三角形面积。计算三角形面积的海伦公式: 要求在C+中用标准函数sqrt计算平方根,此函数包含在math.h头文件中。 思路 该程序用到了C+中的数学标准函数sqrt。要用编译预处理命令#include,把math头文件包含进来。用cin输入流控制将三条边长输入给a、b、c 三个变量。计算后用cout输出流控制将面积输出。 程序代码#include <iostream>using namespace std;#include "cmath"int main() int a,b,c; float s,area ;

3、cout << "输入三个边长:" cin >> a >> b >> c; s =1.0/2*(a+b+c) ; area = sqrt(s*(s-a)*(s-b)*(s-c) ; cout << "area = " << area << endl; return 0;运行结果截图:思考题及问题: 将程序中的“s=1.0/2*(a+b+c;”语句改为“s=1/2*(a+b+c);”,再进行编译、链接、运行,看结果如何。 将程序中的“area=sqrt(s*(s-a)*(s

4、-b)*(s-c);”语句改为“area=sqrt(s(s-a)(s-b)(s-c);”,再进行编译、链接、运行,看结果如何。分析题目中,若输入(3、6、10)运行时有什么样的缺陷?修改程序保证任意输入的a,b,c的3个值均能代表三角形的三条边,求三角形的面积。在的基础上,若想求10个这样三角形的面积,怎么修改程序。2. P150-练习题3 编程序,计算下面分段函数的值。 2x+10 (x<0)y= 8x+5 (0x10) 4x-10 (x>10) 要求 用键盘输入x的值。 运行程序时,分别按x的值小于0、x的值在0到10之间、x的值大于10三种情况输入数据,检查输出的y值是否正确

5、。 思路该程序根据输入数据x的值不同,计算不同的函数表达式,并输出计算结果,显然需要采用分支结构实现,由于此分段函数只有3种情况,故可以采用ifelse ifelse多分支语句实现。如果情况比较多,如5种以上的情况,建议采用switch语句实现。 程序代码#include <iostream>using namespace std;int main() int x,y; cout << "输入x的值:" cin >> x ;if(x<0) y=x+10;else if(x<=10) y=8*x+5;else y=4*x-10;

6、 cout << " x= " << x << ", y= " << y << endl; return 0;运行结果截图:思考题及问题:判断x的值在010之间可否使用表达式“0<=x<=10”?为什么?正确的表示方法是什么?3. P150-练习题4 输入并运行以下程序,分析程序的运行结果。#include <iostream>using namespace std;int main() float x,y; x=2.2; y=x/2.0; y=y*2.0; if (y=

7、2.2) cout << "x=y" << endl; if (x=y) cout << "这是一个逻辑错误!" << endl; return 0;运行结果截图:思考题及问题: 为什么该程序的运行结果是输出“这是一个逻辑错误!”? 将“if (y=2.2)”改为“if (fabs(y-2.2)<1e-6)”,然后运行程序,查看结果,结果如下: 该程序中的“if(x=y)”到底要表达何意?请改成正确的形式。修改后的程序代码及运行结果如下:4. P153-练习题6运行结果截图:思考题及问题: 本程序所给

8、代码中的switch语句没有default语句可以吗?default语句应该在switch语句的什么位置? 本程序所给代码中,最后一个case语句中没有break正确吗?请解释。5. P155-练习题1读程序、分析程序的结果:运行结果截图:思考题及问题:答案: 将程序中的“sum=0; ”语句去掉可以吗? 将while循环语句改为do-while循环语句。6. P156-练习题2读程序、分析程序的结果:测试数据184和 36运行结果截图:思考题及问题:答案: 将if (m < n) r=m;m=n;n=r; 去掉,分别按m的值小于n的值情况输入数据,程序运行结果如下: 分别输入m或n的值

9、为负数,程序运行结果如下: 为什么在用辗转相除法求最大公约数时,输出结果是m,而不是r。 试将辗转相除法中的do-while循环语句,改为while循环语句实现。程序如下:7. P153-练习题4运行结果截图:思考题及问题:答案: 如果输出10行的图形,应如何修改程序?程序代码如下: 如果输出图形向右平移25个字符位置,程序应该如何实现?程序代码如下: 如果需将输出的两个图形并排打印,程序应如何实现?以输出图和图为例,应输出以下图形。(此题选做!)二、 自测练习(P154:1、2、3、6必做,4、5选做;P160:1、2、3、4必做,5选做)注意:解决问题的思路可以用文字描述,把解决问题的过程

10、、步骤写出来即可,培养大家思考的习惯,逐步锻炼编程能力。1.自测练习一计算机完成一项复杂的数学计算需要40,000s,编写程序,将其转换成几小时几分几秒的表示形式。源程序文本:运行结果截图:2.自测练习二输入三个边长,判断它们是否能构成三角形,如果不能,输出提示信息;否则判断它是直角、等边、等腰或普通三角形提示:1) 构成三角形的条件是:任意两边之和大于第三边。设三边为a、b和c,则条件为: (a+b)>c && (a+c)>b && (b+c)>a2) 直角三角形条件: a*a+b*b=c*c | a*a+c*c=b*b | b*b+c*c=

11、a*a3) 等边三角形条件:a=b && b=c4) 等腰三角形条件:a=b | a=c | b=c源程序文本:运行结果截图:3.自测练习三编写一个程序,从键盘输入圆锥体的半径r和高度h,计算其体积。(可参考练习题2)源程序文本:运行结果截图:4.自测练习四从键盘输入一个小于六位的正整数,判断它是几位数,并按照相反的顺序输出各位上的数字,例如输入2468,输出为8642。提示:利用/和%运算符依次获取各位上的数字。设正整数为x,则个位上的数字为:x%10,而十位上的数字为:x/10%10,而百位上的数字为:x/100%10,而千位上的数字为:x/1000%10,.源程序文本:运

12、行结果截图:5.自测练习五设整型变量a、b、c、d分别存放从键盘输入的4个整数。编写C+程序,按从大到小排列这4个数,使a成为最大值,d成为最小值,并且按序输出这4个数。提示:1) 首先使a成为最大值。依次将a与b、c、d进行比较,若a小于它们,则交换它们的值。2) 使b成为第二大值。依次将b与c、d进行比较,若b小于它们,则交换它们的值。3) 使c成为第三大值。将c与d进行比较,若c小于d,则交换它们的值。按序输出a,b,c,d。源程序文本:运行结果截图:6.自测练习六输入某学生的考试成绩,如果在90分以上,输出“优秀”;8089分输出“良好”;7079分输出“中等”;6069分输出“及格”

13、;60分以下输出“不及格”。提示:1) 方法一,利用if-else语句2) 方法二,利用switch语句,需注意switch语句中的case只能是常整型。因此若假设考试成绩grade一定为整型,可使用语句:switch (grade/10) case 9: case 8: 源程序文本:运行结果截图:7.自测练习7P147的自测练习题1:输入并运行以下程序,分析程序的运行结果。#include <iostream>using namespace std;int main()  int a=5; double x=0.0;float f=10;char c=141;

14、  cout << sizeof(char) <<","<<sizeof(c)<< "n"  cout << sizeof(int) <<","<<sizeof(a)<< "n"  cout << sizeof(float) <<","<<sizeof(f)<< "n"  cout <&l

15、t; sizeof(double) <<","<<sizeof(x)<< "n"return 0;运行结果截图: 8.自测练习8P147的自测练习题2:输入并运行以下程序,分析程序的运行结果。#include <iostream>using namespace std;int main()  int a=6,b=6;    cout << a <<","<< +a << "n&qu

16、ot;   cout << b <<","<< b+ << "n"return 0; 运行结果截图:9.p160-自测练习一编写一个程序,统计输出各位数之和为9,且能被5整除的五位数的个数。注意:表述“n能被5整除”的条件表达式唯一吗?试写出2种以上。解决问题的思路:方法1:方法2:源程序文本:方法1:方法2:运行结果截图:10.p160-自测练习二编写一个程序,求s=1+(1+2)+(1+2+3)+(1+2+3+n)的值。解决问题的思路:源程序文本:运行结果截图:11.p16

17、0-自测练习三编写一个程序,求s=4!+6!+8!。解决问题的思路:源程序文本:运行结果截图:12.p160-自测练习四编写一个程序,求出11000之间的所有完全数。所谓完全数是指:该数的各因子之和正好等于该数本身,如6=1+2+3。解决问题的思路:源程序文本:运行结果截图:13.p160-自测练习五计算的近似值,的计算公式为:要求:精度为10-5,并输出n的大小解决问题的思路:源程序文本:运行结果截图:四、程序调试练习以下程序存在错误。有的是逻辑错误,有的是语法错误。利用VC编程环境对程序进行调试,找到错误并改正。程序1:程序功能:编写程序,求100个自然数的和。即: s=1+2+3+ +1

18、00;运行下列程序后,能否得到正确结果。(提示:利用VC的调试功能跟踪运行定位运行错误!)#include <iostream>using namespace std;int main( ) int n,sum;n=1; sum=0; while (n<=100); sum=sum+n; n +; cout <<"sum="<<sum<<"n"return 0;分析错误原因,改正:程序2:程序功能:对任意的10个正整数求和,并输出结果。#include <iostream>using namespace std;int main( ) int n,sum;for (n=1,s=0; n<10; n+ ) cin >>x; if (x<0) break; s+=x; cout<<”10个正整数之和为:”<<sum;不能出正常结果,分析错误原因,并改正:程序3:判断任意输入的三个数,判断它们是否能构成三角形,如果不能,输出提示信息;否则判断它是直角、等边、等腰或普通三角形#include &l

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论