当前位置:文档之家› 实验三 循环结构程序设计(教案)

实验三 循环结构程序设计(教案)

实验教案一、实验目的(1) 掌握while、do~while、for语句的使用。

(2) 掌握循环体内使用break、continue语句的作用。

(3) 掌握循环及嵌套循环结构的程序设计方法。

二、实验准备1.C语言实现循环的方法①goto 和if 构成的循环:由于goto是无条件转向,不符合结构化程序设计思想,所以不建议使用。

②while循环:实现“当型”循环,首先判断循环条件,当条件为真,执行循环体,再判断循环条件……此种循环有可能一次也不执行循环体。

③do~while循环:实现“直到型”循环,与while循环的区别是先执行循环体,再判断循环条件,当循环条件为真,再执行循环体……此种循环至少执行一次循环体。

④for循环:与while循环类似,一般用于知道循环变量初值、终值及步长值的循环。

2.break 和continue 语句①break 语句:可用在循环体或switch语句中,作用是跳出其所在的控制结构。

若是在循环体中,则是跳出其所在的循环,使得循环不止一个出口。

②continue语句:只能用在循环体中,其作用是结束本层本次循环,注意不是退出循环。

3.阅读以下程序,并分析其功能,调试运行程序后再分析其运行结果。

①掌握三种方法求1到100的累加和。

文件名为ex3-1-1.c,内容如下:# include <stdio.h>main(){ int sum=0,i=1;while(i<=100)sum+=i++; // 等价于:{ sum=sum+i; i++; }printf("sum is %d\n",sum);}文件名为ex3-1-2.c,内容如下:# include <stdio.h>main(){ int sum=0,i=1;dosum+=i++;while(i<=100);printf("sum is %d\n",sum);}文件名为ex3-1-3.c,内容如下:# include <stdio.h>main(){ int sum=0,i;for(i=1;i<=100;i++)sum+=i;printf("sum is %d\n",sum);}②程序二,程序文件名为ex3-2.c。

(掌握递推算法(求 值))# include <stdio.h># include <math.h>void main(){ int s=1;float n=1,t=1,pi=0;while(fabs(t)>1e-6) //当前项实数t的绝对值大于1*10-6则执行循环体{ pi=pi+t; //累加当前项n=n+2; //推算下一项的分母s=-s; //推算下一项的符号t=s/n; //计算下一项的值}pi=pi*4;printf("pi= %f\n",pi);}③程序三,程序文件名为ex3-3.c。

(掌握迭代算法(处理fibonacci数列前40项))# include <stdio.h>void main(){ long f1=1,f2=1;int i;for(i=1;i<=20;i++){ printf("%12ld %12ld",f1,f2); //输出当前的两项if(i%2==0) //循环2次后输出回车换行,即一行输出4个数printf("\n");f1=f1+f2; //推算之后的第一项f2=f1+f2; //推算之后的第二项}}④程序四,程序文件名为ex3-4.c 。

(掌握穷举算法(判素数))# include <stdio.h># include <math.h>void main(){ int m,i,k;printf("Input m: ");scanf("%d",&m);k=sqrt(m); //可以改为:k=m-1; 或k=m/2;for(i=2;i<=k;i++) //穷举2~k之间的数作为除数判断和m能否整除if(m%i==0) //若其中之一能够整除,则确定m不是素数,不再循环,此时i<=kbreak;if(i>k) //若i>k则说明以上循环中m不能被所有的i整除则确定m是素数elseprintf("%d 不是素数!\n",m);void main(){int i,j;for(i=1;i<=9;i++){for(j=1;j<=i;j++)printf("%d*%d=%-5d",j,i,i*j);printf("\n");}void main(){int i,n;float x,p=1; /*累乘器要赋初值1*/printf("Input x,n: ");scanf("%f,%d",&x,&n); /*以逗号分隔输入的已知数据x和n的值*/ for(i=1;i<=n;i++)p=p*x;运行结果:3、设计程序sy3-3.c,已知祖父年龄70岁,长孙20岁,次孙15岁,幼孙5岁,问要过多少年,三个孙子的年龄之和同祖父的年龄相等,试用单重循环结构编程实现。

算法分析:这个程序可以用穷举法来实现,1年、2年、3年……,每加一年都判断三个孙子的年龄之和是否同祖父的年龄相等,若相等则不加了,这个时候所加的年数为我们需要的结果。

参考答案:# include <stdio.h>void main(){int i,a,b,c,d;a=20; b=15; c=5; d=70;i=1;while(a+i+b+i+c+i!=d+i)i++;printf("After %d years be can.\n",i);}运行结果:4、设计程序sy3-4.c,有一数列:2/1,3/2,5/3,8/5,…求出这个数列的前10项之和。

算法分析:这是一个序列累加的算法,第一项的值是2/1,之后每一项的规律是:分母为前一项的分子,分子为前一项分子分母之和;另外注意在除运算中若分子分母都为整数则结果也为整数,显然在这道题中分子分母的类型应为实型。

参考答案:# include <stdio.h>void main(){int i;float s=0,a=2,b=1,c,t;for(i=1;i<=10;i++){ t=a/b; /*计算确定分子分母后当前项的值*/s=s+t; /*将当前项t的值累加到求和变量s当中*/c=a; /*将前一项的分子暂存于c变量中*/a=a+b; /*修改下一项的分子为前一项分子分母之和*/b=c; /*修改下一项的分母为前一项的分子*/}printf("The sum is %f\n",s);运行结果:# include <stdio.h>void main(){float s=200,h=s/4; /*记录第一次落地经过的路程和第一次反弹的高度*/int i;for(i=2;i<=10;i++){ s=s+2*h;h=h/4;}printf("s=%.2f\n",s);printf("h=%f\n",h);}运行结果:6、设计程序sy3-6.c,要求求出满足“百位减去十位等于个位”的所有三位整数,并按一行5个数输出结果。

算法分析:该算法可用循环穷举所有的三位整数,逐一判断是否满足条件,并设置一个计数器,计找到的满足条件数的个数,当计数器为5的倍数的时候输出回车换行。

参考答案:# include <stdio.h>void main(){int n=0,a,b,c,i; //计数器n要赋初值0for(i=100;i<=999;i++) //穷举所有的三位整数{a=i/100; //分解百位b=i/10%10; //分解十位c=i%10; //分解个位if(a-b==c){ printf("%5d",i); //输出满足条件的数n++;if(n%5==0)printf("\n");}}printf("\n");}运行结果:7、设计程序sy3-7.c,要求从键盘上输入整数m和k,输出大于且紧靠m的k个素数。

算法分析:该题用到判素数的算法,从输入的m+1开始往上找,找够k个结束。

参考答案:# include <stdio.h># include <math.h>void main(){int m,k,i,j,q;printf("Input m,k: ");scanf("%d,%d",&m,&k);for(m=m+1; k>0 ;m++){ q=sqrt(m); //可以为q=m-1或q=m/2for(j=2;j<=q;j++)if(m%j==0) break;if(j>q){ printf("%5d",m);k--;}}printf("\n");}运行结果:8、中国古代数学家张丘建在他的《算经》中提出了著名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?请编程解决该问题。

(文件名存为sy3-8.c)算法分析:设鸡翁、鸡母、鸡雏的个数分别为x,y,z,题意给定共100钱要买百鸡,若全买公鸡最多买20只,显然x的值在0~20之间;同理,y的取值范围在0~33之间,可得到下面的不定方程:5x+3y+z/3=100x+y+z=100所以此问题可归结为求这个不定方程的整数解。

由程序设计实现不定方程的求解与手工计算不同。

在分析确定方程中未知数变化范围的前提下,可通过对未知数可变范围的穷举,验证方程在什么情况下成立,从而得到相应的解。

参考答案:# include <stdio.h>void main(){int x,y,z;for(x=0;x<=20;x++)for(y=0;y<=33;y++){ z=100-x-y; //鸡的数目够100if( z%3==0 && x*5+y*3+z/3==100 ) //购买鸡的钱够100,注意z必须是3的整数倍printf("x:%d y:%d z:%d\n",x,y,z); //输出此种组合}}运行结果:9、编写程序sy3-9.c,输入一个正整数,计算并显示该整数的各位数字之和,例如,整型数1987的各位数字之和是1+9+8+7,等于25。

相关主题