第6章循环控制
第6章 循环控制
61概述 在上一章中我们已经学习了算法的选择结构的C语言 程序实现及其程序流程控制转移方式。本章将讨论最后 种算法的基本结构—循环结构的C语言程序实现及其 程序流程控制转移方式—循环控制。 所谓循环控制,即满足一个指定的条件,每次使用不 同的数据,对程序中的计算或处理步骤完全相同的程序 段,重复计算若干次的程序控制
6.1 概述 在上一章中,我们已经学习了算法的选择结构的C语言 程序实现及其程序流程控制转移方式。本章将讨论最后 一种算法的基本结构──循环结构的C语言程序实现及其 程序流程控制转移方式──循环控制。 所谓循环控制,即满足一个指定的条件,每次使用不 同的数据,对程序中的计算或处理步骤完全相同的程序 段,重复计算若干次的程序控制
如计算5!,若用顺序结构实现: ints=1, t=1 s=s*t: t++ s=st.t++ s=s*t: t++ t;t++ s=s"t printf(“%d”,s); 在该程序段中,语句s=s*t;t++;连续执行了四次, 而且每次使用的s和的值都不同,这就构成了循环的条件。 因此,程序应该使用循环控制方式来实现
int s=1 , t=1; s=s*t; t++; s=s*t; t++; s=s*t; t++; s=s*t; t++; s=s*t; printf(“%d” , s); 如计算5!,若用顺序结构实现: 在该程序段中,语句 s=s*t;t++;连续执行了四次, 而且每次使用的s 和t的值都不同,这就构成了循环的条件。 因此,程序应该使用循环控制方式来实现
上面的程序如果用C语言的循环结构来实现,可以写成 如下简单形式: int s=l t=1 while(t<=5) s=s* t++ printf(“%d”,s); 很明显,这样的程序不仅简单,而且逻辑性更强
int s=1,t=1; while ( t<=5 ) { s=s*t ; t++ ; } printf(“%d” , s); 上面的程序如果用C语言的循环结构来实现,可以写成 如下简单形式: 很明显, 这样的程序不仅简单, 而且逻辑性更强
62goto语句以及用goto语句构成循环 选择控制和循环控制都依赖于条件测试,条件测试 的结果决定了程序执行的方向或路径,所以它们都是有 条件的程序控制转移。 相应的,在计算机程序设计语言中还提供另一类程 序流程控制语句一转向语句。用这类语句来实现程 序的控制转移不依赖于任何条件,故称之为无条件控制 转移。 本节讨论实现程序的无条件控制转移的goto语句的 使用
6.2 goto 语句以及用 goto 语句构成循环 选择控制和循环控制都依赖于条件测试, 条件测试 的结果决定了程序执行的方向或路径,所以它们都是有 条件的程序控制转移。 相应的,在计算机程序设计语言中还提供另一类程 序流程控制语句 ── 转向语句。 用这类语句来实现程 序的控制转移不依赖于任何条件,故称之为无条件控制 转移。 本节讨论实现程序的无条件控制转移的goto语句的 使用
1、goto语句格式 goto语句标号 2、执行与功能 无条件地转向语句标号后的语句处执行。 3、语句标号飛式 标号: a)按标识符规则直接定义不需进行说明; b):号不属于标号作为标号与语句间的分隔符 )标号用来标识函数中的某个位置,作为g0to语句的 转向目标; d)标号的作用域是所在函数,同一函数中的所有标号 不能相同,但可与函数中的变量名同名,不会产生冲突;
1、goto 语句格式 goto 语句标号 2、执行与功能 无条件地转向语句标号后的语句处执行。 3、语句标号形式 标号: a) 按标识符规则直接定义,不需进行说明; b) :号不属于标号,作为标号与语句间的分隔符; d) 标号的作用域是所在函数,同一函数中的所有标号 不能相同,但可与函数中的变量名同名,不会产生冲突; c) 标号用来标识函数中的某个位置,作为goto 语句的 转向目标;
e)不可以从一个函数中用goto语句转向另一函数中去 执行;但可转到本函数中的任何地方(包括循环语句、if 语句、swch语句、复合语句中),并从那一点继续执行下 去,且按原语句的功能控制程序的执行。 4、用goto语句和语句实现循环 in t s=1,t=1; in t s=1,t=1 while〔t<=5) loop:ir〔t<=5) t s=s*t t++; p printf〔”%d”,s); printf〔”%d
e) 不可以从一个函数中用 goto 语句转向另一函数中去 执行; 但可转到本函数中的任何地方 ( 包括循环语句、 if 语句、switch语句、复合语句中 ),并从那一点继续执行下 去,且按原语句的功能控制程序的执行。 4、用 goto 语句和 if 语句实现循环
63 while语句 while wi环语句是一种“当型”循环语句。所谓“当 型”循环,亦即当某个给定的条件成立时执行循环体,否 则停止循环的执行。 l、 while语句格式 while (e) 语句 其中的“e”可为任何表达式必须括在小括号中它 的值作为 while循环继续与否的判断条件。在小括号后不 能加分号。最简单的表达式可以是一个单一的常数
6.3 while 语句 while 循环语句是一种“当型”循环语句。所谓“当 型” 循环, 亦即当某个给定的条件成立时执行循环体,否 则停止循环的执行。 1、 while 语句格式 while(e) 语句 其中的 “ e” 可为任何表达式,必须括在小括号中,它 的值作为while循环继续与否的判断条件。 在小括号后不 能加分号。 最简单的表达式可以是一个单一的常数
下面列出的表达式都可以作为whie循环的判断条件 ((ch=getchar()!='A) ((( =0) x==0) xx) (! “语句”部分即为 while循环要重复执行的循环体 在这个位置上仅能是一条C语言语句,也可以是一条空 语句(仅有一个分号,表示循环体为空)。使用复合语 句则能重复执行一组语句
下面列出的表达式都可以作为while循环的判断条件。 ( ( ch=getchar ( ) ) != ‘A’ ) ( x!=0 ) ( x==0 ) ( x ) ( !x ) ( 1 ) “语句” 部分即为 while 循环要重复执行的循环体。 在这个位置上仅能是一条C语言语句,也可以是一条空 语句(仅有一个分号,表示循环体为空)。使用复合语 句则能重复执行一组语句
2、whil语句执行过程及功能 首先对括号中的表达式“e”求值,若其值为真(非 0),执行循环体语句,否则(表达式值为0)结束并退出 while循环语句。下图描述了这个执行过程。 计算e的值 假 非0 语句
2、while语句执行过程及功能 首先对括号中的表达式 “ e” 求值,若其值为真(非 0),执行循环体语句,否则(表达式值为0)结束并退出 while循环语句。下图描述了这个执行过程。 e 非 0 ? 语句 真 假 计算e的值