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

C語言經典編程 50 例(三):第 31-50 題詳解與代碼

     編輯:關於C語言

C語言經典編程 50 例(三):第 31-50 題詳解與代碼

本文收錄經典 C 語言練習題第 31-50 題,涵蓋字符處理、控制台圖形、函數遞歸、排序、矩陣運算、數組操作、存儲類別、宏定義、條件編譯、水仙花數等核心知識點。每題包含分析、代碼、運行截圖說明。

題目速覽

序號主題核心知識點
31星期判斷switch 嵌套、getch 無回顯輸入
32按鍵變色textbackground、cprintf、getch
33gotoxy 定位clrscr、gotoxy、textbackground
34函數調用練習函數嵌套調用、循環計數
35文本顏色設置textcolor、閃爍屬性 128+color
36100 以內素數埃拉托斯特尼篩法、sqrt 優化
3710 數選擇排序選擇排序、數組下標操作
383×3 矩陣對角線和二維數組、雙重循環、浮點累加
39有序數組插入數組後移、邊界判斷
40數組逆序首尾交換、對稱遍歷
41static 靜態變量生命周期贯穿程序、初始化一次
42auto 自動變量塊作用域、棧上分配
43static 內部靜態塊作用域但靜態存儲
44external 外部變量跨文件共享、全局作用域
45register 寄存器變量建議存儲於寄存器、優化循環計數器
46宏定義 SQ(x)宏參數括號陷阱、do-while 循環
47宏交換變量多語句宏用大括號+反斜杠換行
48宏定義運算符宏替換運算符、條件編譯演示
49#if #ifdef 綜合條件編譯、宏定義/取消定義流程
50水仙花數位分離、pow 三次方、C++ iostream 寫法

精選重點解析

第 36 題:素數篩法優化

#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 風格。

學習建議

  1. 先不看代碼,根據分析自己寫一遍。
  2. 對比 TC (conio.h) 和標準 C (stdio.h) 的差異,嘗試移植到 GCC/Clang。
  3. 重點掌握:宏定義陷阱、存儲類別區別、排序/查找基礎算法。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved