本文匯總了《C 語言程序設計》經典 100 例,涵蓋基礎語法、數組操作、指針應用、鏈表結構、文件處理、圖形繪製、遞歸算法、位運算等核心知識點。每例均包含問題分析、源代碼及運行驗證,適合系統性鞏固 C 語言編程能力。
從 {1,2,3,4} 中選三位組成互不相同的三位數。三重循環暴力枚舉,條件判斷 i!=j && i!=k && j!=k 去重。核心:嵌套循環窮舉 + 條件過濾。
按利潤區間梯度計算獎金:≤10萬 10%,10-20萬超額 7.5%,20-40萬 5%,40-60萬 3%,60-100萬 1.5%,>100萬 1%。技巧:預計算各區間基礎獎金,if-else 鏈定位區間,避免重複乘除。
求滿足 n+100=x² 且 n+268=y² 的整數。sqrt() 開方後判斷 x*x == n+100,利用數學性質縮小搜索空間。
累加前幾月天數,閏年判定 (year%400==0) || (year%4==0 && year%100!=0),3 月後加 1 天。注意:switch 穿透特性簡化月份累加。
兩兩比較交換,將最小值移至 x,次小移至 y,最大留在 z。本質:冒泡/選擇排序的三元素簡化版。
%-3d 左對齊格式化(i+j)%2 判斷黑白格,SetConsoleOutputCP(437) 啟用圖形字符\1遞推關係 f[n] = f[n-1] + f[n-2],單循環雙變量滾動計算,i%2 控制換行格式。
試除法優化:只需除以 2~sqrt(n),leap 標記位剪枝。缺陷:原代碼 h%10 變量未定義,應為 sum%10。
分解百/十/個位:i=n/100, j=n/10%10, k=n%10,判斷 i³+j³+k³ == n。
從最小質數 2 開始試除,能整除則輸出並縮減 n,否則 k++。while(n!=i) 確保分解完全。
grade = score>=90 ? 'A' : (score>=60 ? 'B' : 'C'),展示三元運算符右結合性。
gcd(a,b) = gcd(b, a%b) 直到 b==0,lcm = a*b/gcd。注意:先確保 a>=b。
getchar() 逐字符讀取直到 \n,利用 ASCII 範圍判斷字母/數字/空格/其他。關鍵:getchar() 從緩衝區讀取,含換行符。
a+aa+aaa+...規律:tn = tn-1*10 + a,sn = sn-1 + tn。a*=10 維護遞增量。
因子和等於自身。雙重循環累加真因子,static int k[10] 存儲因子輸出。
第 1 次落地 100m,之後每次經過 2*height。sn += 2*hn; hn /= 2 迭代 10 次。
第 10 天剩 1 個,倒推第 1 天:x1 = (x2+1)*2,循環 9 次。
三重循環枚舉對手組合,約束條件:a!=x, c!=x, c!=z,輸出唯一解。
上半部:空格遞減、星號遞增;下半部:空格遞增、星號遞減。雙重循環控制行列。
分子分母遞推:new_a = a+b, new_b = a,臨時變量 t 保存舊分子。
t *= n; s += t,單循環同時維護當前階乘與累加和。
fact(n) = n*fact(n-1)age(n) = age(n-1)+2, age(1)=10除 10 取余分解各位。回文判斷:ge==wan && shi==qian。
getch() 無回顯讀取,switch 嵌套 if 處理同首字母情況(S/T)。
system("color N") 切換控制台顏色gotoxy() 定位光標,clrscr() 清屏main → three_hellos → hello_worldtextcolor() 設置前景色,128+15 閃爍屬性標記法:a[i]=0 表示合數。雙重循環劃掉倍數,最後輸出未被標記者。
選擇排序:每輪選最小值換到前端。冒泡排序:相鄰比較大數後沉。註釋詳解兩種邏輯差異。
sum += a[i][i],雙重循環輸入,單循環累加對角線。
從前向後找第一個大於目標值的位置,後續元素整體後移一位,break 跳出外層循環。
只需遍歷前半段:swap(a[i], a[n-1-i]),i < n/2。
static 局部變量保持值,跨函數調用增長auto(默認)塊作用域變量,內層遮蔽外層static 變量初始化一次,生命周期至程序結束extern 全局變量跨文件聲明(單文件演示作用域規則)register 建議寄存器存儲,優化頻繁訪問變量#define SQ(x) (x)*(x) 宏定義帶參數,注意括號防優先級錯誤\ 換行,{...} 包裹形成語句塊LAG >, SMA <, EQ == 重構可讀性#ifdef/#ifndef/#undef 條件編譯控制編譯流程#include "test.h" 實現宏定義模塊化復用| 運算符 | 真值表 | 典型用途 |
|---|---|---|
& (與) | 同 1 為 1 | 掩碼取位、清零指定位 |
| (或) | 有 1 為 1 | 置位、合併標誌位 |
^ (異或) | 異為 1 | 翻轉位、無暫存變量交換、校驗和 |
~ (取反) | 0↔1 | 構造掩碼 ~(~0<<n) 取低 n 位 |
<< / >> | 左乘右除 2 的冪 | 快速乘除、位拼接、提取特定區段 |
例 54 綜合演示:a>>4 右移 4 位,~(~0<<4) 構造 0x0F 掩碼,& 取出原 4-7 位。
環境依賴:Turbo C / Borland C 圖形模式,現代編譯器需配置 graphics.h 移植版(如 WinBGI)。
k += j; j += 0.3settextstyle/outtextxy 輸出文字x = x0 + a*cosθ, y = y0 + b*sinθ 繪製放射狀線條dx=-dx,顏色循環a[i][j] = a[i-1][j-1] + a[i-1][j],邊界為 1putpixel 繪製網格點陣ellipse 繪製變形橢圓族、矩形橢圓組合AspectRatio 修正橫縱比swap(int*, int*) 通過地址交換實際值,main 中傳遞變量地址。
單次遍歷記錄最大/最小值指針,分別與首尾元素交換。注意:原書答案有邏輯缺陷,需分開處理。
遞歸實現:每次將最後一個元素移到最前,遞歸 m 次。優化:三次逆序法 O(n) 時間 O(1) 空間。
循環鏈表模擬:num[i]=i+1 初始化,0 標記出局,報數到 3 置零,剩最後一個非零元素。
while(*p++ != '\0') len++,指針遍歷直到終結符。
struct student {num, name, score[4]},分離 input/print 函數,主函數調用。
malloc 分配節點,尾節點 next=NULLcreate_list/concatenate/selection_sort/delete_node 模塊化操作float (*fp)() 實現奇偶分流求和char **q 遍歷字符串數組q=p++ 應為 q=p; p++swap 交換指針而非拷貝內容i+=4 優化搜索步長809*?? = 800*?? + 9*?? + 1,暴力枚舉兩位數n = n*8 + (*p-'0') 霍納法則sum = 9, 99, 999... 迭代構造strcat 拼接剩餘尾部i++, j-- 交換time()/ctime()/localtime()/gmtime() 多種時間格式time() 秒級 / clock() 毫秒級 計時代碼執行時間difftime 計算反應時間,分級評價完整交互程序:gotoxy 定位繪製界面,Tab 瀏覽記錄,Esc 退出。文件 home.dat 存儲 日期 商品 金額,支持記賬/查賬/統計總額。
strstr 思想手動實現子串計數# 結束,fputc/putchar 同步顯示! 結束,fgets 回讀驗證fwrite(&stu[i], sizeof(struct), 1, fp),包含學號/姓名/三門成績/平均分學習建議:按章節逐例敲碼運行,重點攻克指針、鏈表、遞歸、文件操作四大難點。對照現代 C 標準(C99/C11)修正舊代碼缺陷(如 gets→fgets, void main→int main),構建扎實的系統級編程功力。