当前位置:嗨网首页>书籍在线阅读

02-if语句

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

7.1  if 语句

我们从一个有 if 语句的简单示例开始学习,请看程序清单7.1。该程序读取一列数据,每个数据都表示每日的最低温度(℃),然后打印统计的总天数和最低温度在0℃以下的天数占总天数的百分比。程序中的循环通过 scanf() 读入温度值。 while 循环每迭代一次,就递增计数器增加天数,其中的 if 语句负责判断0℃以下的温度并单独统计相应的天数。

程序清单7.1  colddays.c 程序

// colddays.c -- 找出0℃以下的天数占总天数的百分比
#include <stdio.h>
int main(void)
{
     const int FREEZING = 0;
     float temperature;
     int cold_days = 0;
     int all_days = 0;
     printf("Enter the list of daily low temperatures.\n");
     printf("Use Celsius, and enter q to quit.\n");
     while (scanf("%f", &temperature) == 1)
     {
          all_days++;
          if (temperature < FREEZING)
               cold_days++;
     }
     if (all_days != 0)
          printf("%d days total: %.1f%% were below freezing.\n",
                   all_days, 100.0 * (float) cold_days / all_days);
     if (all_days == 0)
          printf("No data entered!\n");
     return 0;
}

下面是该程序的输出示例:

Enter the list of daily low temperatures.
Use Celsius, and enter q to quit.
12 5 -2.5 0 6 8 -3 -10 5 10 q
10 days total: 30.0% were below freezing.

while 循环的测试条件利用 scanf() 的返回值来结束循环,因为 scanf() 在读到非数字字符时会返回 0temperature 的类型是 float 而不是 int ,这样程序既可以接受 -2.5 这样的值,也可以接受 8 这样的值。

while 循环中的新语句如下:

if (temperature < FREEZING)
     cold_days++;

if 语句指示计算机,如果刚读取的值( temperature )小于0,就把 cold_days 递增1;如果 temperature 不小于 0 ,就跳过 cold_days++; 语句, while 循环继续读取下一个温度值。

接着,该程序又使用了两次 if 语句控制程序的输出。如果有数据,就打印结果;如果没有数据,就打印一条消息(稍后将介绍一种更好的方法来处理这种情况)。

为避免整数除法,该程序示例把计算后的百分比强制转换为 float 类型。其实,也不必使用强制类型转换,因为在表达式 100.0 cold_days / all_days 中,将首先对表达式 100.0 cold_days 求值,由于C的自动转换类型规则,乘积会被强制转换成浮点数。但是,使用强制类型转换可以明确表达转换类型的意图,保护程序免受不同版本编译器的影响。 if 语句被称为分支语句(branching statement)或选择语句(selection statement),因为它相当于一个交叉点,程序要在两条分支中选择一条执行。 if 语句的通用形式如下:

if ( expression )
   statement

如果对 expression 求值为真(非 0 ),则执行 statement ;否则,跳过 statement 。与 while 循环一样, statement 可以是一条简单语句或复合语句。 if 语句的结构和 while 语句很相似,它们的主要区别是:如果满足条件可执行的话, if 语句只能测试和执行一次,而 while 语句可以测试和执行多次。

通常, expression 是关系表达式,即比较两个量的大小(如,表达式 x > yc == 6 )。如果 expression 为真(即 x 大于 y ,或 c == 6 ),则执行 statement 。否则,忽略 statement 。概括地说,可以使用任意表达式,表达式的值为 0 则为假。

statement 部分可以是一条简单语句,如本例所示,或者是一条用花括号括起来的复合语句(或块):

if (score > big)
     printf("Jackpot!\n");    // 简单语句
if (joe > ron)
{                             // 复合语句
     joecash++;
     printf("You lose, Ron.\n");
}

注意,即使 if 语句由复合语句构成,整个 if 语句仍被视为一条语句。