第六章循环控制 第6章第1节 (重点) C语言直接提供了三种构成循环的语句 1) while()语句 构成“当型循环” 2) do while()语句 构成“直到型循环” 3)for()语句 4)if语句和goto语句构成循环不推荐使用 §62g0to语句及goto语句构成的循环 goto语句的形式(goto又名“无条件转向语句”) goto语句标号 写在某一语句前,后面用冒号: 命名规则:与变量名相同 二.执行 当执行到goto语句时,转向语句标号所指向的其他语句,然后向 后执行
第6章 第1节 §6.2 goto 语句及goto语句构成的循环 C语言直接提供了三种构成循环的语句 1)while ( ) 语句 构成“当型循环” 2)do while( ) 语句 构成“直到型循环” 3)for( ) 语句 4) if 语句和goto语句构成循环 不推荐使用 一. goto 语句的形式 (goto——又名“无条件转向语句”) goto 语句标号 写在某一语句前,后面用冒号 : 命名规则:与变量名相同 二. 执行 当执行到goto 语句时,转向语句标号所指向的其他语句,然后向 后执行。 (重点)
第6章第2节 例:求∑n (0 main fint i, sum=0 ll:if(i<=100) isum+=i goto l1 printf(“sum=%dn”,sum); 说明 ).goto可以用于程序的任何地方。 2).“结构化程序设计”思想中,限制goto使用
第6章 第2节 三. 说明 1). goto 可以用于程序的任何地方。 2). “结构化程序设计”思想中,限制goto 使用。 100 n 例: 求 n main() {int i,sum=0; l1: if (i<=100) {sum+=i; i++; goto l1;} printf(“sum=%d\n”,sum); }
§63 while语句 第6章第3节 whl语句的形式 while(表达式)语句; 二, while语句的执行 循环体内容;可以 构成“当型循环” 是复合语句 表达式= 当表达式为真 ≠0 语句」 语句 例:求∑n 求:20 mainO main fint i=1 fint i=0, Sum=0; 注意边界 long int sum=l while(i<=100) while(i<=20 sumt=i; 等价于 isum*=i; 等价于 i++;} sum=sum+ i++;} summum* printf((“sum=%din”,um): printf((“sum=%dm”,sum);
第6章 第3节 一. while语句的形式 §6.3 while 语句 while (表达式) 语句; 二 . while语句的执行 构成“当型循环” 表达式 语句 =0 ≠0 语句 当 表达式为真 100 n 例:求 n main() { int i=0, sum=0; while(i<=100) {sum+=i; i++;} printf(“sum=%d\n”,sum); } main() { int i=1; long int sum=1; while(i<=20) {sum*=i; i++;} printf(“sum=%d\n”,sum); } 求: 20! 循环体内容; 可以 是复合语句 等价于 sum=sum+i 等价于 sum=sum*i 注意边界
第6章第3节 说明 1)如循环内容(循环体)为多条语句,应采用“复合语句” 2)必须控制循环次数(重要,即:循体中必须要有使循环趋于结束的语句 while(i=0&&c<=9)a2++; else if(==040)a3++ eIse a4++ printf(a1, a2, a3, a4=%d, %d, %d, %d", a1, a2, a3, a4)
三 说明: 1) 如循环内容(循环体)为多条语句, 应采用“复合语句” 2) 必须控制循环次数(重要), 即: 循体中必须要有使循环趋于结束的语句 第6章 第3节 while(i=‘A’ && c=‘a’ && c=‘0’ &&c<=‘9’) a2++; else if (c= =‘\040’ ) a3++ else a4++; } printf (“a1,a2,a3,a4=%d,%d,%d,%d”,a1,a2,a3,a4); }
第6章第4节 §64 do- while语句 一. do while语句的形式 do 循环体语句;} 循环体内容 可以复合语句 二. do whilei语句的执行 while(表达式 构成“直到型循环” 语句 循环体语句 表达式 直到表达式为假 例:求∑ 求:20! main( main fint i=l Rint i=0, sum=0; long int mul=l do do sum+=i; isum=l; i++;} i++;} while(i<=100 while(i<=20) printf((“sum=%dn”,sum); print(“mul=%dn”,mul);
第6章 第4节 一. do while语句的形式 §6.4 do—— while 语句 do 循环体语句; 二 while (表达式); . do while语句的执行 构成“直到型循环” 表达式 语句 =0 ≠0 直到 表达式为假 100 n 例:求 n main() { int i=0, sum=0; do {sum+=i; i++;} while(i<=100); printf(“sum=%d\n”,sum); } main() { int i=1; long int mul=1; do {sum*=i; i++;} while(i<=20); printf(“mul=%d\n”,mul); } 求: 20! 循环体语句 循环体内容, 可以复合语句
第6章第3节 说明: 1)如第一次循环条件成立,则whil(0与 do while等效 2)如循环内容(循环体)为多条语句,应采用“复合语句” 3)必须控制循环次数(重要,即:循体中必须要有使循环趋于结束的语句 do sumt=i; while(-=100;制循环次数的作起 “循环控制”变量 P3728(3输入10个数找出最大的一个数并打印出来 解:思考先输一个数,并认为其为当前最大数max,再输入第二个数与这个max比 较,如这第二个数比当前的max大,则将第二个数着为当前的max,再输入第三个 数.…,0如此进行,直到输完10个数为止。 do mainO scanf(“%r”,&x) Float x, max i+十; int i: f(x>max)max=x;(注意边界 scanf(“%r”,&x); whle(i<10); max-X printf((“max=%fn”,max);
三 说明: 1) 如第一次循环条件成立, 则while() 与 do while 等效 2) 如循环内容(循环体)为多条语句, 应采用“复合语句” 3) 必须控制循环次数(重要), 即: 循体中必须要有使循环趋于结束的语句 第6章 第3节 do {sum+=i; i++;} while(imax) max=x; } whle(i<10); printf(“max=%f\n”,max); } 注意边界!
第6章第5节 §65for语句 for语句的形式 for(表达式;表达式2;表达式3)语句; 二,for语句的执行 等价于: 表达式1 表达式1; 表达式 while(表达式2) 0 语句「 执行过程 {语句; 表达式3} 表达式3 实用形式 for(循环变量赋初值;循环条件;循环变量增值)语句;
第6章 第5节 一. for语句的形式 §6.5 for 语句 for(表达式1;表达式2;表达式3) 语句; 二 . for语句的执行 表达式1 表达式2 语句 表达式3 ≠0 =0 等价于: 表达式1; while( 表达式2) {语句; 表达式3;} 实用形式 for(循环变量赋初值; 循环条件; 循环变量增值) 语句; *执行过程 *
第6章第5节 100 例:求∑n 1)用 while语句 2)用 do while语句 main maIn 10 dint i=0, sum=0 f int i=0, sum=0; do while(i<=100) sum+=i; sumt+=l i++;} while(i<=100) printf(“sum=%dmn”,sum); printf((“sum=%dn”,sum) 3)用for(语句 mainO 循环完以后, fint i, sum 的值是多少8 sum=0 for(i=0;i<=100;i++) sum=sum+ print“sum,i=%d,%d”,sum,i);
100 n 例:求 n 3)用for( )语句 main() {int i, sum sum=0; for (i=0; i<=100; i++) sum=sum+i; printf(“sum,i=%d,%d”,sum,i); } 第6章 第5节 2)用do while语句 main() { int i=0, sum=0; do {sum+=i; i++;} while(i<=100); printf(“sum=%d\n”,sum); } 1)用while语句 main() { int i=0, sum=0; while(i<=100) {sum+=i; i++;} printf(“sum=%d\n”,sum); } 循环完以后, i 的值是多少?
第6章第5节 for语句的变化 1)for中的“表达式1”“表达式2”“表达式3”均可以省略,但分号;不能省 for(表达式1:表达式2表达式3)语句; ∫可省。如省略,应另加语句,给循环 变量增值 可省。如省略,则认为:表达式2恒为1 故要另外加入条件判断,控制循环。 可省。如省略,应另加语句,给循环 变量赋值 i=0: maIn 0 fint i, sum for(;i<=100;i++) sum=sum+ sumU; for(i=0;i<=100;i++ for(i=0;;i++) sumsumtl if (i<=100) sum=sum+i print(“sum=%d”,sum); else break for(i=0;i=100;) i sum=sum+ i++;}
第6章 第5节 三 . for语句的变化 1)for 中的 “表达式1” “表达式2” “表达式3”均可以省略,但分号;不能省 略for(表达式1;表达式2;表达式3) 语句; 可省。如省略,则认为: 表达式2恒为1 故要另外加入条件判断,控制循环。 可省。如省略,应另加语句,给循环 变量赋值 可省。如省略,应另加语句,给循环 变量增值 main() {int i, sum sum=0; for (i=0; i<=100; i++) sum=sum+i; printf(“sum=%d”,sum); } i=0; for ( ; i<=100; i++) sum=sum+i; for (i=0 ; ; i++) if (i<=100) sum=sum+i; else break; for (i=0 ; i<=100; ) { sum=sum+i; i++; }
2)for中的“表达式”“表达式2”“表达式3可以是任意一种表达式 例1 main 表达式 特别注 Rint i, sum for(sum=0,i=0;i=100;i+=1) sum=0 sum=sum+ for(i=0;i=sa',&&c≤=’z)al++; else if(c>=0&&c<=9)a2++; else if(c==1040)a3++ else a4++ }al,a2,a3,a4=%d,%d,%%d”,a1,2,a3,a4; prl
2)for 中的 “表达式1” “表达式2” “表达式3”可以是任意一种表达式 例 1 main() {int i, sum sum=0; for (i=0; i=‘A’ && c=‘a’ && c=‘0’ &&c<=‘9’) a2++; else if (c= =‘\040’ ) a3++ else a4++; } printf (“a1,a2,a3,a4=%d,%d,%d,%d”,a1,a2,a3,a4); } 特别注意 表达式1 (逗号) 表达式2(逻辑) 表达式 空