![]() |
C 教材:更多的迭代範例 |
在這一節裡面,我們列舉許多使用迭代語法結構 (亦即 while 或 for) 的基本數學計算範例。 讀者透過反覆的觀察、模擬與練習,務必掌握這些最基本的語法。
【例一】一個關於高斯 (Carl Gauss) 的著名軼事,是他在八歲的時候, 發明了一個很聰明的辦法,計算
#include <stdio.h> main() { int n, sum; n = 1; sum = 0; while (n <= 100) { sum = sum + n; n = n + 1; } printf("%d\n", sum); }
#include <stdio.h> main() { int n, sum; sum = 0; for (n=1; n <= 100; ++n) { sum = sum + n; } printf("%d\n", sum); }
#include <stdio.h> main() { int n, sum; for (n=1, sum=0; n <= 100; ++n) sum = sum + n; printf("%d\n", sum); }
以下的例子,都可以有 while 和 for 兩種版本, 但是我們都只挑一種語法來寫。請讀者自行練習另外一種。 而且,以下的例子,我們都不刻意縮短程式,請讀者自行練習縮短的語法。
【例二】計算
#include <stdio.h> main() { int n; double sum; sum = 0.0; for (n=1; n <= 1000; ++n) { sum = sum + 1.0/(n*n); } printf("%.4f\n", sum); }
以上那種類型的程式,初學者最常犯的錯誤有:
【例三】計算
#include <stdio.h> main() { int n; double x; x = 0.0; n = 1; while (n <= 500) { x = x + 1.0/(n*(n+1)); n = n + 1; } printf("%f\n", x); }
【例四】計算 x,並以 %f 格式輸出。
#include <stdio.h> main() { int n; double x; x = 0.0; for (n=0; n<=500; ++n) { x = x + 1.0/(2*n+1); } printf("%f\n", x); }
【例五】計算 x,並以 %f 格式輸出。
#include <stdio.h> main() { int n; double x; x = 0.0; for (n=1; n <= 500; ++n) { x = x + n/(n*n+1.0); } printf("%f\n", x); }
其實,像前一題那種題目,也可以直接將 n 宣告成浮點數就算了。如下。
#include <stdio.h> main() { double n, x; x = 0.0; for (n=1; n <= 500; ++n) { x = x + n/(n*n+1); } printf("%f\n", x); }
【例六】計算 8! = 1*2*3*4*5*6*7*8。
其實我們可以就只寫
printf("%d\n", 1*2*3*4*5*6*7*8);
但是為了練習,我們仍然用迭代迴圈來做。答案是 40320
#include <stdio.h> main() { int fac, n; fac = 1; for (n=1; n <= 8; ++n) { fac = fac*n; } printf("%d\n", fac); }
【例七】計算 2, 4, 6, ..., 16 的連乘積。 答案是 28*(8!) = 256 * 40320 = 10321920。 純粹為了練習,我們要電腦笨笨地做 2*4*8*...*16。
#include <stdio.h> main() { int n, prod; prod = 1; n = 2; while (n <= 16) { prod = prod * n; n = n+2; } printf("%d\n", prod); }
【例八】計算 2!, 3!, 4!, ..., 10!。 比 10 更高的階乘,很快就超過了 int 資料型態的上限, 我們就不在這裡討論了。
#include <stdio.h> main() { int n, fac, k; n = 2; while (n <= 10) { fac = 1; for (k=1; k <= n; ++k) { fac = fac*k; } printf("%2d! = %10d\n", n, fac); n = n + 1; } }
2! = 2 3! = 6 4! = 24 5! = 120 6! = 720 7! = 5040 8! = 40320 9! = 362880 10! = 3628800
【例九】計算 x,並以 %f 格式輸出。
#include <stdio.h> main() { int n; double x; x = 1; for (n=1; n<=500; ++n) { x = x * (2*n-1) / (2*n+1); } printf("%f\n", x); }
習題
![]() |
![]() |
單維彰 (2001/01/06) --- 04/05/19 (單) |