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 xx 以弧度解釋
cos(x)cos xx 以弧度解釋
tan(x)tan xx 以弧度解釋
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 xx>0
log10(x)log10 xx>0
pow(x,y)xy,若 x=0、 y 必須 >0,若 x<0、y 必須是整數
sqrt(x)根號 xx>=0
ceil(x)x 的最小整數上界
floor(x)x 的最大整數下界
fabs(x)|x|
ldexp(x,n)2nx
fmod(x,y)x/y 得整數商的餘數
以下是一些附帶說明。

習題

  1. 寫一個程式,利用牛頓法計算 cos x = ex 的最大負根。 所得的答案需使得 |cos x - ex| < 10-5。 (必需在 C 程式中完成,不可藉用其他軟體。)
  2. 費波那契數列的定義如下:F0=1、F1=1、 當 n>=2 時 Fn = Fn-1 + Fn-2。 寫一個程式,計算並輸出 F40
  3. 找出以下數列的一般項關係
        1   2   4   7  11  16  22 ...
    
    寫一個程式,輸出以上數列的前 11 項,並輸出它們的連乘積。
  4. 寫一個程式,利用上黎曼和與下黎曼和 (upper and lower Riemann sum), 估計以下的定積分值,並確保該估計值與真值的誤差 (絕對值) 在 10-5 以內 (必需在 C 程式中完成,不可藉用其他軟體。)
    \int_0^1 \sqrt{1+9x^4}\,dx
  5. 我們知道以下級數等式。但是,此級數的收斂速度非常之慢。 寫一個程式來測試,看看需要多少項,才能夠比祖沖之的密率 (355/113) 更為準確? (必需在 C 程式中完成,不可藉用其他軟體。)
    \pi = 4\times\left( 1 - \frac13 + \frac15 - \frac17 + \frac19 -

[BCC16-C]
單維彰 (2000/04/22) ---
[Prev] [Next] [Up]