4.1.5 条件语句

条件语句由关键字if构成,用于需要根据某些条件来控制执行走向的程序。条件语句又被称为if条件语句或分支语句。条件语句是很重要的程序控制语句,在C51的程序设计中经常会用到。C51语言提供了多种形式的if条件语句,下面分别进行介绍。

1.单分支条件语句

单分支条件语句只有一个语句分支或者语句块分支,其一般形式如下。


if(条件表达式)

{

分支语句;

}


其中,当if条件语句的条件表达式的值为真时,就执行分支语句;当条件表达式为假时,就跳过分支语句。if条件语句执行完后,执行后续程序代码。单分支if条件语句的程序示例如下。


include<stdio.h>//头文件

void main()//主函数

{

int a,b;//变量声明

a=10;//初始化变量a

b=10;//初始化变量b

if(a==b)//单分支if条件语句

{

a++;//分支语句

b++;

}

printf(“a=%d,b=%d\n”,a);//输出结果

}


注意在C51中,相等关系的比较符是由两个等号(==)构成的,如果写成if(a=b),则变成了将变量b赋值给a,只有变量b不为0,则a的结果才不为0,条件成立将执行分支语句中的内容。

该程序可以在KeilµVision3编译环境中执行,其运行的结果如下所示。


a=11,b=11


该程序中,首先声明并初始化变量a和b,接着判定条件a==b是否为真,如果为真则执行单分支if条件语句。最后输出结果。

说明在使用单分支条件语句时,如果分支语句只有一条语句,则可以省略“{}”,否则不可以省略“{}”。

2.双分支条件语句

双分支条件语句包含两个语句分支,即由关键字if和else构成,其一般形式如下。


if(条件表达式)

{

分支语句1;

}

Else

{

分支语句2;

}


其中,当条件表达式为真时,就执行分支语句1;当表达式为假时,就执行分支语句2。if语句执行完后,继续执行if语句后面的程序代码。双分支if条件语句的程序示例如下。


include<stdio.h>//头文件

void main()//主函数

{

int a,b;//变量声明

a=10;//初始化变量a

b=20;//初始化变量b

if(a==b)//双分支if条件语句

{

a++;//分支语句1

b++;

}

else

{

a—;//分支语句2

b—;

}

printf(“a=%d,b=%d\n”,a);//输出结果

}


该程序可以在KeilµVision3编译环境中执行,其运行的结果如下所示。


a=9,b=9


该程序中,首先声明并初始化变量a和b,接着执行双分支if条件语句。当判定条件表达式a==b为真时,就执行分支语句1,否则执行分支语句2。这里a不等于b,因此执行分支语句2。

说明在使用双分支条件语句时,如果分支语句只有一条语句,则可以省略“{}”,否则不可以省略“{}”。

3.多分支条件语句

多分支条件语句可以包含多个分支语句,其一般形式如下。


if(条件表达式1)

{

分支语句1;

}

else if(条件表达式2)

{

分支语句2;

}

else if(条件表达式3)

{

分支语句3;

}

else if(条件表达式n)

{

分支语句n;

}

else

{

分支语句n+1;

}


注意else if之间有一个空格,连写为elseif是错误的。

多分支条件语句在执行时,从上到下逐个对条件表达式进行判断,一旦某个条件表达式值为真,就执行相应的分支语句,其余分支语句不再执行;如果没有一个判断条件为真,则执行最后一个else分支语句,即分支语句n+1。多分支if条件语句的程序示例如下。


include<stdio.h>//头文件

void main()//主函数

{

int score;

char grade;

score=79;//初始化成绩

if(score>=90)//多分支条件语句,判断成绩的等级

grade=‘A’;

else if(score>=80)

grade=‘B’;

else if(score>=70)//该条件表达式为真

grade=‘C’;//执行该分支语句

else if(score>=60)

grade=‘D’;

else

grade=‘E’;

printf(“score=%d,grade=%c\n”,score,grade);//输出结果

}


该程序可以在KeilµVision3编译环境中执行,其运行的结果如下所示。


score=67,grade=C


本例中,首先定义成绩score以及等级grade,然后为score赋值79,使用多分支条件语句来判断该成绩所属grade的等级并为grade赋值。

这是由if-else语句组成的嵌套,可以实现多方向条件分支。在C51程序设计中使用多分支条件语句时,需要注意以下几点。

❑在整个多分支条件语句中,只执行其中的一条语句。

❑如果分支语句只有一条语句,则可以省略“{}”,否则不可以省略“{}”。

❑if和else是配对使用的,如果少了一个就会出现语法出错,else总是与最临近的if相配对。

4.多层条件嵌套的条件语句

条件语句循环允许多层条件进行嵌套。嵌套的一般形式如下。


if(条件表达式)

{

if(条件表达式)

{

语句1;

}

else

{

语句2;

}

}

else

{

if(条件表达式)

{

语句3;

}

else

{

语句4;

}

}


其中,嵌套的条件语句可以采用前面介绍的任何一种形式。多层条件嵌套的条件语句在执行时,按照前面的规则执行。条件语句嵌套的程序示例如下。


include<stdio.h>//头文件

void main()//主函数

{

char ch;//变量声明

ch=‘K’;//初始化赋值

if(ch>=‘A'&&ch<='z’)//判断是否为字母

{

if(ch>=‘A'&&ch<='Z’)//判断是否为大写字母

printf(“This char belongs to A~Z.”);

else//否则为小写字母

printf(“This char belongs to a~z.”);

}

else

printf(“This is not char.”);

}


该程序可以在KeilµVision3编译环境中执行。其运行的结果如下所示。


This char belongs to A~Z.


该程序中,首先初始化赋值字符变量ch,然后通过嵌套的条件语句来判断该变量是否为字母以及是大写字母还是小写字母。