首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言循環控制程式範例:圓周率計算與質數判斷

     編輯:關於C語言

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

範例 6.10:以萊布尼茲公式逼近 π 值

萊布尼茲公式為:

萊布尼茲公式

分析規律可知:分母為奇數數列 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 修正版,修正了早期版本的邏輯錯誤。

範例 6.11:判斷輸入整數是否為質數

質數定義:大於 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;
}

範例 6.12:列印 100 到 200 之間的所有質數

外層迴圈遍歷 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() 減少試除次數,提升效能。
  • 質數篩選時跳過偶數,迴圈步進設為 2。
  • break 配合迴圈後判斷 i > limit,是判斷質數的經典模式。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved