C 笔记三 基于 for 循环的温度转换程序
2019-03-18 本文已影响0人
吃柠檬的鸮
编写程序,打印华氏温度到摄氏温度的转换表,要求按照从 300 度到 0 度逆序打印。
/* fahr2Celsius_for_1.c */
#include <stdio.h>
int main() {
float fahr;
for (fahr = 300; fahr >= 0; fahr -= 20) {
printf("%3.0f\t%6.1f\n", fahr, (5.0 / 9.0) * (fahr - 32));
}
return 0;
}
for
也是 C 语言的一种循环语句,它是对 while
的一种推广,相比 while
,for
语句更加直观。for
语句比较适合初始化和增加步长都是单条语句并且逻辑相关的情形。
上述程序中 printf 的第三个参数是计算摄氏温度的表达式,C 语言允许使用复杂的表达式来替代同类型变量值:
printf("%3.0f\t%6.1f\n", fahr, (5.0 / 9.0) * (fahr - 32));
/* 等价于 */
celsius = (5.0 / 9.0) * (fahr - 32);
printf("%3.0f\t%6.1f\n", fahr, celsius);
上述程序的编译运行结果:
300 148.9
280 137.8
260 126.7
240 115.6
220 104.4
200 93.3
180 82.2
160 71.1
140 60.0
120 48.9
100 37.8
80 26.7
60 15.6
40 4.4
20 -6.7
0 -17.8
上面的程序在 for 循环里使用了 300、20 这样的常量,C 语言中把直接使用的常数称之为 “幻数”。在程序中大量使用幻数会使得程序的修改变得更加困难,也降低了程序的可读性。
for (fahr = 300; fahr >= 0; fahr -= 20) {
printf("%3.0f\t%6.1f\n", fahr, (5.0 / 9.0) * (fahr - 32));
}
使用 #define
可以把一个符号名定义为一个特定的字符序列(包括数字),注意 define 语句不需要分号:
#define name replacement-list
符号常量名通常用大写字母拼写,以便于与小写字母拼写的变量名区分。符号常量不是变量,因此不需要再进行声明。所以上述的程序可以改写成:
/* fahr2Celsius_for_2.c */
#include <stdio.h>
#define LOWER 0
#define UPPER 300
#define STEP 20
int main() {
float fahr;
for (fahr = UPPER; fahr >= LOWER; fahr -= STEP) {
printf("%3.0f\t%6.1f\n", fahr, (5.0 / 9.0) * (fahr - 32));
}
return 0;
}