第06章 循环控制结构.ppt_第1页
第06章 循环控制结构.ppt_第2页
第06章 循环控制结构.ppt_第3页
第06章 循环控制结构.ppt_第4页
第06章 循环控制结构.ppt_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本章要求:掌握循环控制语句for语句、while语句、dowhile语句及其嵌套应用;掌握break语句和continue语句的应用;掌握简单的算法,如计数、累加和乘法,掌握穷举法和迭代法,第6章循环控制,循环结构的特点:当一个给定的条件成立时,重复执行某个程序段,直到条件不成立。应该注意两个概念:1 .给定的条件称为循环条件2。程序段的重复执行称为循环体。在C语言中,实现循环结构的语句主要有三种:for语句和do语句.同时,第6章循环控制,循环结构,示例:输入10个数字并打印出最大的数字。算法设计如下:(1)输入1个数字并将其存储在变量A中,并将记录数据数的变量N赋值为1,即,N=1(2)将变量A存储在代表最大值的变量Max中,即,Max=A(3)并输入另一个值给A。如果是这样,则Max=A,否则,Max不会改变(4)将记录数据数的变量增加1,即,N=N 1(5)以判断N是否小于10,如果是,则转到步骤(4)(6)打印最大值,从10个数中选择最大个数的流程图,循环结构,执行过程:计算表达式的值,当值为真(不是0)时执行循环体语句。while(表达式)语句;表达式是循环条件,语句是循环体、表达式、语句、非0,0,6.3while语句,它从10中选择最大值,voidmain()inta,max,n=1;scanf(“% d”),循环结构,描述:计算值,如果表达式的值为真(不是0),则执行循环体语句;重复直到表达式的值为false (0),循环体语句不被执行,循环体之外的下一个语句被直接转换。这是一个在循环中重复执行的程序,称为“循环体”。当需要执行多个语句时,应该使用“”形成一个复合语句。while语句首先判断条件,然后执行循环体。这是一个“等效”的循环。因此,如果条件不满足,就有可能不立即执行循环体。例如:s=1 23.100(累加法),main()ints=0,n=1;而(n=1e-6) t=符号/n;pi=t。n=2;符号=-符号; pi=pi * 4;printf(pi=%fn ,pi);,循环结构,6.4do.while语句,do语句;While(表达式);执行过程:首先执行一次循环体语句,然后判断表达式的值,如果为真(不是0),继续循环,否则终止循环。例如:s=1 23.100,void main () ints=0,n=1;do s=s n;n;同时(nn .2)将m除以n以获得余数r。3)如果r=0,则n是获得的最大公约数,并且算法结束;否则,执行4)。4)mn,nr,重复2)。(最小公倍数=两个整数的乘积/最大公约数)。求最大公约数,最小公倍数,两个整数的循环结构,voidmain()intn,m,nm,r,t;printf( Entm,n=?);scanf(“% d % d”),思考和讨论:1)如何更改程序中的while语句.while语句?2)如果“nm=n*m”语句删除,将输出最大公约数的语句重写为:printf (themingobshu=% d n ,n * m/n);这个程序的输出是什么?使用while和do-while语句时应注意以下几点:1 .在if语句和while语句中,表达式后面不能有加号,而do-while语句后面必须有加号。2.当循环体由多个语句组成时,它还必须由括起来以形成一个复合语句。3.如果循环至少要执行一次,while和do-while语句可以相互替换。for语句的一般形式是:for(表达式1;表达式2;表达式3)语句;表达式1(控制变量的初始化):用于给循环变量赋值初始值,也允许给for语句之外的循环变量赋值初始值。此时可以省略该表达式。表达式2(循环条件)循环条件,通常是关系表达式或逻辑表达式。表达式3(循环控制变量的更新)用于修改循环变量的值,通常是赋值语句。6.5对于循环语句,循环结构,对于语句执行过程:1。首先计算表达式1的值。2.计算表达式的值3.然后计算表达式3的值,并返回步骤2重复。注意:在整个for循环中,表达式1只计算一次,而表达式2和3可以计算多次。对于语句,s=1 23.99 100,void main () intn,s=0;对于(n=1;n=100n)s=s n;printf(s=%dn ,s);,main()ints=0,n=1;而(n=100) s=s n;n;打印(S=%d),S);例如,找到n!n由键盘输入(累积乘法),voidmain()intn,I,s;scanf(%d ,voidmain()inti,n,s=1;Scanf (%d ,),循环结构,关于for语句的几种解释:(1)for语句一般形式中的表达式1 可以省略,此时,循环变量应该在for语句之前给出初始值。注意,当表达式1被省略时,它后面的分号不能被省略。例如:I=1;用于(;i=n。I)t=t * I;执行时,跳过“求解表达式1”的步骤,其余部分保持不变。如果省略表达式2,将不判断循环条件,循环将继续而不终止。也就是说,表达式2总是正确的,并且形式上构成了一个死循环。例如:对于(I=1;I)t=t * I;表达式1是赋值表达式,表达式2被省略。它相当于:I=1;而(1) t=t * I;我;3)表达式3也可以省略,但是此时程序员应该尝试确保循环正常结束,并将表达式3的功能放入循环中。例如:对于(I=1;i=n。) t=t * I;我;4)表达式1和3可以省略,只有表达式2,即只有循环条件,如:for(;i=n。)而(I=n) t=t * I;相当于 t=t * I;我;我;例如:对于(;)语句相当于while(1)语句。即,不设置初始值,不判断条件(表达式2被认为是真),并且循环变量的值不增加。这个循环是“死循环”。6)表达式1和表达式3可以是简单表达式或逗号表达式,即包含多个简单表达式,用逗号分隔。例如:对于(t=1,I=1;i=n。t=t*i,I);循环结构,三种循环语句的比较,三种循环语句的比较,说明:1)三种循环中,for语句是最强大和最常用的,而循环在任何情况下都可以用for语句来实现。for语句和while语句的等效替换形式如下:)语句。2)当循环体至少执行一次时,执行.while语句等效于while语句。如果循环体不能同时执行,则只能使用while语句或for语句。表达式1;而(表达式2);表达式3;、循环结构、嵌套多重循环结构的6.6个循环,一个循环完全包含另一个循环结构,称为多重循环嵌套一层称为双重循环,嵌套两层称为三重循环,(4) while () .for () .、(1) while () .while () .,执行.做. while(); while();(3)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(for)(,(8)为()做而();,循环结构,voidmain()inti,j;对于(I=1;I=3;i )printf(i=%d ,I);对于(j=1;j=3;j )printf(j=%d ,j);printf( n );,共9次,共3次,对于循环的嵌套,应注意以下事项:(1)内部循环变量和外部循环变量不能同名;(2)外部循环必须完全包括内部循环;循环结构,补充示例:打印乘法表的以下形式。main()intx,y;对于(x=1;x=9;x)对于(y=1;y=9;y)printf(“% d * % d=-”,x,y,x * y);printf( n );下列由数字组成的金字塔图案可以通过编程进行打印和分析:打印的图案通常可以通过多个循环来实现,外部循环用于控制打印的行数,内部循环用于控制每行中的空格和字符数。印刷金字塔图案的程序如下:空隙率;对于(I=1;i=9。I )/*外环控制打印行*/对于(k=1;k=10-I;K )/*开始打印每行的位置*/printf();对于(j=1;j=2 * I-1;J )/*内部循环控制打印编号*/printf(“% c”,48i);printf( n );/*换行符*/),122233334444455555666666677777788888889999999999999,思考和讨论:1)如果程序中的值“10”改为“20”,程序输出有什么区别?如果更改为“5”,输出结果是什么?2)语句“是否可以打印(“%c”,48i);”更改为“printf(“% c”,0i);”?其他控制语句,6.8.1break语句,作用范围:switch语句或loop语句函数:跳出switch语句或跳出该层的循环,并切换执行以下程序。break语句的一般形式是:break;注意:break语句用于循环体,通常与if语句结合使用。例如,其他控制语句打印1 1000中的前10个数字,它们可以同时被3和5除。#includevoidmain()intk,n=0;对于(k=1;k=1000k)如果(k%3=0,其他控制语句,6.8.2continue语句,作用范围:只能在循环体函数中使用:结束该循环,并继续判断和执行下一个循环条件。其一般格式是:继续;注意:此语句仅在此级别结束循环,不会跳出循环。其他控制语句,例如:计算半径为1到15的圆的面积,并且只打印面积超过50的圆的面积。void main() intr;浮动区域;对于(r=1;r=15r)面积=3.141593 * r * r如果(区域50.0)继续;printf(square=%fn ,区域);,其他控制语句,main() intn;对于(n=7;n=100n )if(n%7!=0)继续;printf(“% d”,n);,main() intn;对于(n=7;n=100n) if(n % 7=0)printf(“% d”,n);,使用continue,不使用continue,break:语句只能在switch语句或loop语句中使用,其作用是跳出switch语句或跳出这一层循环,转而执行下面的程序。continue:结束循环,即停止执行循环体中continue语句之后的语句,继续判断和执行下一个循环条件。应该注意的是,该语句仅在此级别结束当前循环,不会跳出循环。break和continue之间的区别,其他控制语句,其他控制语句,goto语句(无条件转移语句),一般格式:goto语句标签;句子标签符合标识符书写的规则,起到识别句子的作用。例如:label:i。gotolabel注意:C语言不限制程序中使用的标签数量,但不能重复名称。其他控制语句,如统计从键盘输入的一行字符#包括 stdio . h void main() intn=0;printf( input string n );loop:if(getchar()!= n) n;gotoloop printf(“% d n”,n);注意:在结构化编程中,一般不推荐使用goto语句,以免造成程序流程混乱,使程序难以理解和调试。void main() intn=0;printf( input string n );while(getchar()!= n)n;printf(“% d n”,n);例如,#包括 math.h void main () intm,I,k;扫描函数(“%d”),示例6.8确定给定的整数是否是质数,应用示例,#包括“数学”。对于(m=100MK)printf(“% d n”,m);例如6.9为了找出100到200之间的所有质数,应用程序给出了一个例子,穷举方法的基本思想是逐一列出所有可能的情况,并判断哪些可能满足要求,voidmain()intx,y,z,n;printf( 5yun 1 yun 0.5 yun n );n=0;对于(x=1;x=100x)对于(y=1;y=100y)对于(z=1;z=100z)如果(x y z=100),例如:将面值为100元的人民币兑换成100张钞票,从5元、1元和0.5元,每张钞票必须不少于一张。有哪些组合?思考和讨论:上述算法在设计上效率低下。通过分析,应该注意到X的最大值应该小于20,并且Y的最大值应该是100-x,因为每个面额不小于1。同时,在X和Y固定之后,Z的值被确定:z=100-x-y,所以这个问题的算法可以用双环来实现。优化后的程序代码如下:例如,voidmain()intx,y,z,n;pri

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论