|
|
C 教材:數學函式庫 |
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 項,並輸出它們的連乘積。
![]() |
![]() |
| 單維彰 (2000/04/22) --- |