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

全國計算機二級C語言真題精解:級數求π值(精度控制)

     編輯:關於C語言

全國計算機二級C語言真題精解:級數求π值(精度控制)

本題為全國計算機等級考試二級C語言經典真題(2010.9、2012.3年份),考察級數求和、精度控制循環、浮點數運算等核心考點。題目要求根據給定公式計算π值,當項值小於給定精度eps時停止迭代。

題目描述

根據以下公式求π的值(要求精度0.0005,即某項小於0.0005時停止迭代):

π = 2 × (1 + 1/3 + (1×2)/(3×5) + (1×2×3)/(3×5×7) + ...)

通項公式:第n項 = (n!) / ((2n+1)!!) = 第(n-1)項 × n/(2n+1)

參考代碼(填空題形式)

#include <stdio.h>
#include <conio.h>
#include <math.h>

double fun(double eps) {
    double s = 1.0, term = 1.0;  // s: 累加和, term: 當前項
    int n = 1;
    while (term >= eps) {        // 精度控制:項值 >= eps 繼續
        term = term * n / (2 * n + 1);  // 遞推公式
        s = s + term;
        n++;
    }
    return 2 * s;  // 最終乘以2
}

void main() {
    double x;
    printf("Input eps: ");
    scanf("%lf", &x);
    printf("\neps = %lf, PI = %lf\n", x, fun(x));
}

算法邏輯逐行解析

  1. 初始化:s = 1.0(首項),term = 1.0(首項值),n = 1(項序號從1開始)
  2. 循環條件:term >= eps — 當前項值尚未小於要求精度,繼續疊代
  3. 遞推計算:term = term * n / (2*n + 1)
    • n=1: term = 1 × 1/3 = 1/3
    • n=2: term = 1/3 × 2/5 = 2/15
    • n=3: term = 2/15 × 3/7 = 6/105 = 2/35
    • ... 避免階乘溢出,數值穩定
  4. 累加求和:s += term
  5. 項序號遞增:n++
  6. 最終結果:return 2 * s — 公式前導係數2

運行示例

輸入:0.0005

輸出:eps = 0.000500, PI = 3.141593

程序運行截圖

核心考點總結

考點關鍵技術易錯點
級數求和遞推公式替代階乘直接算階乘導致溢出/效率低
精度控制while(term >= eps)條件寫反、用總和判斷而非當前項
浮點數運算double 類型、%lf 格式用 float 精度不足、%f 匹配錯誤
循環邊界首項已加,循環從第2項開始少加首項或重複加首項

擴展思考

  • 收斂速度:該級數收斂較慢,高精度需極多項。工程上常用馬青公式、Chudnovsky算法等快速收斂級數
  • 誤差分析:交替級數誤差不超過第一個被忽略項;本級數為正項級數,截斷誤差約等於下一項值
  • 數值穩定性:遞推公式避免了大數除大數,優於直接計算階乘比值

總結

本題是二級C語言考試中「函數填空」類型的典型代表,核心考察:

  1. 理解數學公式並轉化為遞推代碼
  2. 正確使用 while 循環實現精度控制
  3. 掌握 double 類型與 %lf 的輸入輸出
  4. 避免整數除法陷阱(此處 n/(2n+1) 需至少一方為浮點數,代碼中 term 為 double 已隱式轉換)

熟練掌握此類級數求和模式,對考試通關及工程數值計算基礎構建均有重要價值。

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