以前我們已經見過一些關於 printf() 的輸出格式 [printf() 與跳脫字元 \], 現在我們再詳細列出所有的輸出格式所對應的資料型態。 我們已經知道輸出格式的第一個符號必定是 %,所以底下就不寫那個符號了。
附加以下說明。
% % (不必對應一個數值) c int,但先轉換成 unsigned char 再印出字符而非數字 s string 印出字串 d int u unsigned int o unsigned int 八進制數字 x unsigned int 十六進制數字,用 abcdef X unsigned int 十六進制數字,用 ABCDEF f double e double 指數表達法,例如 2.56e2 E double 指數表達法,例如 2.56E2 g double 自動選擇使用 %f 還是 %e G double 自動選擇使用 %f 還是 %E
輸出printf("%c%c%c%c%c%%%c", 1128, 0145, 0x6c, 0xff6c, 0157, 10);
注意,這個例子中有八進制和十六進制的常數。1128 和 0xff6c 都超過了 unsigned char 的數值範圍,但是被轉換成 unsigned char 之後,其數值分別是 104 和 0x6c, 也就是 'h' 和 'l'。hello%
注意,如果使用 long 或 long double 這種特長的資料型態來計算, 在輸出的時候,要記得寫格式 %ld 或 %Lf 否則看不到正確答案。 此外,注意 %f 內定輸出小數點下 6 位而已。 如果想要看多一點的小數,必需明白指定,例如說 %.32Lf。 使用 %Le 和 %Lg 亦需注意這些問題。
舉例來說,如果您的機器有支援 long double, 則可以用它來計算 2113-1。 這比使用 long 能夠處理的整數更大, 即使 unsigned long 最大只能表現 264-1。 以下的程式,將會輸出 2113-1。
#include <stdio.h> /* 計算 $2^{113}-1$ (pow2_113.c) */ main() { long double x; int i; x = 1.; for (i=0; i<113; ++i) { x *= 2; } printf("%.0Lf\n", x-1); }
習題
int choose(int, int);使得 choose(n,m) 等於 Cnm, 例如 choose(3,0) 是 1、choose(4,2) 是 6。 如果使用者輸入的 n 和 m 不在 choose() 能夠接受的範圍,令函式值是 0。 寫一個簡單的主函式來呼叫您的 choose(),並輸出前 10 列的 Pascal 三角形, 如下。
1 1 1 1 2 1 1 3 3 1注意,如果您的程式裡面使用了階乘計算,那就不妙了。 (您可以利用 Maple 來檢驗 choose() 的答案)
注意:此處所有文件均為原著,個別的版權宣告日後會一一公布, 整體版面設計亦尚未完成。但仍請勿抄襲文字與圖片,以免觸犯著作權法。
Created: Apr 22, 2000
Last Revised: Apr 22, 2000
© Copyright 2000 Wei-Chang Shann 單維彰