本文收錄經典 C 語言練習題第 31-50 題,涵蓋字符處理、控制台圖形、函數遞歸、排序、矩陣運算、數組操作、存儲類別、宏定義、條件編譯、水仙花數等核心知識點。每題包含分析、代碼、運行截圖說明。
| 序號 | 主題 | 核心知識點 |
|---|---|---|
| 31 | 星期判斷 | switch 嵌套、getch 無回顯輸入 |
| 32 | 按鍵變色 | textbackground、cprintf、getch |
| 33 | gotoxy 定位 | clrscr、gotoxy、textbackground |
| 34 | 函數調用練習 | 函數嵌套調用、循環計數 |
| 35 | 文本顏色設置 | textcolor、閃爍屬性 128+color |
| 36 | 100 以內素數 | 埃拉托斯特尼篩法、sqrt 優化 |
| 37 | 10 數選擇排序 | 選擇排序、數組下標操作 |
| 38 | 3×3 矩陣對角線和 | 二維數組、雙重循環、浮點累加 |
| 39 | 有序數組插入 | 數組後移、邊界判斷 |
| 40 | 數組逆序 | 首尾交換、對稱遍歷 |
| 41 | static 靜態變量 | 生命周期贯穿程序、初始化一次 |
| 42 | auto 自動變量 | 塊作用域、棧上分配 |
| 43 | static 內部靜態 | 塊作用域但靜態存儲 |
| 44 | external 外部變量 | 跨文件共享、全局作用域 |
| 45 | register 寄存器變量 | 建議存儲於寄存器、優化循環計數器 |
| 46 | 宏定義 SQ(x) | 宏參數括號陷阱、do-while 循環 |
| 47 | 宏交換變量 | 多語句宏用大括號+反斜杠換行 |
| 48 | 宏定義運算符 | 宏替換運算符、條件編譯演示 |
| 49 | #if #ifdef 綜合 | 條件編譯、宏定義/取消定義流程 |
| 50 | 水仙花數 | 位分離、pow 三次方、C++ iostream 寫法 |
#define N 101 int a[N]; for (i=2; i
- 外層只需跑到
sqrt(N),內層從i+1開始。- 標記法而非除法試除,效率高。
第 46-49 題:宏定義進階
#define SQ(x) (x)*(x)危險:SQ(a+1)展開為a+1*a+1。正確寫法#define SQ(x) ((x)*(x))。- 多語句宏用
do { ... } while(0)包裹,保證語句語義。- 條件編譯
#ifdef/#ifndef/#undef控制編譯分支。第 50 題:水仙花數(C++ 版)
for (int n=100; n<1000; n++) { int h=n/100, t=n/10%10, u=n%10; if (h*h*h + t*t*t + u*u*u == n) cout << n << " 是水仙花數\n"; }
- 用整數乘法代替
pow避免浮點誤差。- 展示 C++
iostream風格。學習建議
- 先不看代碼,根據分析自己寫一遍。
- 對比 TC (conio.h) 和標準 C (stdio.h) 的差異,嘗試移植到 GCC/Clang。
- 重點掌握:宏定義陷阱、存儲類別區別、排序/查找基礎算法。