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

C語言級數求和:三種迴圈實現 1 - 1/2 + 1/3 - 1/4 + ... + 1/99 - 1/100

     編輯:關於C語言

C語言級數求和:三種迴圈實現 1 - 1/2 + 1/3 - 1/4 + ... + 1/99 - 1/100

交替調和級數 S = Σ (-1)^(k+1) / k (k=1..100) 是迴圈控制與正負號切換的經典練習。本文展示 for、while、do-while 三種寫法,並分析浮點精度與優化技巧。

方法一:for 迴圈

#include <stdio.h>

int main() {
    double sum = 0.0;
    int sign = 1;  // 正負號:1, -1, 1, -1...
    
    for (int i = 1; i <= 100; i++) {
        sum += sign * (1.0 / i);  // 1.0 強制浮點除法
        sign = -sign;             // 翻轉正負號
    }
    printf("sum = %.10f\n", sum);  // 0.6881721793
    return 0;
}

方法二:while 迴圈

int main() {
    double sum = 0.0;
    int sign = 1;
    int i = 1;
    
    while (i <= 100) {
        sum += sign * (1.0 / i);
        sign = -sign;
        i++;
    }
    printf("sum = %.10f\n", sum);
    return 0;
}

方法三:do-while 迴圈

int main() {
    double sum = 0.0;
    int sign = 1;
    int i = 1;
    
    do {
        sum += sign * (1.0 / i);
        sign = -sign;
        i++;
    } while (i <= 100);
    printf("sum = %.10f\n", sum);
    return 0;
}

三種迴圈對比

特性forwhiledo-while
判斷時機迴圈前迴圈前迴圈後
執行保證可能 0 次可能 0 次**至少 1 次**
適用場景已知次數未知次數、條件複雜菜單、至少一次輸入
本題適用性⭐⭐⭐ 最佳⭐⭐ 適用⭐ 適用但非首選

關鍵技術細節

  1. 正負號切換:sign = -sign 比 pow(-1, i) 高效百倍,避免函數調用與浮點運算。
  2. 浮點除法:1.0 / i 強制雙精度運算;1 / i 為整數除法,i>1 時結果全為 0。
  3. 累加順序影響精度:由小項到大項累加(反向迴圈)可減少誤差,但 100 項雙精度誤差已極小(~1e-16)。
  4. 數學背景與驗證

    交替調和級數收斂至 ln(2) ≈ 0.6931471806。100 項部分和:

    S_100 = 0.688172179310195...
    ln(2)   = 0.693147180559945...
    誤差    ≈ 0.004975 (約 1/201,符合萊布尼茨判別法誤差界)

    進階:Kahan 求和算法提高精度

    double kahan_sum() {
        double sum = 0.0, c = 0.0;  // c 為補償項
        int sign = 1;
        for (int i = 1; i <= 100; i++) {
            double term = sign * (1.0 / i);
            double y = term - c;
            double t = sum + y;
            c = (t - sum) - y;
            sum = t;
            sign = -sign;
        }
        return sum;
    }

    總結

    **for 迴圈是已知次數迭代的首選**,結構清晰、語意明確。掌握 sign = -sign 正負號翻轉技巧、強制浮點除法、累加順序對精度的影響,是數值計算程式設計的基本功。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved