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

經典 C 語言程序設計 100 例:從入門到精通的完整指南

     編輯:關於C

本文匯總了《C 語言程序設計》經典 100 例,涵蓋基礎語法、數組操作、指針應用、鏈表結構、文件處理、圖形繪製、遞歸算法、位運算等核心知識點。每例均包含問題分析、源代碼及運行驗證,適合系統性鞏固 C 語言編程能力。

基礎算法與邏輯控制(第 1-10 例)

例 1:三位數不重複排列

從 {1,2,3,4} 中選三位組成互不相同的三位數。三重循環暴力枚舉,條件判斷 i!=j && i!=k && j!=k 去重。核心:嵌套循環窮舉 + 條件過濾。

例 2:企業利潤分級提成

按利潤區間梯度計算獎金:≤10萬 10%,10-20萬超額 7.5%,20-40萬 5%,40-60萬 3%,60-100萬 1.5%,>100萬 1%。技巧:預計算各區間基礎獎金,if-else 鏈定位區間,避免重複乘除。

例 3:完全平方數判定

求滿足 n+100=x² 且 n+268=y² 的整數。sqrt() 開方後判斷 x*x == n+100,利用數學性質縮小搜索空間。

例 4:日期轉年內天數

累加前幾月天數,閏年判定 (year%400==0) || (year%4==0 && year%100!=0),3 月後加 1 天。注意:switch 穿透特性簡化月份累加。

例 5:三數排序(選擇法思想)

兩兩比較交換,將最小值移至 x,次小移至 y,最大留在 z。本質:冒泡/選擇排序的三元素簡化版。

例 6-10:字符圖形輸出

  • 例 6:硬編碼輸出字母 C
  • 例 7:利用擴展 ASCII 碼 (176, 219) 繪製菱形花紋
  • 例 8:雙重循環輸出 9×9 乘法表,%-3d 左對齊格式化
  • 例 9:國際象棋棋盤,(i+j)%2 判斷黑白格,SetConsoleOutputCP(437) 啟用圖形字符
  • 例 10:樓梯圖案 + 笑臉字符 \1

經典數學建模(第 11-30 例)

例 11:斐波那契兔子問題

遞推關係 f[n] = f[n-1] + f[n-2],單循環雙變量滾動計算,i%2 控制換行格式。

例 12:素數篩選 (101-200)

試除法優化:只需除以 2~sqrt(n),leap 標記位剪枝。缺陷:原代碼 h%10 變量未定義,應為 sum%10。

例 13:水仙花數 (三位數自戀數)

分解百/十/個位:i=n/100, j=n/10%10, k=n%10,判斷 i³+j³+k³ == n。

例 14:質因數分解

從最小質數 2 開始試除,能整除則輸出並縮減 n,否則 k++。while(n!=i) 確保分解完全。

例 15:條件運算符嵌套分級

grade = score>=90 ? 'A' : (score>=60 ? 'B' : 'C'),展示三元運算符右結合性。

例 16:最大公約數/最小公倍數(輾轉相除法)

gcd(a,b) = gcd(b, a%b) 直到 b==0,lcm = a*b/gcd。注意:先確保 a>=b。

例 17:字符分類統計

getchar() 逐字符讀取直到 \n,利用 ASCII 範圍判斷字母/數字/空格/其他。關鍵:getchar() 從緩衝區讀取,含換行符。

例 18:特殊數列求和 a+aa+aaa+...

規律:tn = tn-1*10 + a,sn = sn-1 + tn。a*=10 維護遞增量。

例 19:完數(完全數)查找

因子和等於自身。雙重循環累加真因子,static int k[10] 存儲因子輸出。

例 20:自由落體反彈

第 1 次落地 100m,之後每次經過 2*height。sn += 2*hn; hn /= 2 迭代 10 次。

例 21:猴子吃桃(逆向思維)

第 10 天剩 1 個,倒推第 1 天:x1 = (x2+1)*2,循環 9 次。

例 22:乒乓球賽名單推導

三重循環枚舉對手組合,約束條件:a!=x, c!=x, c!=z,輸出唯一解。

例 23:菱形打印(分上下兩部分)

上半部:空格遞減、星號遞增;下半部:空格遞增、星號遞減。雙重循環控制行列。

例 24:分數數列求和 2/1 + 3/2 + 5/3 + ...

分子分母遞推:new_a = a+b, new_b = a,臨時變量 t 保存舊分子。

例 25:階乘累加 1!+2!+...+20!

t *= n; s += t,單循環同時維護當前階乘與累加和。

例 26-28:遞歸經典

  • 例 26:遞歸求階乘 fact(n) = n*fact(n-1)
  • 例 27:遞歸逆序輸出字符,利用調用棧後進先出特性
  • 例 28:遞歸計算年齡 age(n) = age(n-1)+2, age(1)=10

例 29-30:數字分解與回文判斷

除 10 取余分解各位。回文判斷:ge==wan && shi==qian。

字符處理與進階控制(第 31-50 例)

例 31:星期幾首字母判斷

getch() 無回顯讀取,switch 嵌套 if 處理同首字母情況(S/T)。

例 32-35:控制台圖形界面

  • 例 32:system("color N") 切換控制台顏色
  • 例 33:gotoxy() 定位光標,clrscr() 清屏
  • 例 34:函數調用鏈 main → three_hellos → hello_world
  • 例 35:textcolor() 設置前景色,128+15 閃爍屬性

例 36:埃拉托斯特尼篩法求素數

標記法:a[i]=0 表示合數。雙重循環劃掉倍數,最後輸出未被標記者。

例 37:十數排序(選擇/冒泡雙實現)

選擇排序:每輪選最小值換到前端。冒泡排序:相鄰比較大數後沉。註釋詳解兩種邏輯差異。

例 38:3×3 矩陣主對角線求和

sum += a[i][i],雙重循環輸入,單循環累加對角線。

例 39:有序數組插入元素

從前向後找第一個大於目標值的位置,後續元素整體後移一位,break 跳出外層循環。

例 40:數組逆序(首尾交換法)

只需遍歷前半段:swap(a[i], a[n-1-i]),i < n/2。

例 41-45:存儲類別關鍵字實戰

  • 例 41:static 局部變量保持值,跨函數調用增長
  • 例 42:auto(默認)塊作用域變量,內層遮蔽外層
  • 例 43:塊內 static 變量初始化一次,生命周期至程序結束
  • 例 44:extern 全局變量跨文件聲明(單文件演示作用域規則)
  • 例 45:register 建議寄存器存儲,優化頻繁訪問變量

例 46-50:預處理指令綜合

  • 例 46:#define SQ(x) (x)*(x) 宏定義帶參數,注意括號防優先級錯誤
  • 例 47:多語句宏用 \ 換行,{...} 包裹形成語句塊
  • 例 48:宏定義運算符 LAG >, SMA <, EQ == 重構可讀性
  • 例 49:#ifdef/#ifndef/#undef 條件編譯控制編譯流程
  • 例 50:#include "test.h" 實現宏定義模塊化復用

位運算專題(第 51-55 例)

運算符真值表典型用途
& (與)同 1 為 1掩碼取位、清零指定位
| (或)有 1 為 1置位、合併標誌位
^ (異或)異為 1翻轉位、無暫存變量交換、校驗和
~ (取反)0↔1構造掩碼 ~(~0<<n) 取低 n 位
<< / >>左乘右除 2 的冪快速乘除、位拼接、提取特定區段

例 54 綜合演示:a>>4 右移 4 位,~(~0<<4) 構造 0x0F 掩碼,& 取出原 4-7 位。

BGI 圖形庫繪圖(第 56-65 例)

環境依賴:Turbo C / Borland C 圖形模式,現代編譯器需配置 graphics.h 移植版(如 WinBGI)。

  • 例 56:同心圓漸變半徑 k += j; j += 0.3
  • 例 57:放射狀直線,端點坐標對稱擴展
  • 例 58:同心矩形 + 圓 + 文本,settextstyle/outtextxy 輸出文字
  • 例 59:橢圓參數方程 x = x0 + a*cosθ, y = y0 + b*sinθ 繪製放射狀線條
  • 例 60:彈球動畫,邊界反射 dx=-dx,顏色循環
  • 例 61:楊輝三角 a[i][j] = a[i-1][j-1] + a[i-1][j],邊界為 1
  • 例 62:putpixel 繪製網格點陣
  • 例 63-64:ellipse 繪製變形橢圓族、矩形橢圓組合
  • 例 65:圓周等分點互連弦線,AspectRatio 修正橫縱比

