經典機試題目:根據輸入的浮點數 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 映射為區間編號)。