首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

調和級數求和:C語言計算 1+1/2+...+1/n ≥ 15 時的 n 值

     編輯:程式設計綜合問答

數學背景

調和級數 H_n = 1 + 1/2 + 1/3 + ... + 1/n 發散,但增長極慢。求最小的 n 使得 H_n ≥ 15。

常見錯誤


// 錯誤 1:整數除法
s += 1 / i; // 1/i 為整數除法,i>1 時結果為 0

// 錯誤 2:浮點比較精度
if (s == 15.0) // 浮點數難以精確相等

// 錯誤 3:循環條件導致多加一次
for (i=1; s<=15.0; i++) { s += 1.0/i; } // 循環結束時 i 已經是 n+1

正確實現

#include <stdio.h>

int main() {
    int n = 1;
    double sum = 0.0;
    
    do {
        sum += 1.0 / n; // 強制浮點除法
        n++;
    } while (sum < 15.0);
    
    n--; // 循環結束時 n 已經多加 1
    printf("n = %d\n", n);
    printf("sum = %.10f\n", sum);
    return 0;
}

運行結果

n = 1835421
sum = 15.0000004406

關鍵點總結

  • 使用 1.0 / n 確保浮點除法。
  • 採用 do-while 或 while 先加後判斷,避免邊界誤差。
  • 循環結束時計數器需回退一步(或調整初始值)。
  • 調和級數增長極慢,n ≈ e^(15-γ) ≈ 1.8×10^6(γ 為歐拉常數),驗證結果合理。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved