7.1 if语句

让我们以程序清单7.1展示的一个if语句的简单例子开始。这个程序读入一系列每日的最低温度(摄氏度),并报告输入的总数,以及最低温度在零度以下的天数的百分率。在一个循环里使用scanf()读入数值,在每个循环中增加计数器的值来统计输入数值的个数。if语句检测低于零度以下的温度并单独统计这些天的数目。

程序清单7.1 colddays.c程序

阅读 ‧ 电子书库

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

阅读 ‧ 电子书库

下面是一个运行示例:

阅读 ‧ 电子书库

while循环的判断条件利用scanf()的返回值在scanf()遇到非数字输入的时候终止循环。用float而不是int来声明temperature,这样程序就既能接受像8那样的输入,也能接受像-2.5这样的输入。

while代码块中的新语句如下:

阅读 ‧ 电子书库

该if语句指示计算机,如果刚读入的数值(temperature)小于0就将cold_days加1。如果temperature值不小于0将是什么情形呢?那样的话就会跳过cold_days++;语句,while循环继续读取下一个温度值。

该程序使用了两次if语句来控制输出。如果有数据的话,程序就会打印出结果;如果没有数据,那么程序就会报告该事实(稍后您将看到可以用一种更好的方法来处理程序的这个部分)。

为了避免整数除法,示例程序在计算百分率时使用了类型转换float。并不是真的需要类型转换,因为在表达式100.0*cold_days/all_days中,先求子表达式100.0*cold_days的值并通过自动类型转换规则强制转换为浮点型值。然而使用类型转换可以表明您的意图,并保护程序免受不完善编译器的影响。

if语句被称为分支语句(branching statement)或选择语句(selection statement),因为它提供了一个交汇点,在此处程序需要选择两条分支中的一条前进。一般的形式如下:

阅读 ‧ 电子书库

如果expression求得的值为真(非零),就执行statement;否则,跳过该语句。和while循环一样,statement既可以是单个语句也可以是一个代码块(术语上称为复合语句)。这种结构和while语句很相似。主要的区别在于在if语句中,判断和执行(如果可能的话)仅有一次,而在while循环中,判断和执行可以重复多次。

通常,expression是一个关系表达式。也就是说,它比较两个量的大小,像表达式x>y和c= =6那样。如果expression的值为真(x大于y,或者c等于6),就执行语句;否则,将忽略语句。更一般地,可以使用任何表达式,表达式的值为0就被视为假。语句部分可以是一个简单语句,就像例子中的那样;也可以是一个由花括号标出的复合语句(代码块):

阅读 ‧ 电子书库

阅读 ‧ 电子书库

注意,即使if中使用了一个复合语句,整个if结构仍将被看作一个简单语句。