指針與鏈表進階(第 66-74 例)

例 66:指針交換排序三數

swap(int*, int*) 通過地址交換實際值,main 中傳遞變量地址。

例 67:數組極值交換

單次遍歷記錄最大/最小值指針,分別與首尾元素交換。注意:原書答案有邏輯缺陷,需分開處理。

例 68:數組循環右移 m 位

遞歸實現:每次將最後一個元素移到最前,遞歸 m 次。優化:三次逆序法 O(n) 時間 O(1) 空間。

例 69:約瑟夫環問題

循環鏈表模擬:num[i]=i+1 初始化,0 標記出局,報數到 3 置零,剩最後一個非零元素。

例 70:指針實現字符串長度

while(*p++ != '\0') len++,指針遍歷直到終結符。

例 71:學生記錄輸入輸出(結構體數組)

struct student {num, name, score[4]},分離 input/print 函數,主函數調用。

例 72-74:單鏈表創建/逆序/連接/排序

  • 例 72:頭插法建表,malloc 分配節點,尾節點 next=NULL
  • 例 73:構建時頭插天然逆序,輸出即為逆序
  • 例 74:create_list/concatenate/selection_sort/delete_node 模塊化操作

綜合應用與文件操作(第 75-100 例)

例 75-80:邏輯推理與數學趣題

  • 例 75:邏輯謎題「誰說真話」,布爾表達式組合求解
  • 例 76:函數指針數組 float (*fp)() 實現奇偶分流求和
  • 例 77:二級指針 char **q 遍歷字符串數組
  • 例 78:結構體指針遍歷找最大年齡,原代碼邏輯錯誤:q=p++ 應為 q=p; p++
  • 例 79:字符串指針數組排序,swap 交換指針而非拷貝內容
  • 例 80:猴子分桃逆向遞推,i+=4 優化搜索步長

例 81-85:數制轉換與數論

  • 例 81:方程求解 809*?? = 800*?? + 9*?? + 1,暴力枚舉兩位數
  • 例 82:八進制字符串轉十進制,n = n*8 + (*p-'0') 霍納法則
  • 例 83:0-7 組成奇數計數,末位固定 4 種選擇,首位非零,中間位 8 進制
  • 例 84:哥德巴赫猜想驗證,偶數拆分為兩素數之和
  • 例 85:最小全 9 數被素數整除,sum = 9, 99, 999... 迭代構造

例 86-90:字符串算法

  • 例 86:有序字符串歸並 strcat 拼接剩餘尾部
  • 例 87:結構體值傳遞不影響實參,函數內修改副本
  • 例 88:讀 7 個 1-50 整數,打印對應數量星號
  • 例 89:四位數加密:+5 模 10,首尾/中間交換
  • 例 90:數組就地逆序,雙指針 i++, j-- 交換

例 91-94:時間函數應用

  • 例 91:time()/ctime()/localtime()/gmtime() 多種時間格式
  • 例 92-93:time() 秒級 / clock() 毫秒級 計時代碼執行時間
  • 例 94:猜數字遊戲,difftime 計算反應時間,分級評價

例 95:家庭財務管理系統(控制台 UI)

完整交互程序:gotoxy 定位繪製界面,Tab 瀏覽記錄,Esc 退出。文件 home.dat 存儲 日期 商品 金額,支持記賬/查賬/統計總額。

例 96-100:文件與字符串綜合

  • 例 96:strstr 思想手動實現子串計數
  • 例 97:鍵盤輸入寫文件,# 結束,fputc/putchar 同步顯示
  • 例 98:輸入轉大寫存文件,! 結束,fgets 回讀驗證
  • 例 99:合併兩文件字符並排序輸出新文件
  • 例 100:結構體二進制寫文件 fwrite(&stu[i], sizeof(struct), 1, fp),包含學號/姓名/三門成績/平均分

學習建議:按章節逐例敲碼運行,重點攻克指針、鏈表、遞歸、文件操作四大難點。對照現代 C 標準(C99/C11)修正舊代碼缺陷(如 gets→fgets, void main→int main),構建扎實的系統級編程功力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved