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