Download presentation
Presentation is loading. Please wait.
1
第六章 循环控制
2
§6.1 概述 循环:反复执行称为“循环体”的程序段的过程。 循环控制常用于数学迭代、对象遍历等问 题的求解,几乎所有实用程序都包含循环。
C语言中用如下语句实现循环: 1、用goto语句和if语句构成循环。 2、用while语句构成循环。 3、用do-while语句构成循环。 4、用for语句构成循环。
3
§6.2 goto语句 一般形式: goto 语句标号 作 用: 无条件转向“语句标号”处执行。 “语句标号”是一个标识符,它表示程序指令
作 用: 无条件转向“语句标号”处执行。 “语句标号”是一个标识符,它表示程序指令 的地址。这个标号不能是数字。 结构化程序设计方法主张限制使用goto语句。 goto语句有两种用途: 一是与if语句一起构成循环结构; 二是从循环体中跳转到循环体外。Break和continue
4
loop: if (i <= 100) /*标号表示程序指令的地址,当i≤100时,执行加法 */ { sum = sum+ i;
[例6.2] 用If语句和goto语句构成循环 sum=sum+i i=i+1 i<=100 假 真 i=1,sum=0 main() { int i,sum=0; i = 1; loop: if (i <= 100) /*标号表示程序指令的地址,当i≤100时,执行加法 */ { sum = sum+ i; i++; goto loop; /*无条件转向标号loop处的指令 */ } printf("%d",sum);
5
§6.3 while语句 一般形式:while (表达式) 语句 作用:实现“当型”循环。 当“表达式”非0(真)时,
“语句”是被循环执行的程序,称 为“循环体”。 特点:先判“表达式(条件)”,后执行语句。 循环体如果包含一个以上的语句,应该以复 合语句形式出现。 在循环体中应有使循环趋向于结束的语句。 语句 表达式 假 真
6
[例6.3] 用while循环实现1~100的累加。 main() { int i,sum=0; /*为循环赋初值 */ i = 1; while (i <= 100) /*“当型”循环*/ sum = sum + i; i++; /* 使循环趋于结束*/ } printf("%d",sum);
7
§6.4 do-while语句 一般形式: do 语句 while (表达式) 特点:“直到型”循环结构。
先执行一次“语句”,再判别“表达式”。当“表达式” 为非0时,再执行“语句”,直到“表达式”为0时,循 环结束。 语句 条件P 非0
8
main() { int i,sum=0; i = 1; do { sum = sum + i; i++; }
[例6.4] 用d0_while循环实现1~100的累加。 main() { int i,sum=0; i = 1; do { sum = sum + i; i++; } while (i<=100); printf("%d",sum);
9
§6.5 for 语句 for语句常用于循环次数已知的循环控制; 也可以用于循环次数不确定而只给出循环结束条件的
情况,它完全可以代替while语句。 一般形式: for(表达式1;表达式2;表达式3) 语 句 循环初始条件 判别循环条件 修改循环条件 执行过程: (1)求表达式1; (2)求表达式2,若为“真”,执行“语句”; 若为假,转第(5)步。 (3)求表达式3。 (4)转第(2)步。 (5)执行for语句以外的语句。
10
for (i=1;i<=100;i++) sum = sum + i;
变量”。 这是for语句的典型用法:已知循环次数。 (本例100次)
11
main() { int i,sum=0; for(i=1;i<=100;i++) sum=sum+i;
printf("%d\n",sum); } i = 1; while (i <= 100) { sum = sum + i; i++; }
12
关于For语句的几点说明: 1、for语句中的“表达式1”可以省略,此时应在for语句之前给循环变量赋初值,否则不执行for循环。
真,将无限循环。例如:for(i=1; ;i++) sum=sum+i; 它相当于: i=1; while(1) {sum=sum+1; i++;} 3、 for语句中的“表达式3”也可以省略,但此时程序员应设 法保证循环能正常结束。如: for(i=1;i<=100; ) 否则将无限循环。 { sum=sum+i; i++; }
13
4、for语句中的表达式1、3省略,只有表达式2,即只给出循环的条件,如无初值,for 将不执行,后者将出错。
for(;i<=100;) while(i<=100) { sum=sum+i; { sum=sum+i; i++; } i++; } 5、 for语句中的三个表达式都省略,如:for( ; ; ) 相当于:while(1) 无终止的执行循环体。 6、表达式1可以是设置循环变量初值的赋值表达式,也可以 是其他与循环无关的表达式。 如: for(sum=0,i=1;i<=100;i++,j- - ) sum=sum+i; 7、表达式一般是关系表达式(如i<=100)或逻辑表达式 (如s<b && x<y),也可以是数值表达式或字符表达式。
14
例:表达式1、表达式3是空语句。 #include <stdio.h> main() { char c;
for ( ;(c=getchar())!=‘\n’; ) printf(“%c”,c); } 运行: computer ↙ (输入) computer (输出) 输出c
15
§6.8 break语句和continue语句 一、break语句 作用:跳出所在的多分支switch语句,跳出所在
的while、do-while、for循环语句(提前结束循 环)。 #define pi 3.14 main() { int r; float area; for (r=1;r<=10;r++) { area = pi*r*r; if (area > 100) break; printf("%d,%6.2f\n",r,area); } #include "stdio.h" main() { char grade; printf(“请输入学生的等级:"); scanf("%c\n",&grade); switch (grade) { case 'A':printf("85~100\n");break; case 'B':printf("70~84\n");break; case 'C':printf("60~69\n");break; case 'D':printf("<60\n");break; default: printf("error\n"); } } 当r=6时,area>100,执行 break语句,提前结束循环, 不再计算r =7~10的area。 运行结果:
16
§6.8 break语句和continue语句 二、continue语句 作用:提前结束本次循环体的执行,接着进行下 一次循环条件的判别。
[例5.5] 把100~200之间不能被3整除的数输出。 main () { int n; for (n=100; n<=200; n++) { if (n%3 == 0) continue; printf("%d",n); } 当n能被3整除时,执行continue 语句,结束执行本次循环的循环 体,即跳过printf语句。
17
三、break语句和continue语句的区别
while (表达式1) while (表达式1) { ┇ { ┇ if (表达式2) if (表达式2) break; continue; ┇ ┇ } } break语句跳出循环 continue语句结束本次 循环体的执行,进入下 一次循环
18
课堂练习 例、小游戏猜数字 main( ) { int x=67,y;
printf(“Please input a number: \n”); scanf(“%d”,&y); if (y<x) { printf(“It is smaller!\n”); goto loop; } if (y>x) { printf(“It is bigger!\n”); goto loop; } if (y==x) printf(“It is ok!\n”); } loop:
Similar presentations