編寫程序的目的是讓計算機幫助人們進行計算或處理信息,無論是計算還是處理信息,程序都需要獲取輸入數據,對輸入數據進行計算或處理后,將計算或處理結果輸出給用戶。
例如:編寫一個計算三角形面積的程序,圓周率可以聲明為常量PI,不需要用戶輸入,但圓的半徑是變化的量,半徑的值來自用戶的輸入。程序計算出圓的面積,需要將計算結果輸出給用戶。
輸入和輸出函數就是完成輸入和輸出功能的,函數是一段已經編寫好的C代碼,它完成確定的功能,可以把函數看成一個黑盒,我們不需要知道函數的代碼實現,只需要明確函數的功能及調用方法就可以。如圖2-7所示,函數也有輸入和輸出,函數可以被程序中的其它語句調用,而調用者可以把函數看成黑盒,不用考慮函數的內部結構和特性,只需傳入參數(輸入數據)和接收返回值(輸出數據)就可以了。
關于函數的內容在后面的章節還會詳細講述。
圖 2-7函數外部結構
C語言把提供的所有函數都放到庫里,程序需要調用庫內的函數時,需要把庫的頭文件引入到代碼文件。C語言的輸入和輸出函數屬于C語言的標準庫函數,標準庫函數的頭文件是“stdio.h”,如果在程序里要使用輸入輸出函數,需要在代碼的前面添加下面的語句:
#include
這條語句的作用是通知編譯器,在該代碼文件中使用了C標準庫里的輸入輸出函數,要求編譯器正確處理這些函數的使用。
輸出函數
C語言標準輸出函數名稱為printf(),該函數的功能是把要輸出的內容按照指定的格式輸出到控制臺,控制臺是一個命令行窗口,沒有程序界面,主要是為兼容DOS程序而設立的窗口。
printf()函數的一般形式為:
printf(“格式描述串”,變量列表)
printf()函數需要傳入兩個參數,分別是“格式描述串”和變量列表。
第一個參數說明采用什么樣的格式輸出內容,它的數據類型是一個字符串(字符串是有限個字符的有序集合,在C語言中使用雙引號括起來,關于字符串的內容后面章節會詳細講述)。在格式描述串里可以有多個占位符,占位符在字符串的位置可以隨意。需要注意格式描述串里的占位符和變量列表的變量是一一對應的,格式描述串里有多少個占位符,變量列表里面就有多少個變量對應。
例如下面的語句:
double dTemp = 129.6789603;
printf("%s:%.2fn", "這是用printf函數輸出的數據",dTemp);
printf()函數的第一個參數“%s:%.2f”是格式描述串,其中“%s”是格式控制符,表示輸出字符串,字符串內容取自格式字符串后面的變量列表,“%.2f”也是格式控制符,表示輸出浮點數,并且保留2位有效小數,更改“%.”后面的數字,可以限制不同的小數位數輸出,浮點數數值取自格式描述后面的變量列表。
變量列表跟在格式描述串后面,格式描述串中有多少個格式說明符,后面就有多少個變量,每個變量之間用逗號分隔。因為格式描述串“%s:%.2f”有兩個格式說明符,因此在格式描述串后面應有兩個變量,變量順序與格式描述串中的格式說明符順序保持一致,字符串常量"這是用printf輸出的數據"對應格式控制符%s,變量dTemp對應格式控制符%.2f。
圖 2-8例句執行結果
從圖2-8例句運行結果可以看出,printf方法可以控制浮點數小數位數的輸出。
printf()函數常用格式控制符列表:
%c 單個字符
%d 十進制整數
%f 十進制浮點數
%o 八進制數
%s 字符串
%u 無符號十進制數
%x 十六進制數
%% 輸出百分號%
printf()函數常用格式控制:
%0m.n格式字符
下面對組成格式控制符的各項加以說明:
% 格式說明的起始符號,不可缺少。
0 有0表示指定空位填0,如省略表示指定空位不填。
m.n m指域寬,即對應的輸出項在輸出設備上所占的字符數。n指精度。用于設置輸出浮點數的小數位數。未指定n時,隱含的精度為n=6位。例如:%.2f,m位默認位數,小數保留2位;%9.2f,意思是位數為9位,小數保留2位;%09.2f,意思是位數為9位,小數保留2位,位數不足的用0補齊。
例句如下:
char chTemp = 'a';
double dTemp = 129.6789603;
printf("%s:%09.2fn", "輸出浮點型變量", dTemp);
printf("%s:%c:n十進制:%d:n十六進制:%xn", "輸出字符型變量", chTemp, (int) chTemp, (int) chTemp);
例句的變量命名采用了匈牙利命名法,匈牙利命名法是一種編程時的命名規范,匈牙利命名法的基本原則是對每一變量的名稱都要求有明確含義,變量的類型通過規定的前綴字母來識別。例如:ch表示字符型數據、sz表示字符串類型、d表示雙精度浮點數等。
printf("%s:%09.2fn","輸出浮點型變量",dTemp); ”語句中,第一個%s的內容來自于格式描述串后面的第一個字符串常量“輸出浮點型變量”,%09.2f表示輸出9位數浮點數,保留2位有效小數,位數不足的,前面用0填充,浮點數值內容來自于dTemp。
該語句也可以改寫為下面的語句,效果是等同的:
printf("輸出浮點型變量:%09.2fn",dTemp);
在輸出字符型變量語句中,分別應用%c、 %d和%x將字符型變量按照字符、十進制數值和十六進制數值輸出,其中(int)是將字符類型強制轉換為int類型,其意義是將字符強制轉換為數值輸出。
例句執行結果如圖2-9所示:
圖 2-9 程序例句輸出結果
上面例句中的格式描述串包含了換行符“n”,“n”是一個轉義字符,符號“”使后面字符表示意義發生了轉義,“”后面的字符有特殊的含義。表列出了常用的轉義序列。
表 2-2轉義序列表
轉義序列 | 描述 |
---|---|
' | 單引號 |
" | 雙引號 |
? | 問號 |
反斜杠 | |
a | 響鈴 |
b | 退格 |
f | 換頁 |
n | 換行 |
r | 回車 |
t | 水平制表符 |
v | 垂直制表符 |
輸入函數
當程序需要從鍵盤獲取用戶的輸入時,就可以通過scanf()函數類來獲取用戶的輸入。當通過scanf()函數獲取用戶輸入時,控制臺會一直等待用戶的輸入,直到用戶敲回車鍵,用戶的一次輸入過程才結束。
scanf()函數的一般形式為:
scanf(“格式描述串”,變量地址列表)
第一個參數的格式描述串,其形式與printf()函數中的類似,其中可以包含一個或幾個轉換字符串(同樣以%開頭)。這些轉換字符串說明輸入的形式和數據的轉換方式。第二個參數是變量的地址列表,其書寫形式是在變量名稱前面添加“&”符號,該符號可以取出變量的地址,也稱為地址運算符或取地址符,函數會把用戶輸入的內容存儲到與該地址對應的變量中。
表 2-3常用轉換字符串列表
轉換字符串 | 接收變量的類型 | 輸入類型 |
---|---|---|
%d | int | 整型十進制數 |
%ld | long | 長整型十進制數 |
%f | float | 十進制數,可以是小數 |
%lf | double | 十進制數,可以是小數 |
例句:
int n;
double x;float y;
scanf("%d %lf %f",&n,&x,&y);
在例句中,聲明了整型變量n,雙精度浮點變量x,單精度浮點變量y,聲明的三個變量用于接收用戶的輸入。scanf函數把用戶輸入的數據按照指定的類型進行轉換,并把轉換結果順序賦值給三個變量,若用戶輸入數據不符合要求,則輸入失敗。輸入的數值之間應該通過空格、回車鍵或Tab鍵進行分割。
【例2-1】輸入整數和小數并輸出
程序清單 sample.c
#include
int main()
{
// 聲明整型變量,接收輸入的整數
int nTemp;
// 聲明雙精度浮點變量,接收輸入的小數
double dTemp;
// 接收用戶的輸入
scanf("%d %lf",&nTemp,&dTemp);
// 輸出變量nTemp和dTemp的值
printf("輸入的整數為:%dn輸入的小數為:%.2f",nTemp,dTemp);
return 0;
}
評論