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

C 語言進階練習:交替級數求和 1 - 1/2 + 1/3 - 1/4 + ... + 1/9

     編輯:關於C語言

問題描述

計算交替調和級數的前 9 項和:f = 1 - 1/2 + 1/3 - 1/4 + ... + 1/9。此問題考察符號交替控制與浮點數運算。

核心實現:符號翻轉變量法

#include <stdio.h>

#define N 9

void f(int m);

int main() {
    f(N);
    return 0;
}

void f(int m) {
    int i;
    int k = 1;          // 符號控制變量:1 → -1 → 1 ...
    double sum = 0.0;   // 必須用浮點型

    for (i = 1; i <= m; i++) {
        sum += 1.0 / i * k;  // 1.0 強制浮點除法
        k = -k;              // 符號翻轉:核心技巧
    }
    printf("1-1/2+1/3-1/4+...+1/9=%lf\n", sum);  // 約 0.7456
}

關鍵技術點深度解析

1. 符號交替的三種實現方式

方法代碼片段優缺點
符號變量翻轉(推薦)k = -k;簡潔高效,無額外計算
條件判斷if (i%2==0) sum -= ...; else sum += ...;直觀但有分支開銷
數學函數pow(-1, i+1)函數調用開銷大,浮點誤差風險

2. 浮點數精度陷阱

  • 整數除法截斷:1 / i 在 i>1 時結果為 0,必須寫成 1.0 / i 強制浮點除法。
  • 精度選擇:double (15-17 位有效數字) 優於 float (6-7 位),級數求和累積誤差時尤為重要。
  • 輸出格式:%lf 對應 double,%f 亦可(printf 統一處理)。

3. 級數收斂性數學背景

此為萊布尼茨級數的部分和:1 - 1/3 + 1/5 - ... = π/4。但本題為調和級數變體 Σ(-1)^(n+1)/n,收斂至 ln(2) ≈ 0.6931。前 9 項和 0.7456 尚未充分收斂,需更多項逼近極限。

延伸練習

  1. 修改程式計算前 100 項和,觀察向 ln(2) 收斂過程。
  2. 實現通用函數 double alt_harmonic(int n) 返回前 n 項和。
  3. 比較 float/double/long double 精度差異。

總結

交替級數求和是「循環 + 狀態變量 + 浮點運算」的綜合訓練。掌握 k = -k 符號翻轉技巧、浮點除法強制轉換、精度類型選擇,為後續數值計算程序打下堅實基礎。

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