C語言之變量與算數運算表達式概述
- 一、華氏溫度與攝氏溫度對照
- 二、代碼概述
- 三、練習
一、華氏溫度與攝氏溫度對照
#include <stdio.h>/*當華氏溫度為 0,20,40,...300時,打印出華氏溫度與攝氏溫度對照表華氏溫度與攝氏溫度 C=(5/9)(?F-32) 其中C表示攝氏溫度,F表示華氏溫度
*/
main()
{// 華氏溫度f, 攝氏溫度cint f, c;// 最低溫度,最高溫度,步長int lower, upper, step;lower = 0;upper = 300;step = 20;f = lower;while (f<=upper) {// 如果先計算5/9,小數部分會被舍位,結果永遠是0c = 5 * (f - 32) / 9;printf("%d\t%d\n", f, c);f = f + step;}
}
二、代碼概述
上面的程序比較簡單,這里從上到下只做粗略描述,目的是了解程序的構造:
- 包含在/*與*/之間的字符序列,稱之為多行注釋;
- 在//后面的字符序列,稱之為單行注釋;
- 注釋會被編譯器忽略。
- 在C語言中,所有變量都必須先聲明后使用。聲明通常放在函數起始處,在任何可執行語句之前。
- 聲明用于說明變量的屬性,它由一個類型名和一個變量表組成,例如
- int f, c; 其中int為類型名,表示整數;f,c為兩個變量,放到一起就是一個變量表
- int lower, upper, step; 同上
- int的取值范圍取決于具體的機器(這與java不同),有16位的,也有32位的,即決定給變量分配多少空間
- 2字節int, 16位,符號位占1位,正/負數取值2^15=32768
- 4字節int, 32位,符號位占1位,正/負數取值2^31=2,147,483,648
- 變量基本類型除了int,還有char, short,long,long long,float,double
- 賦值語句,就是給變量設置初始值、或新的值
- lower = 0;
- upper = 300;
- step = 20;
- f = lower;
- while循環語句,重復執行的邏輯可以放到while循環里面,()里面的是進入循環的條件,如果成立,則進入循環執行循環體,{}里面的代碼就是所謂的循環體;當()中的條件不成立時,循環結束,繼續執行循環結構后面的其他代碼
while (f<=upper) {} - printf是一個通用輸出格式化函數,該函數第一個參數是待打印的字符串,其中的每個%是其他參數(第二個、第三個…)的占位符,運行之后實際的參數值會替換掉%,從而打印出完整的、格式化的字符串
- printf(“%d\t%d\n”, f, c); 打印華氏\t攝氏溫度\n,\t表示一個制表符,\n表示換行,二者都屬于轉義字符
- 上面的溫度轉換程序存在兩個問題
-
輸出的數字不是靠右對齊,不美觀,可以使用printf()進行格式化,使其右對齊
- printf(" %3d\t%6d\n", f, c); 3個空格位+3個數字位+1個制表符+6個數字位,這樣顯現出來的效果就是右對齊,左邊不足的位數空出
- printf(" %3d\t%6d\n", f, c); 3個空格位+3個數字位+1個制表符+6個數字位,這樣顯現出來的效果就是右對齊,左邊不足的位數空出
-
另一個較為嚴重的問題是,我們使用的是整型運算,由于小數位會被舍棄,所以得到的結果不太準確。可以使用浮點數計算,修改程序如下:
- 變量聲明為float,賦值時,如果給定的值是整型,則會自動轉為浮點型,比如 lower=0;
- 運算時,如果有一個浮點型和一個整型,則在運算之前,整型會自動轉為浮點型,比如 f-32, 32會自動轉為32.0
- 可以按照公式進行程序編寫, C=(5/9)(?F-32),把運算表達式中所有的整型數字都改成浮點數
- 3.0f 表示浮點數至少占3個字符寬,不保留小數
- 6.1f 表示浮點數至少占6個字符寬,保留一位小數
- 格式測試
-
// %d 按照十進制整型數打印 decimalismprintf("%d|%d|%d\n", 1, 100, 1000);// %6d 按照十進制整型數打印,至少6個字符寬(待打印字符小于6個,左側不足位補空格;大于等于6個,按實際打印)printf("%6d|%6d|%6d|%6d\n", 6, 66666, 666666, 66666666);// %f 按照浮點數打印 float 小數點最多6位,如果實際不足6位,右側不足位補0;如果實際多于6位,則進位printf("%f|%f|%f|%f|%f\n", 1.1, 1000.222, 1.123456, 1.1234567, 1.12345638);// %6f 按照浮點數打印,至少6個字符寬,基本同上printf("%6f|%6f|%6f|%6f|%6f\n", 1.1, 1000.222, 1.123456, 1.1234567, 1.12345638);// %.2f 按照浮點數打印, 小數點后兩位小數,不足右端補0,多出進位printf("%.2f|%.2f|%.2f|%.2f|%.2f\n", 1.1, 1000.222, 1.123456, 1.1234567, 1.12345638);// %6.2f 按照浮點數打印, 至少6個字符寬(包含小數部分、小數點), 小數部分兩位;不足6位左側補空格,多出6位整數部分按實際打印printf("%6.2f|%6.2f|%6.2f|%6.2f|%6.2f\n", 1.1, 1000.222, 1.123456, 1.1234567, 123451.12345638);// %o 按照八進制打印 octonaryprintf("%o\n", 8);// %x 按照十六進制打印 hexadecimalprintf("%x\n", 16);// %c 字符printf("%c\n", 'c');// %s 字符串printf("%s\n", "hello wrold!");// %% 表示%本身printf("%%\n");
三、練習
- 修改溫度轉換程序,使之能在轉換表的頂部打印一個標題
#include <stdio.h>
main()
{// 華氏溫度f, 攝氏溫度cfloat f, c;// 最低溫度,最高溫度,步長float lower, upper, step;lower = 0;upper = 300;step = 20;f = lower;printf("%s\t%s\n", "華氏溫度", "攝氏溫度");while (f <= upper) {c = 5.0 / 9.0 * (f - 32.0);printf(" %3.0f\t%14.1f\n", f, c);f = f + step;}
}
- 編寫一個程序,打印攝氏溫度轉換為華氏溫度的轉換表
#include <stdio.h>/*當攝氏溫度為 0,20,40,...300時,打印出攝氏溫度與華氏溫度對照表F=(9.0/5.0)*C+32 其中F表示華氏溫度,C表示攝氏溫度
*/
main()
{// 華氏溫度f, 攝氏溫度cfloat f, c;// 最低溫度,最高溫度,步長float lower, upper, step;lower = 0;upper = 300;step = 20;c = lower;printf("%s\t%s\n", "攝氏溫度", "華氏溫度");while (c <= upper) {f = (9.0 / 5.0) * c + 32;printf(" %3.0f\t%14.1f\n", c, f);c = c + step;}
}