使用公式 °C = ( 5 / 9 ) (°F - 32) 打印 0 ~ 300 之间华氏温度对应的摄氏温度(间隔为20)。
/* fahr2Celsius.c */
#include <stdio.h>
int main() {
int fahr, celsius;
int lower, upper, step;
lower = 0;
upper = 300;
step = 20;
fahr = lower;
while (fahr <= upper) {
celsius = 5 * (fahr - 32) / 9;
printf("%d\t%d\n", fahr,celsius);
fahr = fahr + step;
}
return 0;
}
C 语言中所有变量都应该先声明后使用。声明用于说明变量的属性,由一个类型名和其后的变量表组成:
int fahr, celsius;
int lower, upper, step;
int
表示其后的变量都是整数,float
表示其后变量为浮点数(带有小数部分)。
除了例子中用到的 int
和 float
类型之外,C 语言还提供了其他一些基本数据类型:
char
: 字符,一个字节
short
: 短整形
long
: 长整形
double
: 双精度浮点型
类型对象的取值范围取决于具体的机器。
C 语言中的每一条语句都必须以分号结束!否则编译器会进行报错(一般会出现在该语句的下一个语句起始处)。
下面的语句为各个变量赋值:
lower = 0;
upper = 300;
step = 20;
fahr = lower;
在进行温度转换的时候,每一个华氏温度都是通过同一个公式来计算其对应的摄氏温度,为了避免书写重复的计算步骤,C 语言提供了几个循环语句,这里用到的其中一个 while
循环语句:
/* 圆括号内为 条件*/
while ( fahr <= upper) {
/*
* 循环体
*/
}
while
的执行方式:
step 1. 测试圆括号内的条件,条件为真,则执行步骤 2;条件为假,循环结束;
step 2. 依次执行循环体内的语句,返回步骤 1。
while
语句的循环体如果有多条语句,则需要用花括号括起来,如果只有一条语句,可以省略花括号,像下面这样:
while (expression)
statement;
建议只有一条语句的时候也加上花括号,以防后面需要向循环体添加额外操作时由于忘记加上花括号而引发奇怪的错误。
while
循环体内的语句缩进了一个制表位,对 C 语言来说这并不是必要的,但是适当的空格和缩进对代码的可读性极为重要。
循环体执行了温度转换计算,并将计算结果打印出来。注意下面计算语句和公式 °C = ( 5 / 9 ) (°F - 32) 的形式:
celsius = 5 * (fahr - 32) / 9;
C 语言中,两个整数的除法运算,其结果也是整数,小数部分将被舍弃,因此 5 / 9 的结果是 0。这样公式就变成了 °C = 0 * (°F - 32)。
printf
是一个用于打印输出的库函数,可对参数进行格式化输出。%
及其后面的字符指定了参数的输出类型,且 %
的数目必须与后面的参数在数量和类型上严格匹配。
fahr = 12;
/* 下面操作将打印出错误的结果 */
printf("%d\t%d\n", fahr);
/*
* 我的编译器上运行的结果为:
* 12 4135088
*/
在上面的例子中:
printf("%d\t%d\n", fahr,celsius);
%d
指定了一个整形参数,第一个 %d
对应 fahr,第二个 %d
对应 celsius。两者之间的 \t
表示打印一个制表符。
程序的编译运行结果如下:
$ ./fahr2Celsius.out
0 -17
20 -6
40 4
60 15
80 26
100 37
120 48
140 60
160 71
180 82
200 93
220 104
240 115
260 126
280 137
300 148
用浮点算术运算替代整型算术运算可以得到更精确的结果。
下面的例子采用浮点算术运算,打印摄氏温度对应的华氏温度表。
/* celsius2Fahr.c*/
#include <stdio.h>
int main() {
float fahr, celsius;
int lower, upper, step;
lower = 0;
upper = 300;
step = 20;
/* 这里先将 lower 转换为浮点型,再进行赋值 */
celsius = lower;
while (celsius <= upper) {
/* 5.0 / 9.0 是两个浮点数相除,其结果也是浮点数 */
fahr = 9.0 / 5.0 * celsius + 32;
/* %6.1f 表示打印的浮点数至少占 6 个字符的宽度,且小数点后保留一位有效数字 */
printf("%3.0f\t%6.1f\n", celsius, fahr);
celsius += step;
}
return 0;
}
$ ./celsius2Fahr.out
0 32.0
20 68.0
40 104.0
60 140.0
80 176.0
100 212.0
120 248.0
140 284.0
160 320.0
180 356.0
200 392.0
220 428.0
240 464.0
260 500.0
280 536.0
300 572.0
网友评论