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

分段函數求值:2001 年清華大學計算機研究生機試真題解析

     編輯:關於C語言

分段函數求值:2001 年清華大學計算機研究生機試真題解析

經典機試題目:根據輸入的浮點數 x,計算分段函數 y = f(x) 的值,結果保留三位小數。支援多組測試資料(EOF 結束)。

函數定義

y = -x + 2.5;              (0 ≤ x < 2)
y = 2 - 1.5(x - 3)(x - 3); (2 ≤ x < 4)
y = x/2 - 1.5;             (4 ≤ x < 6)

解題程式碼

#include <stdio.h>

int main(void) {
    double x, y;
    while (scanf("%lf", &x) != EOF) {
        if (x >= 0 && x < 2) {
            y = -x + 2.5;
        } else if (x >= 2 && x < 4) {
            y = 2 - 1.5 * (x - 3) * (x - 3);
        } else if (x >= 4 && x < 6) {
            y = x / 2.0 - 1.5;
        } else {
            // 題目未定義區間,視需求處理
            y = 0;
        }
        printf("%.3lf\n", y);
    }
    return 0;
}

測試範例

輸入:
1
2.5
5

輸出:
1.500
1.625
1.000

解題要點

  • 邊界條件:區間包含左邊界、不含右邊界([0,2)、[2,4)、[4,6)),使用 && 精確判斷。
  • 多組輸入:while (scanf("%lf", &x) != EOF) 迴圈讀取直到檔案結尾。
  • 輸出格式:%.3lf 強制保留三位小數,不足補零。
  • 型別選擇:使用 double 提高精度,避免 float 累積誤差。

延伸練習

  • 增加錯誤處理:輸入超出定義域時輸出特定提示。
  • 將分段函數封裝為獨立函數 double f(double x),提升可讀性與可測試性。
  • 嘗試使用 switch 配合整數區間索引重寫(需將 x 映射為區間編號)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved