学习情境三循环结构.ppt

上传人:牧羊曲112 文档编号:6156177 上传时间:2023-09-30 格式:PPT 页数:92 大小:653KB
返回 下载 相关 举报
学习情境三循环结构.ppt_第1页
第1页 / 共92页
学习情境三循环结构.ppt_第2页
第2页 / 共92页
学习情境三循环结构.ppt_第3页
第3页 / 共92页
学习情境三循环结构.ppt_第4页
第4页 / 共92页
学习情境三循环结构.ppt_第5页
第5页 / 共92页
点击查看更多>>
资源描述

《学习情境三循环结构.ppt》由会员分享,可在线阅读,更多相关《学习情境三循环结构.ppt(92页珍藏版)》请在三一办公上搜索。

1、学习情境三 循环结构,情境目标:for语句、while语句和do-while语句;使用循环结构和循环结构的流程图;使用break语句和continue语句;用设置断点的方法调试程序。任务分解:3.1 使用for语句实现循环控制3.2 使用while语句实现循环控制3.3 使用do-while语句实现循环控制3.4 用break语句强行退出循环 用continue语句进行下一次循环3.5 学会使用循环嵌套,P49,任务描述:1、计算1+2+3+n的值,n值由键盘任意录入。2、计算1*2*3*n的值,n值由键盘任意录入。3、编写程序,输出100999之间个位是5且能被7整除的数,要求每行输出5个数

2、,且统计一共有多少个这样的数。(枚举)4、求5、求(即求1!+2!+3!+4!+5!+20!)6、打印出所有水仙花数,所谓水仙花数是指一个三位数,其各位数字立方和等于该本身。例如:153是一个水仙花数,因为153=。(枚举)7、有一分数序列:求出这个数列的前20项之和。,3.1 使用for语句实现循环控制,63以下for循环的执行次数是。for(x=0,y=0;(y=123)A.(int)(i/7)=i/7 B.(int)i/7=i/7 C.i%7=0 D.i%7=0,C,C,D,79对for(表达式1;表达式3)可理解为。Afor(表达式1;0;表达式3)Bfor(表达式1;1;表达式3)C

3、for(表达式1;表达式1;表达式3)Dfor(表达式1;表达式3;表达式3)80若i为整型变量,则以下循环执行次数是.for(i=2;i=0;)printf(%d,i-);A无限次 B.0次 C.1 次 D.2次81执行语句for(i=1;i+4;);后变量i的值是。A3 B.4 C.5 D.不定82下面程序的功能是计算 1至10之间的奇数之和及偶数之和。请选择填空。main()int a,b,c,i;a=c=0;for(i=0;i=10;i+=2)a+=i;c+=b;printf(偶数之和=%dn,a);printf(奇数之和=%dn,c-11);Ab=i-B.b=i+1 C.b=i+D.

4、b=i-1,B,B,C,B,83下面程序的运行结果是:main()int i;for(i=1;i=5;i+)switch(i%5)case 0:printf(*);break;case 1:printf(#);break;default:printf(n);case 2:printf(A#&*B.#&C.#D.#&*&*,B,资讯:3.1.1 使用for语句重复显示信息3.1.2 使用for语句重复出算术题,3.1 使用for语句实现循环控制,P50,3.1.1 使用for语句重复显示信息,【实例3.1】编写程序,在屏幕上显示如下信息,每按一次任何键时重复显示,共显示3次,要求每次显示后其下面

5、还要给出显示次数。,P50,*Welcome*,显示1次信息可用输出语句:printf(*n);printf(*Welcome*n);printf(*n);,显示3次信息,重复3次以上语句,按任何键的操作使用getch,#include main()int i=0;for(i=1;i=3;i=i+1)printf(*n);printf(*Welcome*n);printf(*n);printf(Display%d time(s).nn,i);getch();,#include main()int i=0;for(i=1;i=3;i=i+1)printf(*n);printf(*Welcome*

6、n);printf(*n);printf(Display%d time(s).nn,i);getch();,2=3,#include main()int i=0;for(i=1;i=3;i=i+1)printf(*n);printf(*Welcome*n);printf(*n);printf(Display%d time(s).nn,i);getch();,3=3,#include main()int i=0;for(i=1;i=3;i=i+1)printf(*n);printf(*Welcome*n);printf(*n);printf(Display%d time(s).nn,i);get

7、ch();,4=3,运行结果:*Welcome*Display 1 time(s).,*Welcome*Display 2 time(s).,*Welcome*Display 3 time(s).,真,假,i3,i=1,i=i+1,输出信息,流程图,一般形式:,for(表达式1;表达式2;表达式3)重复执行部分;,执行流程:,归纳分析,说明:for语句中表达式1,表达式2,表达式3 类型任意,都可省略,但分号;不可省无限循环:for(;),例 用for循环求,#include main()int i,sum=0;for(i=1;i=100;i+)sum+=i;printf(%d,sum);,f

8、or(循环变量赋初值;循环条件;循环变量增值)循环体语句;,for语句一般应用形式:,例:#include main()int i=0;for(i=0;i10;i+)putchar(a+i);,运行结果:abcdefghij,例:#include main()int i=0;for(;i10;i+)putchar(a+i);,例:#include main()int i=0;for(;i10;)putchar(a+(i+);,例:#include main()int i=0;for(;i10;putchar(a+i),i+);,main()int i,j,k;for(i=0,j=100;i=j

9、;i+,j-)k=i+j;printf(%d+%d=%dn,i,j,k);,#includemain()char c;for(;(c=getchar()!=n;)printf(%c,c);,3.1.2 使用for语句重复出算术题,【实例3.2】编写程序,给小学生出4道100以内2个数的加法题,每道题25分,根据学生的答案,显示实际得分。,P52,要出4道题,需重复4次出题操作,对每题,要及时判断答案的正确性,当答案正确时要累加分数,#include#include#include main()int i=0,op1=0,op2=0,pupil=0,answer=0,total=0;random

