一 printf函數的介紹函數
printf函數是一個標準庫函數,可以以精確的格式輸出程序運算的結果。spa
printf函數的調用格式爲:
printf("格式控制字符串",輸出項列表); 如:printf("%d,%d",a,b); 內存
格式字符串 字符串
是由格式字符(包括:轉換說明符、標誌、域寬、精度)和普通字符組成,轉換說明符和百 分號(%)一塊兒使用,用來講明輸出數據的數據類型、標誌、長度和精度 it
輸出項列表 class
能夠是常量、變量和表達式,也能夠沒有輸出項,這些輸出項必須與格式控制字符串在類型 和數量上徹底對應,不然,結果將不可預測。當有多個輸出項時,各個輸出項之間用逗號 ‘,’分隔 變量
思考:
int main() { 數據類型
printf(「hello」);二進制
printf(「world!」);float
return 0;
}
輸出結果仍爲:helloworld!
二 格式控制符使用說明
printf的格式控制的完整格式:
% - 0 m.n l或h 格式字符
下面對組成格式說明的各項加以說明:
%:表示格式說明的起始符號,不可缺乏。
-:有-表示左對齊輸出(右側補空格),如省略表示右對齊輸出(左側補空格)。
0:有0表示指定空位填0,如省略表示指定空位不填。
m.n:m指域寬,即對應的輸出項在輸出設備上所佔的字符數。N指精度。用於說明輸出的實型 數的小數位數。對數值型的來講,未指定n時,隱含的精度爲n=6位。
l或h:l對整型指long型,對實型指double型。h用於將整型的格式字符修正爲short型。
格式字符
格式字符用以指定輸出項的數據類型和輸出格式。
d格式:用來輸出十進制整數。有如下幾種用法: %ld:輸出長整型數據。
o格式:以無符號八進制形式輸出整數。對長整型能夠用"%lo"格式輸出。一樣也能夠指定字段寬 度用「%mo」格式輸出。
例:
main(){
int a = -1;
printf("%d, %o", a, a);
}
運行結果:-1,177777 程序解析:-1在內存單元中(以補碼形式存放)爲(1111111111111111)2,轉換爲八進制數爲 (177777)8。
x格式:以無符號十六進制形式輸出整數。對長整型能夠用"%lx"格式輸出。一樣也能夠指定字段 寬度用"%mx"格式輸出。
u格式:以無符號十進制形式輸出整數。對長整型能夠用"%lu"格式輸出。一樣也能夠指定字段寬 度用「%mu」格式輸出。
c格式:輸出一個字符。
s格式:用來輸出一個串。有幾中用法
%s:例如:printf("%s", "CHINA")輸出"CHINA"字符串(不包括雙引號)。
%ms:輸出的字符串佔m列,如字符串自己長度大於m,則突破獲m的限制,將字符串所有輸出。若串 長小於m,則左補空格。
%-ms:若是串長小於m,則在m列範圍內,字符串向左靠,右補空格。
%m.ns:輸出佔m列,但只取字符串中左端n個字符。這n個字符輸出在m列的右側,左補空格,注 意:若是n未指定,默認爲0。
三 實型精度問題
對於單精度數,使用%f格式符輸出時,僅前7位是有效數字,小數6位.
對於雙精度數,使用%lf格式符輸出時,前15位是有效數字,小數6位
float double 二進制有效位數 24位 53位
十進制有效位數 7位 15位
有效數字的位數與指定輸出的小數位數(%.7f)是兩碼事。
「有效數位爲7」:是指此數據從第一個非零數字開始,偏差不超過本數位半個單位的、精確可信 的數位是7位(包括小數點前的非零數位)。
%.7f:是指輸出此數據的時候,小數點以後要顯示7位數字(可是若是小數點前還有一些非零數 位,那麼小數點後的這7位並不能保證都是精確可信的有效數位,)