C 提供一些基本的數學函式,像是 sin()、sqrt() 等等。 現在我們介紹,這些函式要怎麼用。
首先,這些函式都需要先說另一個檔頭指令:
#include <math.h>然後就可以在我們自己寫的函式中呼叫這些數學函式。 可是,這些數學函式的實際內容,卻不在標準外部函式群中, 所以 C 不會自動找到它們。因此,在編譯的時候,要加一個奇怪的參數 -lm (是 dash ell m,不是 minus one m)。詳細的原因,我們暫不說明。 以下我們簡單地示範,呼叫 pow() 來計算 2-5。
#include <stdio.h> #include <math.h> /* 示範數學函式的使用 (test-pow.c) */ main() { printf("%f\n", pow(2, -5)); }
shell% gcc test-math.c -lm shell% a.out 0.031250因為 %f 格式內定輸出 6 為小數,所以會看到答案的尾巴多一個 0。
以下我們介紹數學函式的用法。
sin(x) | sin x,x 以弧度解釋 |
cos(x) | cos x,x 以弧度解釋 |
tan(x) | tan x,x 以弧度解釋 |
asin(x) | sin-1 x,定義域是 [-1, 1]、 值域是 [-pi/2, pi/2] |
acos(x) | cos-1 x,定義域是 [-1, 1]、 值域是 [0, pi] |
atan(x) | tan-1 x,值域是 [-pi/2, pi/2] |
atan2(y,x) | tan-1 y/x,值域是 [-pi, pi] |
sinh(x) | sinh x |
cosh(x) | cosh x |
tanh(x) | tanh x |
exp(x) | ex |
log(x) | ln x,x>0 |
log10(x) | log10 x,x>0 |
pow(x,y) | xy,若 x=0、 y 必須 >0,若 x<0、y 必須是整數 |
sqrt(x) | 根號 x,x>=0 |
ceil(x) | x 的最小整數上界 |
floor(x) | x 的最大整數下界 |
fabs(x) | |x| |
ldexp(x,n) | 2nx |
fmod(x,y) | x/y 得整數商的餘數 |
#include <stdio.h> #include <math.h> /* 示範數學函式的使用 (test-ceil.c) */ main() { int a, b; a = ceil(-3.78); b = floor(-3.78); printf("%d %d\n", a, b); }
printf("%d %d\n", ceil(-3.78), floor(-3.78));printf() 不會自動做資料型態的轉換。 它會拿去 ceil(-3.78) 之 double 型態的位元組, 然後將它以 int 型態來解讀。
if (n%2) printf("%d is an odd number.\n", n); else printf("%d is an even number.\n", n);
習題
1 2 4 7 11 16 22 ...寫一個程式,輸出以上數列的前 11 項,並輸出它們的連乘積。