C语言循环实验报告.docx
- 文档编号:8344835
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:13
- 大小:23.43KB
C语言循环实验报告.docx
《C语言循环实验报告.docx》由会员分享,可在线阅读,更多相关《C语言循环实验报告.docx(13页珍藏版)》请在冰豆网上搜索。
C语言循环实验报告
Thedocumentwasfinallyrevisedon2021
C语言循环实验报告
实验名:
循环结构
实验目的
1、掌握在程序设计条件型循环结构时,如何正确地设定循环条件,以及如何控制循环的次数。
2、了解条件型循环结构的基本测试方法。
3、掌握如何正确地控制计数型循环结构的次数
4、了解对计数型循环结构进行测试的基本方法
5、了解在嵌套循环结构中,提高程序效率的方法
二、实验内容
(一))题目1
1、题目内容描述
1、下面是一个计算e的近似值(使误差小于给定的δ)的程序。
main()
{
doublee=,x=,y,detax;
inti=1;
printf(“\npleaseinputenteraerror:
”);
scanf(“%lf”,&detax);
y=1/x;
while(y>=detax)
{
x=x*I;
y=1/x;
e=e+y;
++i;
}
printf(“%”,e);
}
2、实验步骤
(1)阅读上面的程序,写出程序所依据的计算公式。
(2)当输入的detax各是什么值时,能分别使程序按下面的要求运行:
.不进入循环;.只循环一次;.只循环两次;.进入死循环(程序将永远循环下去)。
为了能知道程序循环了多少次,应该在程序中增加一条什么样的语句?
(3)原程序中while语句中的y>=detax,分别换成y>detax,y=detax,y 假如不知道机器内的程序中的各语句实际上是什么,分别输入什么样的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<> intmain() { doublee,x,y,detax; inti; e=; x=; i=; printf("pleaseinputenteraerror: \n"); scanf("%lf",&detax); y=1/x; while(y>=detax) { x=x*i; y=1/x; e=e+y; ++i; } printf("%",e); return0; } 7、程序调试 错误序号 错误信息(列出出错语句以及出错提示) 是否解决 解决方法 1 格式不对 是 手动调整 2 warning: returntypedefaultsto'int'[-Wreturn-type]| 是 在main()前加上int 3 error: stray'\243'inprogram|error: stray'\273'inprogram| 是 将doublee=,x=,y,detax;inti=1; 改为doublee,x,y,detax;inti;e=;x=;i=; 4 D: \程序\e近似值\||Infunction'main' error: stray'\241'inprogram| 是 将printf(“\npleaseinputenteraerror: ”);改为printf("pleaseinputenteraerror: \n"); 5 error: stray'\241'inprogram| 是 将scanf(“%lf”,&detax);改为 6 error: 'I'undeclared(firstuseinthisfunction)| 是 将I改为i 7 c|19|error: stray'\241'inprogram| 是 将printf(“%”,e);改为printf("%",e); 8 c|20|warning: controlreachesendofnon-voidfunction[-Wreturn-type]| 是 在后一个大括号前加上return0; 8、测试与结果分析 (1)、测试数据与结果 测试序号 测试用例选取原因 测试输入数据 测试输出结果 是否正确 结果分析 1 不循环 2 是 2 循环一次 1 是 3 循环两次 是 死循环 0 无 是 (2)、相关问题回答 (1)阅读上面的程序,写出程序所依据的计算公式。 答: e=1+1/2+1/6…+1/i! (2)当输入的detax各是什么值时,能分别使程序按下面的要求运行: .不进入循环;.只循环一次;.只循环两次;.进入死循环(程序将永远循环下去)。 为了能知道程序循环了多少次,应该在程序中增加一条什么样的语句? 答: 大于1不进入循环,等于1只循环一次,大于小于1只循环两次,等于0进入死循环(程序将永远循环下去)。 应增加printf(“i=%d”,i-1); (3)原程序中while语句中的y>=detax,分别换成y>detax,y=detax,y 假如不知道机器内的程序中的各语句实际上是什么,分别输入什么样的detax来测试出while语句的循环条件写错了。 答: y>detax,输入不小于1时不进行循环,输出1;输入小于1时则会进行循环。 y=detax,当输入为0时,y被赋值为0,直接结束循环;当输入不为0,则进入死循环。 y y<=detax,输入不小于1时进入死循环;输入小于1则不进行循环,输出1。 分别输入3,,1即可。 (4)把原程序中while语句之前的y=1/x语句去掉,观察程序的运行将会发生什么样的变化。 假如不知道机器内的程序实际上是怎么写的,输入什么样的detax就能测试出少了上述这条语句。 答: 输入1. (5)若把原程序中的++i换成i++,观察程序的运行发生了什么变化? 假如不知道这条语句到底是怎么写的,输入什么样的detax就能测试出这条语句写错了. (6)把原程序中的while结构改写成do—while结构,再分别按上述的 (2)、(3)两步进行实验。 答: (2)步与原来while相同。 (3)步当有的输入条件不符合判断条件时,仍会先进行一次循环后结束,而while则直接结束。 #include<> intmain() { doublee,x,y,detax;循环;.外循环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() { inti,j,k; longsum=0; for(j=<=++) { k=j+2; for(i=1;i<=20;i++) sum=sum+(i+1)*(i+1)**k; } printf(“sumis: %d\n”,sum); } 观察程序的执行结果有无变化 (5)将(3)中程序改写为 main() { intI,j,m,n; longsum=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(“sumis: %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 longint (2)输出数据 序号 输出数据描述 数据类型 1 sum Longint 3、程序源代码(填写程序调试正确后的代码) #include<> main() { inti,j; longsum=0; for(i=1;i<=20;i++) for(j=1;j<=3;j++) sum=sum+(i+1)*(i+1)*(j+2); printf("sumis: %d\n",sum); } 4、程序调试 错误序号 错误信息(列出出错语句以及出错提示) 是否解决 解决方法 1 |6|warning: valuecomputedisnotused[-Wunused-value]| 是 将for(i=1;i<=20;i++)改为for(i=1;i<=20;i++) 2 |2|warning: returntypedefaultsto'int'[-Wreturn-type]| 是 在main()前加上int 3 |9|error: expected';'before'printf'| 是 sum=sum+(i+1)*(i+1)*(j+2)后面加上分号 4 |9|error: stray'\241'inprogram| 是 将printf(“sumis: %d\n”,sum);改为printf("sumis: %d\n",sum); 5 |10|warning: controlreachesendofnon-voidfunction[-Wreturn-type]| 是 加上return0; 6 |9|warning: format'%d'expectsargumentoftype'int',butargument2hastype'longint'[-Wformat=]| 否 (2)、相关问题回答 (1)将上述程序中的和分别做什么样修改,能使程序按如下要求运行: .不循环;.外循环1次,不进入内循环;.外循环,内循环各1次;.外循环1次,内循环2次;外循环2次,内循环1次;.外循环19次,内循环3次;.外循环20次,内循环2次;.外循环21次,内循环3次。 答: 外循环1次,不进入内循环: 改为for(i=1,i=1,i++)for(j=1;j>3;j++) .外循环,内循环各1次: 改为for(i=1;,i=1;i++)for(j=1;j=1;j++) .外循环1次,内循环2次: 改为for(i=1;i=1;i++)intj=1;for(;j<=2;j++) .外循环2次,内循环1次: 改为for(i=1;i<=2;i++)for(;j<2;j++) .外循环19次,内循环3次: 改为for(i=1;i<=19;i++)intj=1;for(;j<=3;j++) .外循环20次,内循环2次: 改为for(i=1;i<=20;i++)intj=1;for(;j<=2;j++) .外循环21次,内循环3次: 改为for(i=1;i<=21;i++)intj=1;for(;j<=3;j++) (2)试修改程序,以便能知道控制表达式i=1;j<=20;i++和j=1;j<3;j+=各执行了多少次 答: 添加printf("i=%d,j=%d",i,j);分别执行60和20次。 (3)内循环与外循环的控制表达式进行对换,观察程序的执行结果有无变化,并且观察对换后的外循环与内循环控制表达式执行的总次数有无变化 答: 无,次数外循环3次,内循环60次,内循环不变,外循环次数改变 (4)将(3)中程序改写观察程序的执行结果有无变化 无。 (5)将(3)中程序改写观察程序的执行结果有无变化 无。 (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观察程序的执行结果有无变化 答: (1).j=1;j<3;j++结果23170 (2)j=1;j=3;j++结果死循环(3)j=1;j>=3;j++结果0 .(4)j=1;j>3;j++结果0(5)j=1;j<=3;j—结果死循环(6)j=1;j>3;j—结果不运行(7)j=1;j<3;j++结果23170(8)j=0;j<=3;j+=结果有错(9)j=0;j<3;j++结果29790(10)j=1;j<=3;j++结果39720 .(11)j=1;j<3;++j结果23170。 (三)、题目3 1、题目内容描述 绘制等腰空心梯形,下底和高都为输入变量n,n=5时,打印图形如右: 2、程序源代码(填写程序调试正确后的代码) #include<> intmain() { inti,x,n,j;//定义变量 printf("pleaseenterthen: "); scanf("%d",&n);//输入格式 for(i=n;i>=1;i--) { for(j=0;j printf("");//当j小于n-i时循环输出空格 for(x=1;x<=2*i+n-2;x++) { if(x>1&&x<2*i+n-2&&(i! =n)&&(i! =1)) printf("");//若满足条件则打印空格if(x==1||x==2*i+n-2||i==1||i==n) printf("*");//若满足则打印* } printf("\n");//换行 } return0; } 3、测试与结果分析 (1)、测试数据与结果 测试序号 测试用例选取原因 测试输入数据 测试输出结果 是否正确 结果分析 1 6 正确 2 8 正确 3 13 正确 (四)题目4 1、题目内容描述 想一个1~100之间的数,猜对: right,猜错: wrong并提示大小。 (1)最多猜10次猜多个数, (2)10次猜不对就猜下一个数 6、程序源代码(填写程序调试正确后的代码) 猜十次: #include<> #include<>//预处理magic #include<>//时间函数 intmain() { intmagic,number,i;//定义变量 i=1; srand(time(NULL)); magic=rand()%100+1;//产生随机数 for(i=1;i<=10;i++) { printf("请输入你猜的数字: \n"); scanf("%d",&number);//输入number if(number printf("数字略小\n");//若小于则输出该语句 elseif(number>magic) printf("数字略大\n");//若大于则输出该语句 elseif(number==magic) { printf("你猜对了\n"); break;//正确则输出你猜对了,停止循环 } } if(i==10) printf(“你已经猜错十次,游戏结束\n”);//十次都猜错则输出该语句 return0; } 猜多个 #include<> #include<>//预处理magic #include<>//时间函数 intmain() { intmagic,number,i;//定义变量 i=0; charreply; do { srand(time(NULL)); magic=rand()%100+1;//产生随机数 for(i=0;i<=10;i++)//进入循环。 猜十次 { printf("请输入你猜的数字: \n"); scanf("%d",&number);//输入number if(number printf("数字略小\n");//若小于则输出该语句 elseif(number>magic) printf("数字略大\n");//若大于则输出该语句 elseif(number==magic) { printf("你猜对了\n"); break;//正确则输出你猜对了,停止循环 } } printf("你要继续玩吗(Y/Nory/n)"); getchar();//清除回车符 } while(reply=='Y'||reply=='y');//用do…while循环处理已知结束条件 printf("游戏结束\n"); return0; } 以上两个程序因数据过大,故没有写测试用例,但我已经试过无误。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 循环 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)