《C Primer Plus 第六版中文版》第 198 頁呈現了一個極具教學價值的程式範例,用極簡代碼實現輸入數列的最大值與最小值查找。本文記錄核心代碼片段與算法精妙之處。
書中通過循環讀取輸入,動態更新最大值與最小值:
#include <stdio.h>
#include <limits.h> // 提供 INT_MAX, INT_MIN
int main(void) {
int num, max = INT_MIN, min = INT_MAX;
printf("請輸入整數(輸入非數字結束):\n");
while (scanf("%d", &num) == 1) {
if (num > max) max = num;
if (num < min) min = num;
}
printf("最大值:%d\n最小值:%d\n", max, min);
return 0;
}
max = INT_MIN、min = INT_MAX 確保第一個輸入值必定更新兩者,無需特殊判斷首次輸入scanf("%d", &num) == 1 同時完成讀取與格式驗證,非整數輸入自動終止<limits.h>定義了各資料型別的極限值,常用常數:
| 常數 | 含義 | 典型值 (32位系統) |
|---|---|---|
| INT_MAX | int 最大值 | 2,147,483,647 |
| INT_MIN | int 最小值 | -2,147,483,648 |
| LONG_MAX | long 最大值 | 9,223,372,036,854,775,807 |
| CHAR_BIT | 位元組位數 | 8 |
此模式可擴展至:
FLT_MAX/FLT_MIN,<float.h>)stdin 替換為 FILE*)這個看似簡單的範例展現了 C 語言「以簡馭繁」的哲學:善用標準庫常數、循環不變式設計、輸入迴圈條件判斷融合,僅十幾行代碼即構建出健壯、高效、可擴展的解決方案。這正是《C Primer Plus》作為經典教材的魅力所在——在基礎語法中蘊含工程智慧。