清华大学出版社 TSINGHUA UNIVERSITY PRESS 第6章循环控制 61概述 62goto语句以及用goo语句构成循环 63Whi|e语句 64 do while语句 6.5for语句 66循环的嵌套 67几种循环的比较 68 break语句和 continue语句 69程序举例 习题
6.1 概述 6.2 goto语句以及用goto语句构成循环 6.3 while语句 6.4 do while语句 6.5 for 语句 6.6 循环的嵌套 6.7 几种循环的比较 6.8 break语句和continue语句 6.9 程序举例 习题 第6章 循 环 控 制
清华大学出版社 TSINGHUA UNIVERSITY PRESS 6.概述 在许多问题中需要用到循环控制。例如,要输入全校学 生成绩;求若干个数之和;迭代求根等。几乎所有实 用的程序都包含循环。循环结构是结构化程序设计的 基本结构之一,它和顺序结构、选择结构共同作为各 种复杂程序的基本构造单元 因此熟练掌握选择结构和循环结构的概念及使用是程序 设计的最基本的要求 (1)用goto语句和语句构成循环; (2)用 while语句; (3)用 dowhile语句; (4)用for语句。 在下面各节中将分别作介绍
6.1 概述 在许多问题中需要用到循环控制。例如,要输入全校学 生成绩;求若干个数之和;迭代求根等。几乎所有实 用的程序都包含循环。循环结构是结构化程序设计的 基本结构之一,它和顺序结构、选择结构共同作为各 种复杂程序的基本构造单元。 因此熟练掌握选择结构和循环结构的概念及使用是程序 设计的最基本的要求。 (1) 用goto语句和if语句构成循环; (2) 用while语句; (3) 用do\|while语句; (4) 用for语句。 在下面各节中将分别作介绍
清华大学出版社 TSINGHUA UNIVERSITY PRESS 62goto语句以及用goto语句构成循环 goto语句为无条件转向语句,它的一般形式为 goto语句标号; 语句标号用标识符表示,它的定名规则与变量名相 同,即由字母、数字和下划线组成,其第一个字符 必须为字母或下划线。不能用整数来做标号。例如: goto label-1; 是合法的,而 goto 123 是不合法的。结构化程序设计方法主张限制使用goto 语句,因为滥用goto语句将使程序流程无规律
6.2 goto语句以及用goto语句构成循环 goto语句为无条件转向语句,它的一般形式为 goto语句标号; 语句标号用标识符表示,它的定名规则与变量名相 同,即由字母、数字和下划线组成,其第一个字符 必须为字母或下划线。不能用整数来做标号。例如: goto label-1; 是合法的,而 goto 123; 是不合法的。结构化程序设计方法主张限制使用goto 语句,因为滥用goto语句将使程序流程无规律
清华大学出版社 TSINGHUA UNIVERSITY PRESS 可读性差。但也不是绝对禁止使用goto语句。一般 来说,可以有两种用途: (1)与语句一起构成循环结构; (2)从循环体中跳转到循环体外,但在c语言中可以 用 break语句和 continue语句(见68节)跳出本层循 环和结束本次循环。g0t语句的使用机会已大大减 少,只是需要从多层循环的内层循环跳到外层循 环外时才用到goto语句。但是这种用法不符合结构 化原则,一般不宜采用,只有在不得已时(例如能 大大提高效率)使用
可读性差。但也不是绝对禁止使用goto语句。一般 来说,可以有两种用途: (1) 与if语句一起构成循环结构; (2) 从循环体中跳转到循环体外,但在c语言中可以 用break语句和continue语句(见6.8节)跳出本层循 环和结束本次循环。goto语句的使用机会已大大减 少,只是需要从多层循环的内层循环跳到外层循 环外时才用到goto语句。但是这种用法不符合结构 化原则,一般不宜采用,只有在不得已时(例如能 大大提高效率)才使用
清华大学出版社 TSINGHUA UNIVERSITY PRESS 例6,1用语句和goto语句构成循环,求∑n 此问题的算法是比较简单的,可以直接写出程序: main( int i, sum=( i=1; loop: if(i<=100 i sum=sum+i; i++; goto loop; 1 printf("ood", sum);
例6.1用if语句和goto语句构成循环,求∑n。 此问题的算法是比较简单的,可以直接写出程序: main( ) { int i, sum=0; i=1; loop: if(i<=100) { sum=sum+i; i++; goto loop;} printf("%d",sum); } 100 n=1
清华大学出版社 TSINGHUA UNIVERSITY PRESS 运行结果如下: 5050 这里用的是“当型”循环结构,当满足“i=100时 执行花括弧内的循环体。请读者自己画出流程图 6.3 while语句 while语句用来实现“当型”循环结构。其一般形式 如下: while(表达式)语句
运行结果如下: 5050 这里用的是“当型”循环结构,当满足“i<=100” 时 执行花括弧内的循环体。请读者自己画出流程图。 6.3 while语句 while语句用来实现“当型”循环结构。其一般形式 如下: while (表达式) 语句
清华大学出版社 TSINGHUA UNIVERSITY PRESS 当表达式为非0值时,执行whil语句中的内嵌语句。 其流程图见图6.1。其特点是:先判断表达式,后 执行语句。 表达式0 i≤100 假 非 真 语句 i≤100 sum=sum+i i=i+1 sum=sum 图61 (b) 图62
当表达式为非0值时,执行while语句中的内嵌语句。 其流程图见图6.1。其特点是:先判断表达式,后 执行语句。 图6.1 图6.2
清华大学出版社 TSINGHUA UNIVERSITY PRESS 例62求∑n,用传统流程图和NS结构流程图表示算法,见 图62图62(b)。 根据流程图写出程序: maino int i, sum=0 while (i<=100) sum=sum+i; i++; printf("%od", sum);
例6.2求∑n。用传统流程图和N S结构流程图表示算法,见 图6.2(a)和图6.2(b)。 根据流程图写出程序: main() { int i,sum=0; i=1; while (i<=100) { sum=sum+i; i++; } printf("%d",sum); } 100 n=1
清华大学出版社 TSINGHUA UNIVERSITY PRESS 需要注意: (1)循环体如果包含一个以上的语句,应该用花括 弧括起来,以复合语句形式出现。如果不加花括 弧,则 while语句的范围只到whle后面第一个分号 处。例如,本例中 while语句中如无花括弧,则 while语句范围只到“sum=sum+i;”。 (2)在循环体中应有使循环趋向于结束的语句。例 如,在本例中循环结束的条件是“讠>100”,因此在 循环体中应该有使i增值以最终导致讠100的语句, 今用“计++;”语句来达到此目的。如果无此语句, 则i值始终不改变,循环永不结束
需要注意: (1) 循环体如果包含一个以上的语句,应该用花括 弧括起来,以复合语句形式出现。如果不加花括 弧,则while语句的范围只到while后面第一个分号 处。例如,本例中while语句中如无花括弧,则 while语句范围只到“sum=sum+i;”。 (2) 在循环体中应有使循环趋向于结束的语句。例 如,在本例中循环结束的条件是“i>100”,因此在 循环体中应该有使i增值以最终导致i>100的语句, 今用“i++;”语句来达到此目的。如果无此语句, 则i的值始终不改变,循环永不结束
清华大学出版社 TSINGHUA UNIVERSITY PRESS 64 do while语句 do while语句的特点是先执行循环体,然后判断循环 条件是否成立。其一般形式为 do 循环体语句 while(表达式); 它是这样执行的:先执行一次指定的循环体语句, 然后判别表达式,当表达式的值为非零(“真”)时 返回重新执行循环体语句,如此反复,直到表达 式的值等于0为止,此时循环结束。可以用图63表 示其流程。请注意 do while循环用NS流程图的 表示形式(图63(b)
6.4 do while语句 do while语句的特点是先执行循环体,然后判断循环 条件是否成立。其一般形式为 do 循环体语句 while (表达式); 它是这样执行的:先执行一次指定的循环体语句, 然后判别表达式,当表达式的值为非零(“真”) 时, 返回重新执行循环体语句,如此反复,直到表达 式的值等于0为止,此时循环结束。可以用图6.3表 示其流程。请注意do while循环用N S流程图的 表示形式(图6.3(b))