实验名: 循环结构 实验目的
1、掌握在程序设计条件型循环结构时,如何正确地设定循环条件,以及如何控制循环 的次数。 2、了解条件型循环结构的基本测试方法。 3、掌握如何正确地控制计数型循环结构的次数 4、了解对计数型循环结构进行测试的基本方法 5、了解在嵌套循环结构中,提高程序效率的方法
二、实验内容
(一)) 题目 1
1、题目内容描述
1、下面是一个计算 e 的近似值(使误差小于给定的δ)的程序。 main() {
double e=1.0,x=1.0,y,detax; int i=1;
printf(“\\n please input enter a error:”); scanf(“%lf”,&detax); y=1/x;
while(y>=detax) { x=x*I; y=1/x; e=e+y; ++i; }
printf(“.10lf”,e); }
2、实验步骤
(1)阅读上面的程序,写出程序所依据的计算公式。
(2)当输入的 detax 各是什么值时,能分别使程序按下面的要求运行: .不进入循环; .只循环一次; .只循环两次; .进入死循环(程序将永远循环下去)。 为了能知道程序循环了多少次,应该在程序中增加一条什么样的语句?
(3)原程序中 while 语句中的 y>=detax,分别换成 y>detax,y=detax,y (4)把原程序中 while 语句之前的 y=1/x 语句去掉,观察程序的运行将会发生什么样 的变化。 假如不知道机器内的程序实际上是怎么写的,输入什么样的 detax 就能测试出少了上述 这条语句。 (5)若把原程序中的++i 换成 i++,观察程序的运行发生了什么变化? 假如不知道这条语句到底是怎么写的,输入什么样的 detax 就能测试出这条语句写错了. 1 (6)把原程序中的 while 结构改写成 do—while 结构,再分别按上述的(2)、(3)两步进 行实验。 2、输入和输出信息描述及数据类型确定; (1)、输入数据 序号 输入数据描述 1 e,x,y,detax 2 i (2)输出数据 序号 输出数据描述 1 E 3、程序源代码(填写程序调试正确后的代码) #include double e,x,y,detax; int i; e=1.0; x=1.0; i=1.0; printf(\ scanf(\ y=1/x; while(y>=detax) { x=x*i; y=1/x; e=e+y; ++i; } printf(\ return 0; } 7、程序调试 错误错误信息(列出出错语句以及出错序号 提示) 1 2 3 格式不对 数据类型 double int 数据类型 double 是否解决 是 解决方法 手动调整 在main()前加上int 将double e=1.0,x=1.0,y,detax;int i=1; 改为double e,x,y,detax;int i;e=1.0;x=1.0;i=1.0; 将printf(“\\n please input enter a error:”);改为printf(\ warning: return type defaults 是 to 'int' [-Wreturn-type]| error: stray '\\243' in program| 是 error: stray '\\273' in program| D:\\程序\\e近似值\\main.c||In function 'main' error: stray '\\241' in program| 是 4 5 6 7 error: stray '\\241' in program| 是 error: 'I' undeclared (first use in this function)| c|19|error: stray '\\241' in 是 是 2 将scanf(“%lf”,&detax);改为 将I改为i 将printf(“.10lf”,e);改为 program| 8 c|20|warning: control reaches 是 end of non-void function [-Wreturn-type]| printf(\在后一个大括号前加上return 0; 8、测试与结果分析 (1)、测试数据与结果 测试测试用例选取原序号 因 1 2 3 不循环 循环一次 循环两次 测试输入 数据 2 1 0.7 0 测试输出结果 1.0000000000 2.5000000000 2.5000000000 无 是否正确 是 是 是 是 结果分析 死循环 (2)、相关问题回答 答:e=1+1/2+1/6…+1/i! (1)阅读上面的程序,写出程序所依据的计算公式。 (2)当输入的 detax 各是什么值时,能分别使程序按下面的要求运行: .不进入循环; .只循环一次; .只循环两次; .进入死循环(程序将永远循环下去)。 为了能知道程序循环了多少次,应该在程序中增加一条什么样的语句? 答:大于1不进入循环,等于1只循环一次,大于0.5小于1只循环两次,等于0进入死循环(程序将永远循环下去)。应增加printf(“i=%d”,i-1); (3)原程序中 while 语句中的 y>=detax,分别换成 y>detax,y=detax,y 答:y>detax ,输入不小于1时不进行循环,输出1;输入小于1时则会进行循环。y=detax,当输入为0时,y被赋值为0,直接结束循环;当输入不为0,则进入死循环。y (4)把原程序中 while 语句之前的 y=1/x 语句去掉,观察程序的运行将会发生什么样 的变化。 假如不知道机器内的程序实际上是怎么写的,输入什么样的 detax 就能测试出少了上述 这条语句。 答:输入1. (5)若把原程序中的++i 换成 i++,观察程序的运行发生了什么变化? 假如不知道这条语句到底是怎么写的,输入什么样的 detax 就能测试出这条语句写错了. (6)把原程序中的 while 结构改写成 do—while 结构,再分别按上述的(2)、(3)两步进 行实验。 答:(2)步与原来while相同。(3)步当有的输入条件不符合判断条件时,仍会先进行一次循环后结束,而while则直接结束。 #include double e,x,y,detax; //定义变量 int i; e=1.0; //赋值 x=1.0; i=1.0; printf(\ scanf(\输入detax 3