《循环结构设计》PPT课件.ppt
1,第6章 循环结构设计,任课教师张 盈教案制作 张 盈,2,本章主要内容,C语言中的三种循环语句:while语句(当型)dowhile语句(直到型)for语句(当型)循环体中的辅助控制语句:break语句continue 语句goto 语句,本章是全书的重点和难点!,3,while 语句“当型”循环结构,一般形式:while(表达式)语句说明:“表达式”为循环条件;“语句”为循环体。特点:先判断表达式,后执行语句,图6_1,【例6.1】求。,图6_2,5,main()int i=1,sum=0;while(i=100)sum=sum+i;i+;printf(%d n,sum);,编程求解:1+2+3+100?,图6_2,“i1”可否换成:“i0”,6,注意:,while语句中的“表达式”(即判断条件)可以是任意的表达式,但一般为关系表达式或逻辑表达式。循环体如果包含一个以上的语句,应该用花括弧括起来,以复合语句形式出现。在循环体中应有使循环趋向于结束的语句,以免形成死循环。允许循环体以空语句形式出现。,7,【例6.2】求2n。,main()int i=1,n;long int p=1;scanf(%d,图6_3,8,dowhile 语句“直到型”循环结构,一般形式:do 语句while(表达式);特点:先执行一次指定的循环内嵌语句,然后判断条件表达式。,图6_4,【例6.3】,#include main()char c;do c=getchar();if(c=A,将键盘输入字符中所有大写字母转换为小写字母,其他字符不变。,10,for 语句“当型”循环结构,一般形式:for(表达式1;表达式2;表达式3)语句说明:表达式1:循环变量赋初始值表达式2:循环条件表达式3:循环变量增值语句:循环体,图6_5,11,【例6.4】求。(改【例6.1】),main()int i,sum=0;for(i=1;i=100;i+)sum=sum+i;printf(%d n,sum);,12,三种循环的比较:,三种循环都可以用来处理同一问题,一般情况下它们可以互相代替。用while和do while循环时,循环变量初始化的操作在while 和do while语句前完成;for语句可以在表达式1中完成。,13,三种循环的比较(续):,while和do while循环只在while后面指定循环条件,且在循环体中应包含使循环趋于结束的语句;for循环可以在表达式3中包含使循环趋于结束的操作,甚至可以将循环体中的操作全部放到表达式3中,功能更强。while 和for循环是先判断表达式,后执行语句;do while循环是先执行语句后判断表达式。,14,循环的嵌套,定义:一个循环体中又包含一个完整的循环结构,称为循环的嵌套。说明:while 循环、do while循环和 for循环都可以进行嵌套,而且可以相互嵌套。,几种合法的嵌套结构:,16,使用循环嵌套时注意:,要保证嵌套的每一层循环在逻辑上都是完整的,避免嵌套交叉使用。要保证循环到最后有一个跳出循环的条件,否则会产生死循环(嵌套循环中检查死循环错误,相对来说比较困难)。在编程时,注意循环嵌套的书写最好用阶梯缩进的形式,可使程序层次分明。,main()int i,j;printf(n);for(i=1;i=9;i+)printf(%4d,i);printf(n-);for(i=1;i=9;i+)printf(n%4d,i);for(j=1;j=i;j+)printf(%4d,i*j);,【例6.5】输出九九表。,1 2 3 4 5 6 7 8 9-1 1 2 2 4 3 3 6 9 4 4 8 12 16 5 5 10 15 20 25 6 6 12 18 24 30 36 7 7 14 21 28 35 42 49 8 8 16 24 32 40 48 56 64 9 9 18 27 36 45 54 63 72 81,break 语句无条件转移语句,一般形式:break;功能:用在switch语句中使流程跳出switch结构,继续执行switch语句后面的语句。用在循环体内,迫使所在循环立即终止(跳出当前循环体),继续执行循环体后面的第一条语句。说明:break语句不能用于循环语句和switch语句之外的任何其他语句中。,19,【例6.6】把数316分为两个数之和,其中一个为13的倍数,一个为11的倍数。,main()int i=0;for(;i+)if(!(316-i*13)%11)break;printf(13*%d+11*%d=316n,i,(316-13*i)/11);,continue语句无条件转移语句,一般形式:continue;功能:结束本次循环(跳过循环体中尚未执行的语句),接着进行是否执行下一次循环的判定。continue和break的区别:continue只结束本次循环,而非终止整个循环。break则是结束所在循环,不再进行条件判断。,【例6.7】输出100200之间所有不能被3整除的数。,main()int n,count=0;for(n=100;n=200;n+)if(n%3=0)continue;printf(%4d,n);count+;if(count%10=0)printf(n);,换成什么,可不改变结果?,22,goto 语句,一般形式:goto 语句标号;说明:goto为无条件转向语句。语句标号必须是合法的标识符。不能用整数作标号。用途:与if语句一起构成循环结构;从多层循环体的内层循环跳到外层循环。,结构化程序设计方法主张限制使用goto语句,因为滥用goto语句将使程序流程无规律、可读性差,只有不得已(如能大大提高效率)时才能使用goto!,【例6.8】用if和goto语句构成循环,求。,main()int i=1,sum=0;loop:if(i=100)sum=sum+i;i+;goto loop;printf(Sum=%d,sum);,24,homework,阅读并上机运行本章的程序例题,要求理解.习题15,填在书上;习题614,存在软磁盘上。,