当前位置:文档之家› C语言循环实验报告

C语言循环实验报告

实验名:循环结构实验目的1、掌握在程序设计条件型循环结构时,如何正确地设定循环条件,以及如何控制循环的次数。

2、了解条件型循环结构的基本测试方法。

3、掌握如何正确地控制计数型循环结构的次数4、了解对计数型循环结构进行测试的基本方法5、了解在嵌套循环结构中,提高程序效率的方法二、实验内容(一))题目11、题目内容描述1、下面是一个计算e的近似值(使误差小于给定的δ)的程序。

main(){doublee=1.0,x=1.0,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(“%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 double2 i int (2)输出数据序号输出数据描述数据类型1 E double 3、程序源代码(填写程序调试正确后的代码)#include<stdio.h>intmain(){doublee,x,y,detax;inti;e=1.0;x=1.0;i=1.0;printf("pleaseinputenteraerror:\n");scanf("%lf",&detax);y=1/x;while(y>=detax){x=x*i;y=1/x;e=e+y;++i;}printf("%12.10lf",e);return0;}7、程序调试错误序号错误信息(列出出错语句以及出错提示)是否解决解决方法1 格式不对是手动调整2 warning:returntypedefaultsto'int'[-Wreturn-type]| 是在main()前加上int3 error:stray'\243'inprogram|error:stray'\273'inprogram| 是将doublee=1.0,x=1.0,y,detax;inti=1;改为doublee,x,y,detax;inti;e=1.0;x=1.0;i=1.0;4 D:\程序\e近似值\main.c||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改为i7 c|19|error:stray'\241'inprogram| 是将printf(“%12.10lf”,e);改为printf("%12.10lf",e);8 c|20|warning:controlreachesendofnon-voidfunction[-Wreturn-type]|是在后一个大括号前加上return0;8、测试与结果分析(1)、测试数据与结果测试序号测试用例选取原因测试输入数据测试输出结果是否正确结果分析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>intmain(){doublee,x,y,detax;//定义变量inti;e=1.0;//赋值x=1.0;i=1.0;printf("\npleaseinputenteraerror:");scanf("%lf",&detax);//输入detaxy=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(){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);}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(){inti,j,k;longsum=0;for(j=1.j<=3.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 int2 sum longint(2)输出数据序号输出数据描述数据类型1 sum Longint3、程序源代码(填写程序调试正确后的代码)#include<stdio.h>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()前加上int3 |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次。

相关主题