实验名: 循环结构
实验目的
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(“%12.10lf”,e);
}
2、实验步骤
(1)阅读上面的程序,写出程序所依据的计算公式。
(2)当输入的 detax 各是什么值时,能分别使程序按下面的要求运行: .不进入循环; .只循环一次; .只循环两次; .进入死循环(程序将永远循环下去)。 为了能知道程序循环了多少次,应该在程序中增加一条什么样的语句?
(3)原程序中 while 语句中的 y>=detax,分别换成 y>detax,y=detax,y<detax,y<=detax, 观察程序运行将会有什么变化。 假如不知道机器内的程序中的各语句实际上是什么,分别输入什么样的 detax 来测试出 while 语句的循环条件写错了。
(4)把原程序中 while 语句之前的 y=1/x 语句去掉,观察程序的运行将会发生什么样 的变化。 假如不知道机器内的程序实际上是怎么写的,输入什么样的 detax 就能测试出少了上述 这条语句。
(5)若把原程序中的++i 换成 i++,观察程序的运行发生了什么变化? 假如不知道这条语句到底是怎么写的,输入什么样的 detax 就能测试出这条语句写错了.
(6)把原程序中的 while 结构改写成 do—while 结构,再分别按上述的(2)、(3)两步进 行实验。
2、输入和输出信息描述及数据类型确定;
(1)、输入数据
序号 | 输入数据描述 | 数据类型 |
1 | e,x,y,detax | double |
2 | i | int |
(2)输出数据
序号 | 输出数据描述 | 数据类型 |
1 | E | double |
3、程序源代码(填写程序调试正确后的代码)
#include <stdio.h>
int main()
{
double e,x,y,detax;
int i;
e=1.0;
x=1.0;
i=1.0;
printf("please input enter a error:\n" );
scanf("%lf",&detax);
y=1/x;
while(y>=detax)
{
x=x*i;
y=1/x;
e=e+y;
++i;
}
printf("%12.10lf",e);
return 0;
}
7、程序调试
错误序号 | 错误信息(列出出错语句以及出错提示) | 是否解决 | 解决方法 |
1 | 格式不对 | 是 | 手动调整 |
2 | warning: return type defaults to 'int' [-Wreturn-type]| | 是 | 在main()前加上int |
3 | error: stray '\243' in program| error: stray '\273' in program| | 是 | 将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; |
4 | D:\程序\e近似值\In function 'main' error: stray '\241' in program| | 是 | 将printf(“\n please input enter a error:”);改为printf("please input enter a error:\n" ); |
5 | error: stray '\241' in program| | 是 | 将scanf(“%lf”,&detax);改为 |
6 | error: 'I' undeclared (first use in this function)| | 是 | 将I改为i |
7 | c|19|error: stray '\241' in program| | 是 | 将printf(“%12.10lf”,e);改为printf("%12.10lf",e); |
8 | c|20|warning: control reaches end of non-void function [-Wreturn-type]| | 是 | 在后一个大括号前加上return 0; |
8、测试与结果分析
(1)、测试数据与结果
测试序号 | 测试用例选取原因 | while语句都可以用for改写 测试输入数据 | 测试输出结果 | 是否正确 | 结果分析 |
1 | 不循环 | 2 | 1.0000000000 | 是 | |
2 | 循环一次 | 1 | 是 | ||
3 | 循环两次 | 0.7 | 是 | ||
死循环 | 0 | 无 | 是 | ||
(2)、相关问题回答
(1)阅读上面的程序,写出程序所依据的计算公式。
答:e=1+1/2+1/6…+1/i!
(2)当输入的 detax 各是什么值时,能分别使程序按下面的要求运行: .不进入循环; .只
循环一次; .只循环两次; .进入死循环(程序将永远循环下去)。 为了能知道程序循环了多少次,应该在程序中增加一条什么样的语句?
答:大于1不进入循环,等于1只循环一次,大于0.5小于1只循环两次,等于0进入死循环(程序将永远循环下去)。应增加printf(“i=%d”,i-1);
(3)原程序中 while 语句中的 y>=detax,分别换成 y>detax,y=detax,y<detax,y<=detax, 观察程序运行将会有什么变化。 假如不知道机器内的程序中的各语句实际上是什么,分别输入什么样的 detax 来测试出 while 语句的循环条件写错了。
答:y>detax ,输入不小于1时不进行循环,输出1;输入小于1时则会进行循环。y=detax,当输入为0时,y被赋值为0,直接结束循环;当输入不为0,则进入死循环。y<detax,输入不大于1时不进行循环,输出为1;输入大于1时则进入死循环。y<=detax,输入不小于1时进入死循环;输入小于1则不进行循环,输出1。分别输入3,0.5,1即可。
(4)把原程序中 while 语句之前的 y=1/x 语句去掉,观察程序的运行将会发生什么样 的变化。 假如不知道机器内的程序实际上是怎么写的,输入什么样的 detax 就能测试出少了上述 这条语句。
答:输入1.
(5)若把原程序中的++i 换成 i++,观察程序的运行发生了什么变化? 假如不知道这条语句到底是怎么写的,输入什么样的 detax 就能测试出这条语句写错了.
(6)把原程序中的 while 结构改写成 do—while 结构,再分别按上述的(2)、(3)两步进 行实验。
答:(2)步与原来while相同。(3)步当有的输入条件不符合判断条件时,仍会先进行一次循环后结束,而while则直接结束。
#include <stdio.h>
int main()
{
double e,x,y,detax; //定义变量
int i;
e=1.0; //赋值
x=1.0;
i=1.0;
printf("\n please input enter a error:");
scanf("%lf",&detax); //输入detax
y=1/x;
do
{
x=x*i;
y=1/x;
e=e+y;
++i;
}
while(y>=detax); //执行do…while循环
printf("%12.10lf\n",e); //输出
printf("i=%d\n",i-2);
}
(二)) 题目 2
1、题目内容描述
下面是一个用以计算 的 C 程序。
main()
{
int i ,j;
long sum=0;
for(i=1,i<=20,i++)
for(j=1;j<=3;j++)
sum=sum+(i+1)*(i+1)*(j+2)
printf(“sum is :%d\n”,sum);
}
2、 实验步骤
(1)将上述程序中的和分别做什么样修改,能使程序按如下要求运行: .不循环; .外循环 1 次,不进入内循环; .外循环,内循环各 1 次; .外循环 1 次,内循环 2 次;外循环 2次, 内循环 1 次; .外循环 19 次,内循环 3 次; .外循环 20 次,内循环 2 次; .外循环 21 次,内循环 3 次。
(2)试修改程序,以便能知道控制表达式 i=1;j<=20;i++ 和 j=1;j<3;j+= 各执行了多少次?
(3)内循环与外循环的控制表达式进行对换,观察程序的执行结果有无变化,并且观 察对换后的外循环与内循环控制表达式执行的总次数有无变化?
(4)将(3)中程序写为
main()
{
int i,j,k;
long sum=0;
for (j=1.j<=3.j++)
{
k=j+2;
for(i=1;i<=20;i++)
sum=sum+(i+1)*(i+1)**k;
}
printf(“sum is :%d\n”,sum);
}
观察程序的执行结果有无变化?
(5)将(3)中程序改写为
main()
{
int I,j,m,n;
long sum=0;
for(j=1;j<=3;j++)
{
m=j+2;
for(I=1;j<=20;I++)
{
n=I+1;
sum=sum+m*m*k;
}
}
printf(“sum is :%d\n”,sum);
}
观察程序的执行结果有无变化?
(6)在(5)的程序中,若将外循环控制表达式分别做如下修改: .j=1;j<3;j++ .j=1;j=3;j++ .j=1;j>=3;j++ .j=1;j>3;j++ .j=1;j<=3;j-- .j=1;j>3;j-- .j=1;j<3;j++ .j=0;j<=3;j+= .j=0;j<3;j++ j=1;j<=3;j++ j=1;j<3;++j 观察程序的执行结果有无变化
2、输入和输出信息描述及数据类型确定;
(1)、输入数据
序号 | 输入数据描述 | 数据类型 |
1 | I,j | int |
2 | sum | long int |
(2)输出数据
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论