《循环嵌套break与continue循环小结》由会员分享,可在线阅读,更多相关《循环嵌套break与continue循环小结(18页珍藏版)》请在金锄头文库上搜索。
1、第7讲第第4 4章章 循环程序设计循环程序设计4.1 4.1 循环概述循环概述4.2 while4.2 while语句语句4.3 for4.3 for语句语句4.4 do4.4 dowhilewhile语句语句4.5 4.5 循环的嵌套循环的嵌套4.6 break4.6 break与与continuecontinue语句语句循环的嵌套循环的嵌套v三种循环可互相嵌套三种循环可互相嵌套, ,层数不限层数不限v外层循环可包含两个以上内循环外层循环可包含两个以上内循环, ,但不能相互交叉但不能相互交叉v嵌套循环的执行流程嵌套循环的执行流程(1) while() while() . (2) do do
2、while( ); . while( );(3) while() do while( ); . (4) for( ; ;) do while(); while() .内循环外循环内循环v嵌套循环的跳转嵌套循环的跳转禁止:禁止:l从外层跳入内层从外层跳入内层l跳入同层的另一循环跳入同层的另一循环l向上跳转向上跳转 辅助控制语句break语句v功能:在循环语句和switch语句中,终止并跳出循环体或开关体v说明:lbreak只能终止并跳出最近一层的结构lbreak不能用于循环语句和switch语句之外的任何其它语句之中exprbreak;假假(0)真真(非非0)whiledobreak;.expr
3、假假(0)真真(非非0)whileexpr2break;.假假(0)真真(非非0)forexpr1expr3switchexpr语句组语句组1break;语句组语句组2break;语句组语句组nbreak;语句组语句组break;.const 1const 2const ndefaultcase 例例 break举例:输出圆面积,面积大于举例:输出圆面积,面积大于100时停止时停止void main() int r; float area; for(r=1;r100)break; printf(r=%d,area=%.2fn,r,area); 例例 break举例:小写字母转换成大写字母举例:
4、小写字母转换成大写字母,直至输入非字母字符直至输入非字母字符#include void main() int i,j; char c; while(1) c=getchar(); if(c=a & c=z) putchar(c-a+A); else break; continue语句v功能:结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断v仅用于循环语句中exprcontinue;假(0)真(非0)while真(非0)docontinue;.expr假(0)whileexpr2continue;.假(0)真(非0)forexpr1expr3例例 求输入的十个整数中正数的
5、个数及其平均值求输入的十个整数中正数的个数及其平均值#include void main() int i,num=0,a; float sum=0; for(i=0;i10;i+) scanf(%d,&a);if(a=0) continue;num+;sum+=a; printf(%d plus integers sum :%6.0fn,num,sum); printf(Mean value:%6.2fn,sum/num);循环小结例:某个班有例:某个班有10个学生。已知他们参加某次考试个学生。已知他们参加某次考试的成绩(的成绩(0到到100之间的整数),求全班学生在这之间的整数),求全班学生
6、在这次考试中的总成绩。次考试中的总成绩。#include main() int counter,score,total=0; printf(Enter score:); for(counter=1;counter=10;counter+) scanf(%d,&score); total+=score; printf(Class average is %dn,total/10);例:某个班有若干个学生。已知他们参加某次考例:某个班有若干个学生。已知他们参加某次考试的成绩(试的成绩(0到到100之间的整数),求全班学生在之间的整数),求全班学生在这次考试中的总成绩。这次考试中的总成绩。#inclu
7、de void main() int counter=1, score, total=0; printf(Enter score,-1 to end:); scanf(%d,&score); while(score!=-1) total+=score; counter+; printf(“Enter score,-1 to end:”); scanf(“%d”,&score); printf(Class average is %d,total/(counter-1); 前面讨论了两种循环:前面讨论了两种循环: 1)计数器控制的循环)计数器控制的循环 2)标志控制的循环)标志控制的循环 因为我们
8、事先能够准确地知道计数器的循环会执行多少次,因为我们事先能够准确地知道计数器的循环会执行多少次,所以把计数器控制的循环有时称为所以把计数器控制的循环有时称为“定数循环定数循环”;因为我们;因为我们事先不知道标志控制的循环会执行多少次,所以把标记控制事先不知道标志控制的循环会执行多少次,所以把标记控制的循环有时称为的循环有时称为“不定数循环不定数循环”。 在计数器控制的循环中,控制变量用来计算循环的次数。在计数器控制的循环中,控制变量用来计算循环的次数。控制变量的值在每次执行完一组循环指令后递增(或递减)。控制变量的值在每次执行完一组循环指令后递增(或递减)。当控制变量的值表明达到了预定的循环次
9、数时,循环终止并当控制变量的值表明达到了预定的循环次数时,循环终止并继续执行循环结构后的语句。继续执行循环结构后的语句。 在如下情况下可用标记值控制循环过程:在如下情况下可用标记值控制循环过程: 1)事先不知道准确的循环次数)事先不知道准确的循环次数 2)循环体中包含每次循环都要获取数据的语句)循环体中包含每次循环都要获取数据的语句 标记值表示获取数据的结束。标记值是在所有合法数据标记值表示获取数据的结束。标记值是在所有合法数据项都提供给程序后键入的值。标记值必须不同于正常的数据项都提供给程序后键入的值。标记值必须不同于正常的数据项。项。例:协助破案。假设已经查清,有例:协助破案。假设已经查清
10、,有A、B、C、D、E五个嫌疑人可能参与制造了一起抢劫银行五个嫌疑人可能参与制造了一起抢劫银行案,但是不知道其中哪几个人是真正的案犯。案,但是不知道其中哪几个人是真正的案犯。不过,有确凿证据表明:不过,有确凿证据表明: 如果如果A参与了作案,则参与了作案,则B和和C一定会参与。一定会参与。 B和和C两人中只有一人参与了作案。两人中只有一人参与了作案。 C和和D要么都参与了作案,要么都没有参与。要么都参与了作案,要么都没有参与。 D和和E两人中至少有一人参与作案。两人中至少有一人参与作案。 如果如果E作案,则作案,则A和和D一定参与作案。一定参与作案。main() int a,b,c,d,e;
11、int count=0; for(a=0;a2;a+) for(b=0;b2;b+) for(c=0;c2;c+) for(d=0;d2;d+) for(e=0;e=1); count+=(e=0|(e=1&a=1&d=1); if(count=5) goto finish; finish: printf(Suspect a is %s.n,(a=1)?a criminal:not a criminal); printf(Suspect b is %s.n,(b=1)?a criminal:not a criminal); printf(Suspect c is %s.n,(c=1)?a cr
12、iminal:not a criminal); printf(Suspect d is %s.n,(d=1)?a criminal:not a criminal); printf(Suspect e is %s.n,(e=1)?a criminal:not a criminal);循环语句的效率循环语句的效率建议一:在多重嵌套循环中,如果有可能,应当将最长的循建议一:在多重嵌套循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,这样可以减少环放在最内层,最短的循环放在最外层,这样可以减少CPU跨切循环层的次数,从而优化程序的性能。跨切循环层的次数,从而优化程序的性能。for(
13、row=0;row100;row+) for(col=0;col5;col+) sum+=arowcol; for(col=0;col5;col+) for(row=0;col100;col+) sum+=arowcol; 循环语句的效率循环语句的效率建议二:如果循环体内存在逻辑判断,并且循环次数很大,建议二:如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断移到循环体的外面。宜将逻辑判断移到循环体的外面。for(i=0;iN;i+)if(conditon)DoSomething();elseDoSomething();if(condition)for(i=0;iN;i+) DoSomething();else for(i=0;iN;i+) DoSomething();