10、ize();for(i=1;i=4;i+)op1=random(100);op2=random(100);printf(%d+%d=,op1,op2);scanf(%d,在编写程序时,参插着使用顺序、分支、循环结构,3.5.1 学会找出Fibonacci数列的各项,掌握递推算法,【实例3.8】编写程序,输出Fibonacci数列的前30项(每行输出5项)。,P63,#include main()int i=0;long f1=0,f2=1,f3=0;printf(%10ld%10ld,f1,f2);for(i=3;i=30;i+)f3=f1+f2;printf(%10ld,f3);f1=f2;

11、f2=f3;if(i%5=0)printf(n);,据前项和后项关系求解,递推算法,计算1+2+3+100的值,sum=0;for(i=1;i=100;i+)sum=sum+i;,或sum=0;i=1;while(i=100)sum=sum+i;i=i+1;,计算n!值,f=1;for(i=1;i=n;i+)f=f*i;,或f=1;i=1;while(i=n)f=f*i;i=i+1;,计算1!+2!+3!+n!的值,f=1;s=0;for(i=1;i=n;i+)f=f*i;s=s+f;,计算30+31+32+33+3n的值,f=1;sum=1;for(i=1;i=n;i+)f=f*3;sum=

12、sum+f;,计算 的值,s=1;sum=0;for(i=1;i=100;i+)sum=sum+s*1.0/i;s=-s;,1、计算1+2+3+n的值,n值由键盘任意录入。#includevoid main()int n,sum=0,i;scanf(%d,2、计算1*2*3*n的值,n值由键盘任意录入。#includevoid main()int n,i;float s=1;scanf(%d,3、编写程序,输出100999之间个位是5且能被7整除的数,要求每行输出5个数,且统计一共有多少个这样的数。#includevoid main()int s,i=0;for(s=100;s=999;s+)

13、if(s%10=5,4、求,#includevoid main()int k;int sum1=0;float sum,sum2=0;for(k=1;k=100;k+)if(k=10)sum2+=1.0/k;if(k=50)sum1+=k*k;sum1+=k;sum=sum1+sum2;printf(sum=%fn,sum);,5、求(即求1!+2!+3!+4!+5!+20!),#includevoid main()double sum=0;int i;double f=1;for(i=1;i=20;i+)f=f*i;sum=sum+f;printf(sum=%lfn,sum);,6、打印出所

14、有水仙花数,所谓水仙花数是指一个三位数,其各位数字立方和等于该本身。例如:153是一个水仙花数,因为153=。,void main()int s;int a,b,c;for(s=100;s=999;s+)a=s%10;b=s%100/10;c=s/100;if(s=a*a*a+b*b*b+c*c*c)printf(%dn,s);,7、有一分数序列:求出这个数列的前20项之和。,#includevoid main()int i;float sum=0,s;int a=2,b=1,t;for(i=1;i=20;i+)s=a*1.0/b;sum=sum+s;t=b;b=a;a=a+t;printf(

15、sum=%fn,sum);,任务描述:1、编程,为了比较A、B两家相邻超市的顾客访问人数,某人站在小超市门口用两种颜色的豆子统计人数,若顾客进A家,加1粒红豆,进B家,加1粒绿豆,最后根据红豆和绿豆的个数比较。2、编程,求满足 的最大的n值。3、编程,计算(n值由键盘输入)。4、猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。5、输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。(直到输入回车为止

16、。)6、统计公元1年到公元2000年的闰年个数。,3.2 使用while语句实现循环控制,P54,55.若k为整型,以下while循环执行 次。k=2;while(k=0)printf(%d,k),k-;printf(n);A.无限次 B.0次 C.1次 D.2次56.下面这个程序的输出是。main()int y=10;while(y-);printf(y=%dn,y);A.y=0 B.while构成死循环 C.y=1 D.y=-157设有程序段int k=10;while(k=10)k=k-1;则下面描述中正确的是。A.while循环执行10次 B.循环是无限循环C.循环体语句一次也不执行

17、D.循环体语句执行一次,B,D,B,58下面程序的功能是将从键盘输入的一对数,由小到大排序输出。当输入一对相等数时结束循环,请选择填空。main()int a,b,t;scanf(%d%d,A.a=0 B.a C.!a=1 D.!a,B,B,资讯:3.2.1 使用while语句为学生分班3.2.2 使用while语句计算近似值,3.2 使用while语句实现循环控制,P54,3.2.1 使用while语句为学生分班,【实例3.3】编写程序,根据所输入的学生英语成绩,把学生分成A、B两个班,其中大于等于85分的学生分到A班,其余的学生分到B班,如果输入的成绩为负数,认为没有其他学生,最后分别显示

18、A、B班的总人数。,P54,#include main()int a=0,b=0,score=0;scanf(%d,一般形式:,while(表达式)循环体语句;,执行流程:,3.2.2 使用while语句计算近似值,【实例3.4】编写程序,计算数学式的近似值,直到最后一项的值小于10-4为止。,P56,#include main()int n=1;float sum=0.0;while(float)1/n=1e-4)sum=sum+(float)1/n;n=n+2;printf(sum=%fn,sum);,实型数10-4,1、编程,为了比较A、B两家相邻超市的顾客访问人数,某人站在小超市门口用

19、两种颜色的豆子统计人数,若顾客进A家,加1粒红豆,进B家,加1粒绿豆,最后根据红豆和绿豆的个数比较。,#includevoid main()int flag;int red=0,green=0;scanf(%d,2、编程,求满足 的最大的n值。,#includevoid main()float sum=0;int n=1;while(sum=10000)sum=sum+n*n*n;n+;printf(最大的n值为:%dn,n-2);,3、编程,计算(n值由键盘输入)。,#includevoid main()float s=1;int i,n;scanf(%d,4、猴子吃桃问题。猴子第一天摘下若

20、干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。,#includevoid main()int i,s=1;for(i=9;i=1;i-)s=(s+1)*2;printf(一共有桃子%dn,s);,5、输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。(直到输入回车为止。),#includevoid main()char ch;int zm=0,kg=0,sz=0,qt=0;scanf(%c,6、统计公元1年到公元2000年的

21、闰年个数。,#includevoid main()int year;int num=0;for(year=1;year=2000;year+)if(year%400=0|year%4=0,任务描述:若运行以下程序时,从键盘输入ADescriptor(CR表示回车),则下面程序的运行结果是。#includemain()char c;int v0=0,v1=0,v2=0;doswitch(c=getchar()case a:case A:case e:case E:case i:case I:case o:case O:case u:case U:v1+=1;default:v0+=1;v2+=1

22、;while(c!=n);printf(v0=%d,v1=%d,v2=%dn,v0,v1,v2);A.v0=7,v1=4,v2=7 B.v0=8,v1=4,v2=8 C.v0=11,v1=4,v2=11 D.v0=12,vl=4,v2=12,3.3 使用do-while语句实现循环控制,P58,D,73以下程序段。x=-1;do x=x*x;while(!x);A是死循环 B.循环执行二次 C循环执行一次 D.有语法错误74以下描述中正确的是。A由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句 Bdo-while循环由do开始,用while结束,在whil

23、e(表达式)后面不能写分号 C在do-while循环体中,一定要有能使while后表达式值变为零(假)的操作 Ddo-while循环中,根据情况可以省略while,C,C,资讯:3.3.1 使用do-while语句计算做题正确率 3.3.2 使用do-while语句编写打字练习程序,3.3 使用do-while语句实现循环控制,P58,3.3.1 使用do-while语句计算做题正确率,【实例3.5】编写程序,给小学生出若干道100以内2个数的加法题,直到学生做对5道题为止,最后显示学生做题的正确率。,P58,#include#include#include main()int op1=0,o

24、p2=0,pupil=0,answer=0,right=0,total=0;float rate=0.0;srand(time(0);,doop1=rand%100;op2=rand%100;printf(%d+%d=,op1,op2);scanf(%d,rate=(float)right/total*100;printf(rate is:%fn,rate);,do-while语句一般形式:,do 循环体语句;while(表达式);,执行流程:,3.3.2 使用do-while语句编写打字练习程序,【实例3.6】编写程序,根据已显示的一段句子练习打字,按回车键可随时停止练习。,P60,#inc

25、lude main()char ch=0;printf(Those who dive beneath the surface find solutions others cannot see.n);doch=getch();putchar(ch);while(ch!=r);,3.4 用break语句强行退出循环,【实例3.7】编写程序,在已报名的100名考生中,补招总分高于420分的学生,但按照报名的先后顺序只补招3名学生。,P61,#include main()int score=0,i=0,total=0;for(i=1;i420)printf(Admited.score:%dn,scor

26、e);total+;if(total=3)break;else printf(Not admited.n);,3.4 用continue语句继续下一次循环,#includevoid main()int t,x;for(t=1;t=10;t+)scanf(%d,功能:结束本次循环,跳过尚未执行的语句,进行下一次是否执行循环体的判断,下面程序的运行结果是。#include stdio.hmain()int i;for(i=1;i=5;i+)if(i%2)printf(*);else continue;printf(#);printf(#);A.*#*#$B.*#*#*#C.*#*#$D.#*#*$

27、,B,任务描述:1、假设x、y、z为偶数,且满足x+2y+z=16,输出所有可能的x、y、z的值。(可用三重循环)2、将100元钱换成10元、5元、1元的零钱,如果要求换成30张,编程输出所有可能的换法。3、编程,打印图案,要求行数由键盘输入。,3.5 学会使用循环设计典型算法,P63,51.该程序的输出结果是。m=37;n=13;while(m!=n)while(mn)m=m-n;while(nm)n-=m;printf(m=%dn,m);m=13 B.m=11 C.m=1 D.m=252.该程序的输出结果是。for(i=0;i2)break;printf(%d,j);printf(%dn,

28、i);A.10,3 B.5,2 C.5,3 D.10,2,C,C,69下面程序的运行结果是。#include stdio.hmain()int i;for(i=1;i=5;i+)if(i%2)printf(*);else continue;printf(#);printf(#);*#*#$B.*#*#*#C.*#*#$D.#*#*$70下面程序的运行结果是。main()int i,j,a=0;for(i=0;i2;i+)for(j=0;j=4;j+)if(j%2)break;a+;a+;printf(%dn,a);,B,4,3.5.3 用枚举算法求解百元百鸡问题3.5.4 学会判断质数的算法,

29、3.5 学会使用循环设计典型算法,P63,3.5.3 用枚举算法求解百元百鸡问题,【实例3.10】编写程序,输出百元百鸡问题的所有可能结果。,P67,假设公鸡、母鸡和小鸡的个数分别为x,y,z,5x+3y+z/3=100 x+y+z=100,x的取值在020之间;同理y的取值在033之间,#includemain()intx=0,y=0,z=0;for(x=0;x=20;x+)for(y=0;y=33;y+)z=100-x-y;if(15*x+9*y+z=300)printf(cock=%-3dhen=%-3dchicken=%-3dn,x,y,z);,不重复、不遗漏地一一列举出来,枚举算法,

30、双重循环,循环的嵌套三种循环可互相嵌套,层数不限外层循环可包含两个以上内循环,但不能相互交叉嵌套循环的执行流程,(1)while()while().,(2)do do while();.while();,(3)while()do while();.,(4)for(;)do while();while().,嵌套循环的跳转禁止:从外层跳入内层跳入同层的另一循环向上跳转,打印九九乘法表,修改:如何去掉重复数据,打印三角形的九九乘法表?,main()int i,j;for(i=1;i=9;i+)/*I 作为外循环控制变量,控制被乘数变化*/for(j=1;j=9;j+)/*j作为外循环控制变量,控制

31、乘数变化*/printf(“%d*%d=%-4d”,i,j,i*j);printf(“n”);,例2:输出如下形式图案。,*,main()int i,j;for(i=1;i=6;i+)/*外层循环用于控制输出的行数*/for(j=1;j=8;j+)/*内层循环用于控制在一行上输出的“*”的个数*/printf(“*”);printf(“n”);/*换行*/,3.5.4 学会判断质数的算法,【实例3.11】编写程序,判断任意输入的一个自然数是否为质数。,P70,#include main()int i=0,n=0;scanf(%d,#include#include main()int i=0,k

32、=0,n=0;scanf(%d,改进的方法,【实例3.12】已知x、y均为质数,编写程序输出x+y21的所有可能解,并统计可能解的个数。,(1)使x取2 判定x是否为质数 如果x为质数,则使y取2 判定y是否为质数 若为质数,输出x、y,并累加可能解的个数 y增1,若y21-x,转到,否则转到(2)(2)x增1,若x21,转到,否则转到(3)(3)结束求解过程,#include#include main()int i=0,k=0,x=0,y=0,s=0;,for(x=2;xk)for(y=2;yk)printf(%3d+%-2d=21,x,y);s+;if(s%7=0)printf(n);,按

33、每行7组数据输出,ik时x为质数,ik时y为质数,printf(n s=%dn,s);getch();,1、假设x、y、z为偶数,且满足x+2y+z=16,输出所有可能的x、y、z的值。(可用三重循环)#includevoid main()int x,y,z;for(x=0;x=16;x=x+2)for(y=0;y=8;y=y+2)for(z=0;z=16;z=z+2)if(x+2*y+z=16)printf(x=%d,y=%d,z=%dn,x,y,z);,2、将100元钱换成10元、5元、1元的零钱,如果要求换成30张,编程输出所有可能的换法。#includevoid main()int shi,wu,yi;for(shi=0;shi=10;shi+)for(wu=0;wu=20;wu+)yi=30-shi-wu;if(shi*10+wu*5+yi=100)printf(十元的是%d张n五元的是%d张n一元的是%d张n,shi,wu,yi);printf(n);,3、编程,打印图案,要求行数由键盘输入。#includevoid main()int i,j,n;printf(请输入图案的行数:);scanf(%d,贯穿教学全过程的实例,P74,根据教材第7476页上机操作,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号