再上一篇:4 .2 选择执行语句
上一篇:4 .2 .1 选择条件的表示方法
主页
下一篇:4 .2 .3 按条件执行语句
再下一篇:4 .3 循环执行语句
文章列表

4 .2 .2 选择语句

《程序设计基础》(基于C语言讲解) 石光华 编著 —北京: 清华大学出版社

1 .单项选择语句

实际上,前面写的

if(price<300) printf(″Buy it !″);

就是一个条件选择语句,简称条件语句。“price<300”就是条件表达式,其执行过程是,

如果条件表达式“price<300”的值为真,则执行printf(″Buy it !″) 语句。也就是说,是否

选择执行输出语句printf(″Buy it !″); 取决于条件 price<300 是否成立。在 C语言中,

条件语句的基本格式为

if(条件表达式) 语句;

其意义为,如果条件表达式的值为真(T),则执行其后的语句,否则(F)不执行该语句。if

语句的执行过程如图4-1所示。

注意,条件表达式必须用括号括起来,语句以分号结束。

图4-1 if语句执行过程图

第4章 程序的运行顺序 37

有了条件语句,就可以有选择地执行程序语句。也就是说,可以控制程序的执行顺序了。下面把买衣服的完整程序写出来。

【例4-2】 编写买衣服的完想程序。

#include < stdio .h>

void main()

{

int iprice=0;

printf(″Please input price:\n″);

scanf(″%d″,&iprice);

if(iprice<300)

printf(″Buy it !″);

}

程序运行时,会提示输入价格,如果输入的价格低于300,程序就会输出“Buy it !”;如果输入的价格高于300,则程序直接结束运行。

有时候会遇到这样的问题,如果头痛,就去看医生。这样的问题也属于逻辑判断问题,如果用整型变量iheadache 表示头痛,可以表示如下。

if (iheadache !=0) printf(″See doctor !″);

完整的程序如例4-3。

【例4-3】 编写头痛就看医生的程序。

#include < stdio .h>

void main()

{

int iheadache=0;

printf(″Are you headache ? \n″);

scanf(″%d″,&iheadache);

if(iheadache !=0) / *表达式的值非0为真*/

printf(″See doctor !″);

}

2 .双项选择语句

在买衣服的过程中,还可能有这样的想法:如果价钱高于300就买红色的,否则就买白色的。如果用price 表示价格,可以表示如下。

38 程序设计基础

if (price>300)

printf(″buyred !″);

else

printf(″buywhite !″);

事实上,这就是条件选择语句的另一种形式———if-else 语句。

if-else条件语句的基本格式为

if(条件表达式)

语句1;

else

语句2;

其意义为,如果条件表达式的值为真,则执行其后的语句1,否则执行语句2。也就是说,

可以根据条件在两种可能中选择一种执行。条件是否成立决定了程序执行的不同分支。

其执行过程如图4-2所示。

图4-2 两个分支的if语句流程图

【例4-4】 输入两个数,把较小的数加上10后输出。

#include < stdio .h>

void main()

{

int ifirst=0, isecond=0;

printf(″input two numbers:\n″);

scanf(″%d%d″, &ifirst,&isecond);

if(ifirst

{

第4章 程序的运行顺序 39

ifirst=ifirst+10;

printf(″result= %d\n″,ifirst);

}

else

{

isecond=isecond+10;

printf(″result= %d\n″,isecond);

}

}

请注意程序中的语句

{

ifirst=ifirst+10;

printf(″result= %d\n″,ifirst);

}

构成了复合语句。复合语句中的一组语句或者一起执行,或者一个也不执行。同时,在复合语句的花括号“}”后面没有分号。

3 .多项选择语句

前面两种形式的if 语句可以解决程序中需要处理两种不同的情况,即两个分支的问题,但如果需要处理更多的分支,比如对成绩进行分级处理,把百分制成绩分为A,B,C,D,E 5个级别,简单的处理方法是采用多分支语句switch。

switch语句的基本格式为

switch (整型表达式)

{

case 常量表达式1:

复合语句1;

break;

case 常量表达式2:

复合语句2;

……

case 常量表达式n- 1:

复合语句n- 1;

break;

40 程序设计基础

default:

复合语句n;

}

switch语句的执行过程是,首先计算整型表达式的值,然后把表达式的值与其后的

常量表达式的值逐个比较。当整型表达式的值与某个常量表达式的值相等时,执行相应

的case后的语句,如果case 后面有break语句,则执行完毕就不再执行其他语句,退出

switch语句,如复合语句1;如果case后面没有break语句,则执行完毕接着执行后面语

句,不退出switch语句,如复合语句2;若表达式的值与所有case 后的常量表达式均不相

同,则执行default后的语句,若没有default 语句,则退出此switch语句。

带有break语句的switch语句的执行过程如图4-3所示。

图4-3 switch语句的执行过程

break语句的作用是中断switch语句的执行,通常它是必不可少的。

基本格式中的整型表达式为控制表达式,其作用是控制程序的流程。它的数值类型

必须与case语句中常量表达式的类型一致。所有常量表达式的类型必须相同,而它们的

值必须不同。

例4-5给出了完整的例子。

【例4-5】 写程序,将百分制成绩分为A,B,C,D,E 5个级别。

#include < stdio .h>

void main()

{

int iscore=0;

printf(″Please input your score:\n″);

第4章 程序的运行顺序 41

scanf(″%d″, &iscore);

if (iscore > =100)

iscore=90;

switch (iscore/ 10) / *iscore/ 10是一个整型表达式*/

{

case 9:

printf(″score is A .\n″);

break;

case 8:

printf(″score is B .\n″);

break;

case 7:

printf(″score is C .\n″);

break;

case 6:

printf(″score is D .\n″);

break;

default:

printf(″score is E .\n″);

}

}

switch语句是解决程序多分支的简便方法,但在使用中应注意整型值的匹配。