为正确书写if语句,特别说明以下几点:
(1)若if语句中的语句、语句1、语句2是一个简单语句,则这些简单语句之后会有一个分号,这是C语言对这些简单语句的要求。
(2)若if语句中的语句、语句l、语句2要用语句序列(即为顺序结构)来实现,则必须将它们改写成复合语句,即逻辑上把它们变成一个语句。
(3) 在if语句中,每个else总要与它前面的if对应,不可能出现没有对应if的else。
多分支选择语句
多分支选择结构通常有 n(>2)个不同情况和 n+1个供选择的分支。多分支选择结构也可用前叙述的嵌套if语句来描述,但因if语句嵌套深度太多不便于程序编写,也不便于理解,为此C语言专门提供了一种实现多分支选择结构的语句,这就是switCh语句。它的一般形式是:
switeh(表达式){
case常量表达式 1:语句序列 1
case常量表达式 1:语句序列 2
case常量表达式 n:语句序列 n
defalt:语句序列 n+1
}
对switeh语句需说明以下几点:
(1)switch后面括号内的表达式只限于是整型表达式或字符型表达式或枚举型表达式。
(2)case后的常量表达式称为情况前缀,要求所有常量表达式的值互不相同,并与switch后面括号内的表达式值的类型相一致。
(3)语句序列由任意条合法的C语句构成,也可以没有语句。
(4)情况前缀default可以缺省,但至多出现一次,习惯总是将它写在全部情况前缀之后,如有必要也可写在某case之前。
switch语句的执行过程解释如下:
先计算表达式的值,以该值依次与各case之后的常量表达式的值比较,按下列规则,选择执行的入口:
如果表达式的值等于某个常量表达式的值,switch语句就从该常量表达式之后的语句序列的第一个语句开始执行,然后一直向下执行,或自动依次进入后继常量表达式之后的语句序列继续执行(如没有 break语句),或执行完语句序列 n+1,结束 switch语句的执行;或在执行某个语句序列过程中遇到转出该switch语句的语句(如break语句),就停止向下执行,结束switch语句的执行。
如果没有相匹配的常量表达式,就从以default为情况前缀的语句序列开始执行。
如果没有相匹配的常量表达式,也没有defaul情况前缀,则该switch语句的这次执行立即结束。
由上述解释可知,“case常量表达式”只是起语句序列入口的作用。在执行switch语句时,根据switch之后的表达式的值找到与该值匹配的入口,就从此人口处开始执行,只要未遇到转出该switch语句的break语句或goto语句,就一直向下执行,也不再理会经过的case后的常量表达式。
如果要使各种情况互相排斥,仅执行各case所对应的语句序列,最常用的办法是使用break语句,各语句序列都以break语句结束。在switch语句中,执行break语句将使控制转向switch语句的后继语句。
由于switch语句的表达式不允许是实型的,当应用于实型值选择情况时,通常需作以下处理:将实表达式乘上一个适当的比例因子,使较大的实表达式值映照到一个较小的范围上,然后再将它转换到整型。
循环结构
循环计算用循环结构来描述。C语言提供三种描述不同循环结构的语句,它们是while语句、do-while语句和for语句。
1.while语句
while语句用来描述while型循环结构,它的一般形式为
while(表达式)
语句
while语句的执行过程是:
(1)计算while之后的表达式的值;
(2)测试表达式的值,当值为非 0时,转步骤 3;如值为 0,则结束while语句;
(3)执行while语句的循环体,并转步骤1(从而构成循环)。
一般来说,为使while语句的执行能正常结束,如控制循环的条件表达式包含有变量,循环体的执行应能更新这些变量的值,使表达式的值会变为0。有时,很难直接写出while后的条件,这时可以简单地写上 1,而在循环体中含有当某条件满足时,执行如 break语句那样的控制转移语句,使控制跳出while循环,即呈以下结构形式: