第6章循环控制

上传人:功*** 文档编号:252382472 上传时间:2024-11-15 格式:PPT 页数:40 大小:674.50KB
返回 下载 相关 举报
第6章循环控制_第1页
第1页 / 共40页
第6章循环控制_第2页
第2页 / 共40页
第6章循环控制_第3页
第3页 / 共40页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二层,第三层,第四层,第五层,*,第,6,章 循环控制,教学目的和任务,:掌握循环结构的概念、,三种循环控制结构语句,:while,语句、,do-while,语句、,for,语句;掌握循环的嵌套,,break,和,continue,语句的应用,,熟练应用循环控制编写程序。,教学重点,:,while,语句、,do-while,语句、,for,语句;循环的嵌套,教学难点,:循环的嵌套及综合应用,主要内容,6.1,概述,6.2 goto,语句以及用,goto,语句构成循环,6.3,用,while,语句实现循环,6.4,用,do-while,语句实现循环,6.5,用,for,语句实现循环,6.6,循环的嵌套,6.7,几种循环的比较,6.8 break,语句,continue,和语句,6.9,程 序 举 例,C,语言有,while,、,do-while,、和,for,语句三种循环结构语句。,前两个称为条件循环,即根据条件,来决定是否继续循环;,后一个称为计数循环,即根据设定,的执行次数来执行循环。,循环结构,while,语句,while,语句是通过判断循环控制条件是否满足来决定是否继续循环的语句。,一般形式,:,while (,表达式,),语句,表达式为循环控制条件,当表达式的值为非零,(,满足循环条件,),就执行语句,当表达式的值为零,就退出循环。,while,语句执行流程,表达式,语句,真,假,表达式,首先计算表达式,语句,如果表达式的值为非零,,,执行语句,表达式,重新计算表达式,如果表达式的值为,0,,则跳出循环,如果表达式的值一开始就为,0,,则语句一次也会被不执行。,while,语句举例,问题,:,求,n,个学生的平均成绩,算法,:,1,输入,n;i=1,average=0;,2,输入第,i,个学生的,score;,3 average+=score;i+;,4,当,i=n,重复做,2;,5 average/=n;,void main(),int n,score,i=1;,float average=0;,scanf(“%d”,while(i=n),printf(“n Enter score:”);,scanf(“%d”,average+=score;i+;,average/=n;,printf(“n average=%f”,average);,4.3.2 do,while,语句,dowhile,语句的一般形式是,:,do,语句,while (,表达式,),特点:,首先执行语句,再通过判断循环控制条件是否满足来决定是否继续循环。,do,while,语句执行流程,首先计算语句,,再计算表达式。,如果表达式的值为非零,,,继续下一次,循环,如果表达式的值为,0,,则跳出循环,如果表达式的值一开始就为,0,,也会执行一次语句。,语句,表达式,void main(),int n,score,i=1;,float average=0;,scanf(“%d”,do,printf(“n Enter score:”);,scanf(“%d”,average+=score;i+;,while(i=n);,average/=-i;,printf(“n average=%f”,average);,注意:循环控制变量值在循环体内必须有所改变。,例如,:,i,=,1,;,while(,i,=,100,),putchar,(*);,i,+;,这个循环永远不会结束,因为循环控制变量,i,没有在循环体内被改变,,i+;,不属于循环语句。,i+,应该在循环体内改变,:,i,=,1,;,while(i=,100,),putchar,(*);,i,+;,for,语句,for(,表达式,1;,表达式,2;,表达式,3),循环体语句,这是,C,语言最有特点的循环语句。使用最为灵活方便,一般形式:,先计算初值表达式,用于循环开始前设置变量初值。,接着计算循环控制逻辑表达式,控制循环条件,决定循环次数。,执行循环体语句,这个语句也可以是其它循环。,循环控制变量,修改表达式。,表达式,1,表达式,2,循环体,表达式,3,执行流程,例,:,求,1+2+99,#include(stdio.h)void main(),int i,s=0;/*s,清,0*/for(i=1;i100;i+)s=s+i;printf(“s=%d”,s);,i=1,i100,s=s+i,i+,循环语句的多种表示,for(i=1;i100;i+)s=s+i;,void main()int i=1,s=0;,do s=s+i;,while(,+i100),printf(“s=%d”,s);,void main(),int i,s=0;,i=1;while(i100)s=s+i;i+;,printf(“s=%d”,s);,for,语句的表达式可以省略,如已先给变量赋过值。则可以省略表达式,1,。,for(;i100;i+),如果想在循环内部改变变量的值,则可以省略表达式,3,。,for(i=0;i100;),如果都省略的话就相当于,while,。,for(;i100;),while(i100),全部省略就是死循环。,for(;)(,需要用,break,跳出,),for,循环中的逗号表达式,逗号运算符的主要应用就在,for,语句中。,for,语句中的表达式,1,和表达式,3,可以是逗号表达式,特别是有两个循环变量参与对循环的控制时。表达式,1,和表达式,3,为逗号表达式,将使程序显得非常清晰。,例,:for(i=1,j=10;i=j;i+,j-),for(i=a,j=b;i=j;i+,j-),举例,问题,:,求,1/100+2/99+,+1,float s=0.0;,for(i=1,j=100;i=j;i+,j-),s=s+i/j;,循环语句流程图的统一格式,循环上限,循环下限,循环体,循环嵌套,在循环体语句中又有另一个完整的循环结构的形式,称为循环的嵌套。嵌套在循环体内的循环称语句称为内循环,外面的循环语句称为外循环。如果内循环体中又有嵌套的循环语句,称为多层循环。,while,、,do-while,、,for,三种循环都可以互相嵌套。,循环嵌套的程序中,要求内循环必须被包含在外层循环的循环体中,不允许出现内外层循环体交叉的情况。,0 0 0 1 0 2 0 3 0 4 0 5,1 0 1 1 1 2 1 3 1 4 1 5,2 0 2 1 2 2 2 3 2 4 2 5,3 0 3 1 3 2 3 3 3 4 3 5,4 0 4 1 4 2 4 3 4 4 4 5,5 0 5 1 5 2 5 3 5 4 5 5,输出结果:,执行语句段:,for(i=0;i6;i+)for(j=0;j6;j+),printf(“%d%d”,i,j);putchar(n);,循环程序设计方法,(1),枚举或穷举算法,:,按问题本身的性质,一一列举出该问题所有可能的解,并在逐一列举的过程中,检验每个可能解是否是问题的真正解,若是,我们采纳这个解,否则抛弃它。对于所列举的值,既不能遗漏也不能重复。,例:,“,鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁母雏各几何?,”,(,引自张邱建算经,公元五世纪,),#include,void main(),int x,y,z;,clrscr();,for(x=0;x=20;x+),for(y=0;y=33;y+),z=100-x-y;,if(5*x+3*y+z/3)=100),printf(“cock:%d,hens:%d,chicks:%dn,x,y,z);,算法思想,:,让,m,被,2,到,m-1,除,如果,m,能被,2,m-1,之中任何一个整数整除,则提前结束循环,,m,不是素数;如果,m,不能被,2,m-1,之间的任一整,数整除,则执行完循环,m,是素数。,例,6.8,判断,m,是否素数。,让,m,被,2,到 除,如果,m,能被,2,之中,任何一个整数整除,则提前结束循环,,m,不是,素数;否则执行完循环,m,是素数。,#include,#include,void main(),int m,i,k;,scanf(%d,k=sqrt(m);,for(i=2;ik),printf(%d is a prime numbern,m);,else,printf(%d is not a prime numbern,m);,(2),迭代算法,:,不断用新值取代变量的旧值,或由旧值递推出变量的新值的过程。,例,6.7:,设有一对新生兔子,从出生后第,3,个月开,始每个月都生一对兔子,小兔子长到第,3,个月后,每个月又生一对兔子,按此规律,并假设没有兔,子死亡,,n,个月后共有多少对兔子?,分析,:,设第,n,个月后有,f(n),对兔子,根据题意有,f(1)=1,f(2)=1,f(n)=f(n-1)+f(n-2),void main(),long f1,f2,f,n;,int i;,f1=1;f2=1;,scanf(,“,%d,”,for(i=3;i100),break;,/*,如果,i100,则退出循环*,/printf(“s=%d”,s);,本程序中,当,i100,时,强行终止,for,循环,继续执行,for,语句下一条语句,接续语句,continue,continue,语句也被称为继续语句。执行,continue,语句,使本次循环提前结束,即跳过循环体中,continue,语句下面的尚未执行的循环体语句,但不结束整个循环,继续进行下一次循环的条件判别,条件为真,继续进行执行循环语句。,该语句形式为:,continue;,例,6.5:,把,100200,之间的不能被,3,整除的数输出,#include,void main(),int n;,for(n=100;n=200;n+),if(n%3=0),continue;,printf(%d ,n);,转向语句,goto,goto,被称为无条件转移语句。由两部分组成,goto,标号“,;”,和,标号“,:”,语句,它最大的好处就是可以一下子跳出多重循,环,而,break,却不能做到这点。,#include,void main(),long x=1;,dan:,printf(123n);,printf(456n);,if(x=1),goto,dan;,else,printf(%ldn,x);,返回语句,return,return,语句为返回语句,用于结束函数的运行,返回其调用函数。,return,的使用形式有以下两种:,return;,return,表达式,;,前一种用于控制函数的返回,直接返回调用函数;而后一种返回调用函数的同时还将表达式的值返回给调用语句。,*,*,*,*,问题,:,输出图形,分析,:,带,*,行一共,(7+1)/2,行,,每一行输出的空格数跟,个数有关,i,个,数的一行空格数为,(7-i)/2,输出,数,i,个,,算法,:,当,i=7,则,输出,(7-i)/2,个空格,;,输出,i,个,换行,;i+=2;,void main()int i,j;for(i=1;i=7;i+=2),printf(“n”);,for(j=1;j=(7-i)/2;j+)putchar();/*,输出,(7-i)/2,个空格*,/,for(j=1;j=i;j+)putchar(,);/*,输出,i,个 ,*/,*,*,*,如何打印:,*,*,*,*,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!