第六章循环控制设计 本章重点 循环结束条件设置 for语句、 while语句、do- while语句三种循环语句的比较 break语句、 continue语句 for语句 for语句的一般形式 for(表达式1;表达式2;表达式3)语句 循环变量赋初值循环终止条件循环变量增量 循环变量赋初值 循环变量达到终值吗? 执行循环体中的语句 循环变量加上增量 例6.1求1+2+3+.+100 main( int n sum sum=0 for(=1<=100;1++)sum=sum+ printf( the sum is%d\n,, sum) 2.For语句说明 ●赋初值可以省略,但分号不能省略 tn for( K<=100; 1++)sum=sum+l' ●如果循环终止条件省略,则无限循环。 如:for(i=1;计++)sum=sum+1
第六章 循环控制设计 本章重点: ⚫ 循环结束条件设置 ⚫ for 语句、while 语句、do-while 语句三种循环语句的比较 ⚫ break 语句、continue 语句 ⚫ 6.1 for 语句 1. for 语句的一般形式 例 6.1 求 1+2+3+….+100 main( ) { int n,sum; sum=0; for (i=1;i<=100;i++) sum=sum+i; printf(“the sum is %d\n”,sum); } 2.For 语句说明: ⚫ 赋初值可以省略,但分号不能省略。 如:for (; i<=100;i++) sum=sum+i; ⚫ 如果循环终止条件省略,则无限循环。 如:for (i=1; ; i++) sum=sum+1;
●如果循环变量增量部份省略,必须在程序的其他地方有 修改循环变量的语句,否则无法保证循环正常结束 :for(=1;ib&&x<y;) 3)字符表达式 for((c=getchar!="n,) printf( %oc”,c) 4) break语句跳出循环。 for(sum=0; 1++) sum=sum+ if (1<=100) break 62 while语句 1. while语句用来实现“当循环 般形式如下: while(表达式)语句 表达式为真时(非0值),执行whle语句的内嵌语句 2说明: ①whle循环表示当条件表达式的值为真时,便执行语句。直到 条件为假才结束循环。并继续执行循环程序外的后续语句。 ②语句可以是语句体,此时必须用"{"和"}"括起来。 ③条件表达式可为任意式子。在语句体中要有使得条件表达式为 假值的语句,否则进入死循环 [例6.2]求1+2+3+…+100
⚫ 如果循环变量增量部份省略,必须在程序的其他地方有 修改循环变量的语句,否则无法保证循环正常结束 如:for (i=1;ib && x<y ;) 3) 字符表达式: for (; (c=getchar()) != ‘\n’;) printf(“%c”,c); 4)break 语句跳出循环。 for (sum=0;; i++) { sum=sum+i; if (i<=100) break; } 6.2 while 语句 1.while 语句用来实现“当循环” 一般形式如下: while (表达式) 语句 表达式为真时(非 0 值),执行 while 语句的内嵌语句。 2.说明: ① while 循环表示当条件表达式的值为真时, 便执行语句。直到 条件为假才结束循环。 并继续执行循环程序外的后续语句。 ② 语句可以是语句体, 此时必须用"{"和"}"括起来。 ③条件表达式可为任意式子。在语句体中要有使得条件表达式为 假值的语句,否则进入死循环。 [例 6.2] 求 1+2+3+….+100
i=1 main i<=100 I int if1, sumo while(i=100) sum-sumtl [ sum=sum+i i=1+1 printf(“%”,sum); 输出sum 6.3d0-whle语句 1. do-while循环的一般格式为 do 语句 while(条件) 2.说明 ①它先执行循环中的语句,然后再判断条件是否为真,如果为 真则继续循环;如果为假,则终止循环。因此,do- while循环至少要执 行一次循环语句。 ②当有许多语句参加循环时,要用"{"和"}"把它们括起来 例63求1+2+3+……+100的值 maino int i sum=0: 1=1 sum=sum+1: 1++ } while(<=100) printf(“%d” sum (1)do-whle结构至少要执行一次循环体 (2)一般情况下,处理同一问题时,若二者的循环体部分是一样 的,它们的结果也是一样。但若whle后面的表达式一开始就为假时, 两种循环的结果就不
6.3 do-while 语句 1.do-while 循环的一般格式为: do 语句; while(条件); 2.说明: ① 它先执行循环中的语句, 然后再判断条件是否为真, 如果为 真则继续循环; 如果为假, 则终止循环。因此, do-while 循环至少要执 行一次循环语句。 ②当有许多语句参加循环时, 要用"{"和"}"把它们括起来。 例 6.3 求 1+2+3+‥‥+100 的值。 main() { int i, sum=0; i=1; do { sum=sum+i; i++; } while (i<=100); printf(“%d”,sum) } (1) do-while 结构至少要执行一次循环体。 (2)一般情况下,处理同一问题时,若二者的循环体部分是一样 的,它们的结果也是一样。但若 while 后面的表达式一开始就为假时, 两种循环的结果就不
6.4循环的嵌套 whle、do- while、for可以有多层嵌套。 即在 while、do- while、for的循环体中可内嵌一个循环语句。 maino L,j, k printf("ijkn): for(i=0;i<2;i++) for(=0;j2;j++) for(k=0;k<2;k++) printf(%od%d%odn,1,1,k) 输出结果为 k 00 0000 01 0 1 100 101 0 例64打印九九表(三角形) maino i int printf ("n") for(i=1;i<=9;i+) for(j=l; j<=i; j++) printf(%d%d=%2d,i,j, i*j) printf("Ⅶn"); 注:程序中用Ⅰ控件行数,用J控件打印个数。 ☆☆只有内循环J循环一遍后,外循环I才改变一次。☆☆
6.4 循环的嵌套 while、do –while 、for 可以有多层嵌套。 即在 while、do –while 、for 的循环体中可内嵌一个循环语句。 main() { int i, j, k; printf("i j k\n"); for (i=0; i<2; i++) for(j=0; j<2; j++) for(k=0; k<2; k++) printf(%d %d %d\n", i, j, k); } 输出结果为: i j k 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 例 6.4 打印九九表(三角形) main() { int i,j; printf("\n"); for(i=1;i<=9;i++) { for(j=1;j<=i;j++) printf("%d*%d=%2d ",i,j,i*j); printf("\n"); } } 注:程序中用 I 控件行数,用 J 控件打印个数。 ☆☆只有内循环 J 循环一遍后,外循环 I 才改变一次。☆☆
6.5 break语句和 ontinue语句 1. break语句 (1) break语句格式: break (2) break语句通常用在循环语句和开关语句中。当 break用于 开关语句 switch中时,可使程序跳出 switch而执行 switch以后的语句 (3)当 break语句用于do- while、for、 while循环语句中时,可 使程序终止循环而执行循环后面的语句,通常 break语句总是与i语 句联在一起。即满足条件时便跳出循环。 例6.5:统计输入字符个数,直到输入ESc键结束输入。 maino int i =0 while(1) /*设置循环* *变量赋初值* while(c!=13&&c!=27)/*键盘接收字符直到按回车或FSc键* c=getchO printf("%ocn,c) if(c==13)l-- fc=27){i-; break;}*判断若按Fsc键则退出循环* printf("The No is %dn",1) printf(" The end); 注意 ①. break语句对 if-else的条件语句不起作用。 ②.在多层循环中,一个 break语句只向外跳一层 2. continue语句 (1)格式: continue: (2) continue语句的作用是跳过循环本中剩余的语句而强行执行 下一次循环
6.5 break 语句和 ontinue 语句 1.break 语句 (1)break 语句格式: break ; (2) break 语句通常用在循环语句和开关语句中。当 break 用于 开关语句switch 中时, 可使程序跳出switch而执行switch 以后的语句; (3)当 break 语句用于 do-while、for、while 循环语句中时, 可 使程序终止循环而执行循环后面的语句, 通常 break 语句总是与 if 语 句联在一起。 即满足条件时便跳出循环。 例 6.5: 统计输入字符个数,直到输入 Esc 键结束输入。 main() { int i=0; char c; while(1) /*设置循环*/ { c='\0'; /*变量赋初值*/ while(c!=13&&c!=27) /*键盘接收字符直到按回车或Esc键*/ { c=getch(); printf("%c\n", c); i++; } if(c==13) i--; if(c==27) {i--; break;} *判断若按 Esc 键则退出循环*/ printf("The No. is %d\n", i); } printf("The end"); } 注意: ①. break 语句对 if-else 的条件语句不起作用。 ②. 在多层循环中, 一个 break 语句只向外跳一层。 2. continue 语句 (1)格式: continue; (2) continue 语句的作用是跳过循环本中剩余的语句而强行执行 下一次循环
(3) continue语句只用在for、whle、do- while等循环体中,常与 if条件语句一起使用,用来加速循环。 例66把100-200之间的不能被3整除的数输出 Maino intn for(n=100n‘a&&eA&&c<Z)
(3) continue 语句只用在 for、while、do-while 等循环体中, 常与 if 条件语句一 起使用, 用来加速循环。 例 6.6 把 100-200 之间的不能被 3 整除的数输出 Main() { int n; for (n=100;n‘a’ &&c ‘A’&& c<‘Z’)