在程序的执行过程中往往需要根据某些条件来决定执行哪些语句,这就需要选择型控制语句if 和switch来实现选择结构程序;某些情况下还会不断地重复执行某些语句,这就需要循环型控制语句for和while来完成循环结构程序。
1.if语句
用if语句可以实现选择结构。它根据给定的条件进行判断,以决定执行某个分支程序段。if语句有3种基本形式。
(1)第一种基本形式
if(表达式)
语句
功能描述:如果表达式的值为真,则执行其后的语句;否则,跳过该语句。
(2)第二种基本形式
if(表达式)
语句1
else
语句2
功能描述:如果表达式的值为真,则执行语句1;如果表达式的值为假,则执行语句2。
(3)第三种基本形式
if(表达式1)
语句1
else if(表达式2)
语句2
else if(表达式3)
语句3
else if(表达式n)
语句n
else
语句m
功能描述:如果表达式1的结果为真,则执行语句1,然后退出if选择语句,不执行下面的语句;否则判断表达式2,如果表达式2的结果为真,则执行语句2,然后退出if选择语句,不执行下面的语句,同样,如果表达式2的结果为假,则判断表达式3,依次类推,最后,如果表达式n不成立,则执行else后面的语句m。
在使用if语句时还要注意以下问题:
在3种基本形式中,if关键字后面均为表达式。该表达式通常是逻辑表达式或关系表达式,也可以是一个变量。
在if语句中,条件判断表达式必须用括号括起来。在语句之后必须加分号,如果是多行语句组成的程序段,则要用花括号括起来。
2.switch语句
switch语句可实现多分支的选择结构,在这种情况下,判断条件表达式的值由几段组成或不是一个连续的值,每一段或每一个值对应一段分支程序。switch语句的一般形式为:
switch(表达式)
{
case常量表达式1:
语句1
case常量表达式2:
语句2
…
case常量表达式n:
语句n
default:
语句m
}
switch语句的流程图如图1-40所示。
图1-40 switch语句的流程图
功能描述:计算表达式的值,并逐个与其后的常量表达式的值进行比较。当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续所有 case 后面的语句。如果表达式的值与所有case后的常量表达式均不相等,则执行default后的语句。
在使用switch语句时要注意以下问题:
(1)表达式的计算结果必须是整型或者字符型,也就是常量表达式1到常量表达式n必须是整型或字符型常量。
(2)每个case的常量表达式必须互不相同,但各个case出现的次序没有顺序。case语句标号后面的语句可以省略不写,在关键字case和常量表达式之间一定要有空格。
(3)当表达式的值与某个常量表达式的值相等并执行完其后的语句时,如果不想继续执行所有case后面的语句,则要在语句后面加上“break”,以跳出switch结构。
3.while语句
while语句能够实现“当型”循环结构,其一般形式为:
while(表达式)语句
功能描述:计算表达式的值,当值为真时,执行循环体语句;当表达式的值为假时,跳出循环体,结束循环。其中,表达式是循环条件,语句是循环体。
while语句的流程图如图1-41所示。
图1-41 while语句的流程图
在使用while语句时要注意以下几点。
不要混淆while语句的循环结构与if语句构成的选择结构。while 的条件表达式为真时,其后的循环体将被重复执行,而 if的条件表达式为真时,其后的语句只执行一次。
在循环体中应有使循环趋于结束的语句。如果没有,则会进入死循环。在编写嵌入式应用程序时,经常会用到死循环。
循环体若包含一个以上的语句,则应使用大括号括起来。
4.do-while语句
do-while语句用来实现“直到型”循环,其特点是先行循环体,然后判断循环条件是否成立,其一般形式为:
do
语句
while(表达式)
do-while语句流程图如图1-42所示。
功能描述:由于do-while循环为“直到型”循环,它先执行循环体中的语句,然后再判断表达式是否为真,如果为真则继续循环;如果为假则终止循环。因此,do-while循环至少执行一次循环体语句。
注意:do-while语句在使用时除了要注意循环体至少执行一次的问题外,还要注意它是以do开始,以while结束,while(表达式)后的分号不能?
5.for语句
for 语句的使用极为灵活,可以完全取代 while 语句,它既可以用于循环次数确定的情况,又可以用于循环次数不确定而只是给出循环条件的情况。for语句的一般形式为:
for(表达式1;表达式2;表达式3)语句
for语句的流程图如图1-43所示。
功能描述:先求解表达式1,一般情况下,表达式1为循环结构的初始化语句,给循环计数器赋初值。然后求解表达式2,若其值为假,则终止循环;若其值为真,则执行for语句中的内嵌语句。内嵌语句执行完后,求解表达式3,最后继续求解表达式2,根据求解值进行判断,直到表达式2的值为假为止。
for语句最简单也是最典型的,其形式如下:
for(循环变量赋初值;循环条件;循环变量增量)语句
循环变量赋初值总是一个赋值语句,用来给循环控制变量赋初值;循环条件是一个关系表达式,决定什么时候退出循环;循环变量增量用来定义循环控制变量每次循环后按什么方式变化。这3个部分之间用分号分开。
图1-42 do-while语句流程图
图1-43 for语句的流程图
for循环语句的一般形式可用while语句进行解释,如下:
表达式1:
while(表达式2)
{ 语句
表达式3:
}
或者用do-while语句解释,如下:
表达式1:
do{
语句
表达式3
}while(表达式2):
在使用for语句时要注意以下几点:
(1)For循环中的表达式1、表达式2和表达式3都是选择项,但是分号不能省略。
(2)若3个表达式都省略,则for循环变成for(;;),相当于while(1)死循环。
(3)表达式2一般是关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式,只要其值非零,就执行循环体。
6.break语句
break语句通常在循环语句和switch语句中。当break用在switch语句中时,可使程序跳出switch而执行switch以后的语句。
当switch语句用在do-while、for、while循环语句中时,可使程序终止循环而执行循环后面的语句。通常break语句总是与if语句连在一起的,即满足条件时便跳出循环。
7.continue语句
continue 语句的作用是跳过循环体中剩余的语句而强行执行下一次循环。continue 语句只用在do-while、for、while等循环体中,常与if语句连在一起使用,用来加速循环。
注意:continue语句与break语句的区别是,break语句结束整个循环过程,而continue语句只结束本次循环,不终止整个循环。
8.goto语句
goto语句是一个无条件转向语句,它的一般形式为:
goto语句标号:
功能描述:语句标号是一个冒号“:”的标识符,用于标语句的地址。当执行跳转语句时,使程序跳转到标识符指向的位置继续执行。将goto语句和if语句连在一起使用,可以构成一个循环结构。一般常见的是采用goto语句来跳出多重循环。注意,只能用goto语句从内层循环跳到外层循环,而不允许从外层循环跳到内层循环。