实验和实验程序设计的三种基本结构(第次实验第周)
- 格式:doc
- 大小:110.00 KB
- 文档页数:17
学号: 姓名: 1 完成下面实验内容,将程序清单或运行结果截图复制到实验文档中,以“学号+姓名+班级+实验2.doc”命名实验文档,将文档上传至课程中心。
一、 实验目的 1、 理解算法和结构化程序设计的基本概念 2、 掌握if,switch分支语句的使用 3、 掌握while语句,do…while语句,for语句的功能。 4、 掌握用循环结构实现累加、累乘、穷举等常用算法。 5、 掌握在循环结构程序中使用break语句和continue语句。 6、 锻炼调试程序的能力。
二、实验内容和实验要求
按实验指导书P148至P154的要求,完成实验3的实验内容及自测练习;按实验指导书P155至P160的要求,完成实验4的实验内容及自测练习。
1. P148-练习题1 ⑴ 已知三条边a、b、c,求三角形面积。计算三角形面积的海伦公式: ))()((csbsassarea
)(21cbas ⑵ 要求 在C++中用标准函数sqrt计算平方根,此函数包含在math.h头文件中。 ⑶ 思路 该程序用到了C++中的数学标准函数sqrt。要用编译预处理命令#include,把math头文件包含进来。用cin输入流控制将三条边长输入给a、b、c 三个变量。计算后用cout输出流控制将面积输出。 ⑷ 程序代码 #include using namespace std; #include "cmath" int main() { int a,b,c; float s,area ; cout << "输入三个边长:"; 学号: 姓名: 2 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-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 (0≤x≤10) 4x-10 (x>10) 学号: 姓名: 3 ⑵ 要求 ① 用键盘输入x的值。 ② 运行程序时,分别按x的值小于0、x的值在0到10之间、x的值大于10三种情况输入数据,检查输出的y值是否正确。 ⑶ 思路 该程序根据输入数据x的值不同,计算不同的函数表达式,并输出计算结果,显然需要采用分支结构实现,由于此分段函数只有3种情况,故可以采用if~else if~else多分支语句实现。如果情况比较多,如5种以上的情况,建议采用switch语句实现。 ⑷ 程序代码 #include 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; cout << " x= " << x << ", y= " << y << endl; return 0; } ⑸运行结果截图:
思考题及问题: 判断x的值在0~10之间可否使用表达式“0<=x<=10”?为什么?正确的表示方法是什么?
3. P150-练习题4 ⑴ 输入并运行以下程序,分析程序的运行结果。 #include 学号: 姓名: 4 using namespace std; int main() { float x,y; x=2.2; y=x/2.0; y=y*2.0; if (y==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 运行结果截图:
思考题及问题: 学号: 姓名:
5 ① 本程序所给代码中的switch语句没有default语句可以吗?default语句应该在switch语句的什么位置?
② 本程序所给代码中,最后一个case语句中没有break正确吗?请解释。
5. P155-练习题1 读程序、分析程序的结果:
运行结果截图: 思考题及问题: 答案: ① 将程序中的“sum=0; ”语句去掉可以吗?
② 将while循环语句改为do-while循环语句。
6. P156-练习题2 读程序、分析程序的结果: 测试数据184和 36
运行结果截图: 学号: 姓名:
6 思考题及问题: 答案: ① 将 if (m < n) { r=m; m=n; n=r; } 去掉,分别按m的值小于n的值情况输入数据,程序运行结果如下:
② 分别输入m或n的值为负数,程序运行结果如下: ③ 为什么在用辗转相除法求最大公约数时,输出结果是m,而不是r。 ④ 试将辗转相除法中的do-while循环语句,改为while循环语句实现。程序如下:
7. P153-练习题4 运行结果截图:
思考题及问题: 答案: ① 如果输出10行的图形,应如何修改程序?程序代码如下:
② 如果输出图形向右平移25个字符位置,程序应该如何实现?程序代码如下: ③ 如果需将输出的两个图形并排打印,程序应如何实现?以输出图①和图②为例,应输出以下图形。学号: 姓名: 7 (此题选做!)
二、 自测练习 (P154:1、2、3、6必做,4、5选做;P160:1、2、3、4必做,5选做) 注意:解决问题的思路可以用文字描述,把解决问题的过程、步骤写出来即可,培养大家思考的习惯,逐步锻炼编程能力。
1.自测练习一 计算机完成一项复杂的数学计算需要40,000s,编写程序,将其转换成几小时几分几秒的表示形式。 源程序文本:
运行结果截图: 学号: 姓名:
8 2.自测练习二 输入三个边长,判断它们是否能构成三角形,如果不能,输出提示信息;否则判断它是直角、等边、等腰或普通三角形
提示: 1) 构成三角形的条件是:任意两边之和大于第三边。设三边为a、b和c,则条件为: (a+b)>c && (a+c)>b && (b+c)>a 2) 直角三角形条件: a*a+b*b==c*c || a*a+c*c==b*b || b*b+c*c==a*a 3) 等边三角形条件:a==b && b==c 4) 等腰三角形条件:a==b || a==c || b==c
源程序文本:
运行结果截图:
3.自测练习三 编写一个程序,从键盘输入圆锥体的半径r和高度h,计算其体积。(可参考练习题2) 源程序文本:
运行结果截图: 学号: 姓名:
9 4.自测练习四 从键盘输入一个小于六位的正整数,判断它是几位数,并按照相反的顺序输出各位上的数字,例如输入2468,输出为8642。 提示:利用/和%运算符依次获取各位上的数字。设正整数为x,则个位上的数字为:x%10,而十位上的数字为:x/10%10,而百位上的数字为:x/100%10,而千位上的数字为:x/1000%10,…..
源程序文本:
运行结果截图:
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。 源程序文本:
运行结果截图: