购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.6 定义常量的名字

当程序含有常量时,建议给这些常量命名。程序dweight.c和程序dweight2.c都用到了常量166。在以后阅读程序时也许会有人不明白这个常量的含义,因此可以采用称为 宏定义 (macro definition)的特性给常量命名:

#define INCHES_PER_POUND 166

这里的 #define 是预处理指令,类似于前面所讲的 #include ,因而在此行的结尾也没有分号。

当对程序进行编译时,预处理器会把每一个宏替换为其表示的值。例如,语句

weight = (volume + INCHES_PER_POUND - 1) / INCHES_PER_POUND;

将变为

weight = (volume + 166 - 1) / 166;

效果就如同在前一个地方写的是后一条语句。

此外,还可以利用宏来定义表达式:

#define RECIPROCAL_OF_PI (1.0f / 3.14159f)

当宏包含运算符时,建议用括号(➤14.3节)把表达式括起来。

注意,宏的名字只用了大写字母。这是大多数C程序员遵循的规范,但并不是C语言本身的要求。(至今,C程序员沿用此规范已经几十年了,希望读者不要背离此规范。)

程序 华氏温度转换为摄氏温度

下面的程序提示用户输入一个华氏温度,然后输出一个对应的摄氏温度。此程序的输出格式如下(跟前面的例子一样,用户的输入信息用下划线标注出来):

Enter Fahrenheit temperature: 212
Celsius equivalent: 100.0

这段程序允许温度值不是整数,这也是摄氏温度显示为 100.0 而不是 100 的原因。首先来阅读一下整个程序,随后再讨论程序是如何构成的。

celsius.c

/* Converts a Fahrenheit temperature to Celsius */

#include <stdio.h>

#define FREEZING_PT 32.0f
#define SCALE_FACTOR (5.0f / 9.0f)

int main(void)
{
  float fahrenheit, celsius;

  printf("Enter Fahrenheit temperature: ");
  scanf("%f", &fahrenheit);

  celsius = (fahrenheit - FREEZING_PT) * SCALE_FACTOR;

  printf("Celsius equivalent: %.1f\n", celsius);

  return 0;
}

语句

celsius = (fahrenheit – FREEZING_PT) * SCALE_FACTOR;

把华氏温度转换为相应的摄氏温度。因为 FREEZING_PT 表示的是常量 32.0f ,而 SCALE_FACTOR 表示的是表达式 (5.0f / 9.0f) ,所以编译器会把这条语句看成

celsius = (fahrenheit – 32.0f) * (5.0f / 9.0f);

在定义 SCALE_FACTOR 时,表达式采用 (5.0f / 9.0f)的 形式而不是 (5 / 9) 的形式,这一点非常重要,因为如果两个整数相除,那么C语言会对结果向下舍入。表达式 (5 / 9) 的值为0,这并不是我们想要的。

最后的 printf 函数调用输出相应的摄氏温度:

printf("Celsius equivalent: %.1f\n", celsius);

注意,使用 %.1f 显示 celsius 的值时,小数点后只显示一位数字。 y0ZAk7NHPBrC1/0JnSKzENkVzuzqYeWNlQaikljyZl+zrxlnLUpqjQzjWhsdnN38

点击中间区域
呼出菜单
上一章
目录
下一章
×

打开