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