我們來看一個程序,使用公式℃=(5/9)(°F-32)
打印下列華氏溫度和攝氏溫度對照表:
1 -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
程序如下:
#include <stdio.h>
/* 當 fahr=0,20,… ,300 時,
分別打印華氏溫度與攝氏溫度對照表 */
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
表示其后所列變量為整數型,int類型的取值范圍取決于具體的機器,一般來說為4個字節,32位。除int類型外,C語言還提供了其他一些基本數據類型,如char
字符型,short
短整形,long
長整形,double
雙精度浮點型,float
單精度浮點型。這些數據類型對象的大小也取決于具體的實現。
lower = 0;
upper = 300;
step = 20;
fahr = lower;
這些語句為變量設置初值,以分號結束。=
為賦值運算符,意為將右側數值賦值給左側變量。
溫度轉換各行計算方式相同,因此可以用循環語句 while
,例程中的while
用法:
while (fahr <= upper) {
celsius = 5 * (fahr32)/ 9;
printf("%d\t%d\n", fahr, celsius);
fahr = fahr + step;
}
while語句的執行方式為:先測試小括號()
中的條件,如果為真,執行大括號中的語句,執行完畢后,再次測試()
的條件,如果為真,再次執行大括號內的語句。如果為假,終止循環。條件為真時,執行大括號內的語句,如果沒有大括號,則執行while
后的單條語句
我們看計算賦值語句:
celsius = 5 * (fahr - 32)/ 9;
用于將華氏溫度轉換為設置溫度,并將結果賦值給celsius
,之所以寫成 5 * (fahr - 32)/ 9
,而不是5/9*(fahr - 32)
,是因為5/9
為0,整數的除法只能整除,結果為商。
printf("%d\t%d\n", fahr, celsius);
%d
為占位符,表示這個位置的值為整數,\t
為制表符,打印時對齊用,\n
為換行符,當fahr為1,celsius為-17時,此時打?。?code>0 -17
我們看:
printf("%3d%6d\n", fahr, celsius);
%3d
,表示fahr占3個字寬,%6d
,表示celsius占6個字寬,此時打?。?code>空格空格0空格空格空格-17
我們的程序目前很不精確,因為所有的變量都聲明為int
,在用/
操作符會舍棄掉小數部分,讓我們對程序做個改造:
#include <stdio.h>
/* print FahrenheitCelsius
table
for fahr = 0, 20, ..., 300; floatingpoint
version */
int main()
{
float fahr, celsius;
float lower, upper, step;
lower = 0; /* lower limit of temperatuire scale */
upper = 300; /* upper limit */
step = 20; /* step size */
fahr = lower;
while (fahr <= upper) {
celsius = (5.0/9.0) * (fahr - 32.0);
printf("%3.0f %6.1f\n", fahr, celsius);
fahr = fahr + step;
}
}
我們將int
類型換成了float
類型,計算公式換為celsius = (5.0/9.0) * (fahr - 32.0);
,5.0/9.0
是兩個浮點數相除,結果將保留小數。
如果一個運算符的操作數均為整數,則執行整數運算。如果一個浮點數和一個整數運算,則在開始運算之前,整數型操作數將會自動轉換為浮點數。在一個小類型和一個大類型做運算時,小類型會先轉換成大類型再開始運算。不過即使這樣,在書寫時最好還是顯示加上一個小數點,這樣可以強調浮點性質,便于閱讀。
printf("%3.0f %6.1f\n", fahr, celsius);
%3.0f
表示浮點數fahr
在打印時占3個字寬,不保留小數部分。%6.1f
表示浮點數celsius
在打印時占6個字寬,小數部分占1個字寬,不足的用空格或0補齊。
格式說明可以省略寬度和精度,例如,%6f
表示待打印的浮點數整數部分至少有6個字寬,不足用0補齊;%.2f
指定待打印的浮點數的小數部分有兩位小數,但寬度沒有限制
%d
按照十進制整形數打印
%6d
按照十進制整形數數打印,至少6個字寬,不足用空格補齊
%f
打印浮點數
%6f
打印浮點數,至少6個字符寬
%.2f
打印浮點數,小數點后有兩位小數
%6.2f
打印浮點數,至少6個字符寬,小數后有兩位小數
%o
表示八進制數,%x
表示十六進制數,
%c表示字符
,%s
表示字符串,%%
表示%
自身。