使用公式 °C = ( 5 / 9 ) (°F - 32) 打印 0 ~ 300 之間華氏溫度對應(yīng)的攝氏溫度(間隔為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 語言中所有變量都應(yīng)該先聲明后使用。聲明用于說明變量的屬性,由一個類型名和其后的變量表組成:
int fahr, celsius;
int lower, upper, step;
int 表示其后的變量都是整數(shù),float 表示其后變量為浮點數(shù)(帶有小數(shù)部分)。
除了例子中用到的 int 和 float 類型之外,C 語言還提供了其他一些基本數(shù)據(jù)類型:
char : 字符,一個字節(jié)
short : 短整形
long : 長整形
double : 雙精度浮點型
類型對象的取值范圍取決于具體的機器。
C 語言中的每一條語句都必須以分號結(jié)束!否則編譯器會進(jìn)行報錯(一般會出現(xiàn)在該語句的下一個語句起始處)。
下面的語句為各個變量賦值:
lower = 0;
upper = 300;
step = 20;
fahr = lower;
在進(jìn)行溫度轉(zhuǎn)換的時候,每一個華氏溫度都是通過同一個公式來計算其對應(yīng)的攝氏溫度,為了避免書寫重復(fù)的計算步驟,C 語言提供了幾個循環(huán)語句,這里用到的其中一個 while 循環(huán)語句:
/* 圓括號內(nèi)為 條件*/
while ( fahr <= upper) {
/*
* 循環(huán)體
*/
}
while 的執(zhí)行方式:
step 1. 測試圓括號內(nèi)的條件,條件為真,則執(zhí)行步驟 2;條件為假,循環(huán)結(jié)束;
step 2. 依次執(zhí)行循環(huán)體內(nèi)的語句,返回步驟 1。
while 語句的循環(huán)體如果有多條語句,則需要用花括號括起來,如果只有一條語句,可以省略花括號,像下面這樣:
while (expression)
statement;
建議只有一條語句的時候也加上花括號,以防后面需要向循環(huán)體添加額外操作時由于忘記加上花括號而引發(fā)奇怪的錯誤。
while 循環(huán)體內(nèi)的語句縮進(jìn)了一個制表位,對 C 語言來說這并不是必要的,但是適當(dāng)?shù)目崭窈涂s進(jìn)對代碼的可讀性極為重要。
循環(huán)體執(zhí)行了溫度轉(zhuǎn)換計算,并將計算結(jié)果打印出來。注意下面計算語句和公式 °C = ( 5 / 9 ) (°F - 32) 的形式:
celsius = 5 * (fahr - 32) / 9;
C 語言中,兩個整數(shù)的除法運算,其結(jié)果也是整數(shù),小數(shù)部分將被舍棄,因此 5 / 9 的結(jié)果是 0。這樣公式就變成了 °C = 0 * (°F - 32)。
printf 是一個用于打印輸出的庫函數(shù),可對參數(shù)進(jìn)行格式化輸出。% 及其后面的字符指定了參數(shù)的輸出類型,且 % 的數(shù)目必須與后面的參數(shù)在數(shù)量和類型上嚴(yán)格匹配。
fahr = 12;
/* 下面操作將打印出錯誤的結(jié)果 */
printf("%d\t%d\n", fahr);
/*
* 我的編譯器上運行的結(jié)果為:
* 12 4135088
*/
在上面的例子中:
printf("%d\t%d\n", fahr,celsius);
%d 指定了一個整形參數(shù),第一個 %d 對應(yīng) fahr,第二個 %d 對應(yīng) celsius。兩者之間的 \t 表示打印一個制表符。
程序的編譯運行結(jié)果如下:
$ ./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
用浮點算術(shù)運算替代整型算術(shù)運算可以得到更精確的結(jié)果。
下面的例子采用浮點算術(shù)運算,打印攝氏溫度對應(yīng)的華氏溫度表。
/* celsius2Fahr.c*/
#include <stdio.h>
int main() {
float fahr, celsius;
int lower, upper, step;
lower = 0;
upper = 300;
step = 20;
/* 這里先將 lower 轉(zhuǎn)換為浮點型,再進(jìn)行賦值 */
celsius = lower;
while (celsius <= upper) {
/* 5.0 / 9.0 是兩個浮點數(shù)相除,其結(jié)果也是浮點數(shù) */
fahr = 9.0 / 5.0 * celsius + 32;
/* %6.1f 表示打印的浮點數(shù)至少占 6 個字符的寬度,且小數(shù)點后保留一位有效數(shù)字 */
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