在C語言程式設計中,循環控制是核心基礎之一。本文透過三個經典範例,示範如何運用 for 迴圈解決數學計算與邏輯判斷問題,涵蓋萊布尼茲公式求圓周率、質數檢測以及區間質數篩選。
萊布尼茲公式為:

分析規律可知:分母為奇數數列 1、3、5、7…,第 n 項分母為 2n-1;正負號交替,第 n 項係數為 pow(-1, n+1)。累加前 10,000 項並乘以 4 即可逼近 π。
#include <stdio.h>
#include <math.h>
int main(void) {
double pi = 0, term;
int i;
for (i = 1; i < 10000; i++) {
term = pow(-1.0, i + 1) / (2 * i - 1);
pi += term;
printf("%lf\n", 4 * pi); // 輸出每項逼近值
}
printf("最終 π ≈ %lf\n", 4 * pi);
return 0;
}
備註:迴圈次數越多,精度越高,但執行時間也隨之增加。本範例為 2014-07-06 修正版,修正了早期版本的邏輯錯誤。
質數定義:大於 1 且僅能被 1 與自身整除。檢測時只需試除至 sqrt(m),若無因數則為質數。
#include <stdio.h>
#include <math.h>
int main(void) {
int m, i, limit;
printf("請輸入一個整數: ");
scanf("%d", &m);
limit = (int)sqrt(m);
for (i = 2; i <= limit; i++) {
if (m % i == 0) break;
}
if (i > limit)
printf("%d 是質數\n", m);
else
printf("%d 不是質數\n", m);
return 0;
}
外層迴圈遍歷 101~200 的奇數(偶數必非質數),內層同樣試除至開方。計數器 n 記錄質數總數。
#include <stdio.h>
#include <math.h>
int main(void) {
int m, i, limit, count = 0;
for (m = 101; m <= 200; m += 2) {
limit = (int)sqrt(m);
for (i = 2; i <= limit; i++) {
if (m % i == 0) break;
}
if (i > limit) {
printf("%d\n", m);
count++;
}
}
printf("共找到 %d 個質數\n", count);
return 0;
}
歷史修正:早期版本輸出格式混亂(含 if(n%n==0)printf("\n") 等難懂邏輯),經讀者 @ahlei、@婁 等回報,於 2014-07-06 重寫為現版本。
sqrt() 減少試除次數,提升效能。break 配合迴圈後判斷 i > limit,是判斷質數的經典模式。