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

經典 C 語言演算法 100 例精選 (第一輯)

     編輯:關於C

前言

收錄 100 道經典 C 語言演算法題目,涵蓋基礎語法、數學運算、陣列操作、字串處理、遞迴、排序搜尋、位元運算、圖形繪製等核心領域。本文呈現前 45 題完整解析與程式碼,適合面試複習、教學參考與技能鞏固。

精選題目與解法

1. 費波那契數列 (兔子繁殖)

long f1=1, f2=1;
for (int i=1; i<=20; ++i) {
    printf("%12ld %12ld", f1, f2);
    if (i%2==0) puts("");
    f1 += f2; f2 += f1;
}

2. 101-200 間素數判斷

for (int m=101; m<=200; ++m) {
    int k = sqrt(m+1), leap=1;
    for (int i=2; i<=k; ++i)
        if (m%i==0) { leap=0; break; }
    if (leap) printf("%-4d", m);
}

3. 水仙花數 (三位數自冪和)

for (int n=100; n<1000; ++n) {
    int a=n/100, b=n/10%10, c=n%10;
    if (a*a*a+b*b*b+c*c*c == n) printf("%-5d", n);
}

4. 質因數分解 (90=2*3*3*5)

for (int i=2; i<=n; ++i)
    while (n!=i) {
        if (n%i==0) { printf("%d*", i); n/=i; }
        else break;
    }
printf("%d", n);

5. 條件運算子分級 (A/B/C)

grade = score>=90 ? 'A' : (score>=60 ? 'B' : 'C');

6. 最大公約數/最小公倍數 (輾轉相除法)

while (b) { int t=a%b; a=b; b=t; }
printf("GCD=%d, LCM=%d", a, n1*n2/a);

7. 字元統計 (字母/空格/數字/其他)

while ((c=getchar())!='\n') {
    if (isalpha(c)) ++letter;
    else if (c==' ') ++space;
    else if (isdigit(c)) ++digit;
    else ++other;
}

8. 疊加數列求和 (a+aa+aaa...)

while (cnt<=n) { tn=tn*10+a; sn+=tn; ++cnt; }

9. 完數 (因子和等於自身,如 6=1+2+3)

for (int j=2; j<1000; ++j) {
    int s=j;
    for (int i=1; i

10. 彈球高度/路程 (100m 落下,每次反彈一半)

float h=100, sum=100;
for (int i=2; i<=10; ++i) { h/=2; sum+=2*h; }

11. 猴子吃桃 (逆向推導)

int n=1;
for (int i=1; i<10; ++i) n=(n+1)*2;

12-15. 方程求根:疊代法/牛頓法/二分法

// 牛頓法求 2x^3-4x^2+3x-6=0
float x=1.5;
do { x0=x; x=x0-(2*x0*x0*x0-4*x0*x0+3*x0-6)/(6*x0*x0-8*x0+3); }
while (fabs(x-x0)>=EPS);

16. 菱形列印

for (int i=0; i<=3; ++i) { spaces(2-i); stars(2*i+1); }
for (int i=0; i<=2; ++i) { spaces(i); stars(4-2*i); }

17. 迴文數判斷 (5 位數)

wan=x/10000; qian=x%10000/1000; shi=x%100/10; ge=x%10;
if (ge==wan && shi==qian) puts("迴文");

18. 星期判斷 (首字母 + 次字母)

switch(getch()) { case 'S': if(getch()=='a') puts("Saturday"); ... }

19-22. 控制台顏色/座標/函式調用示範

textbackground, textcolor, gotoxy, clrscr (需 conio.h,Windows 專用)。

23. 100 以內素數 (埃氏篩)

for (int i=2; i

24. 選擇排序 (10 數)

for (i=0; i

25. 3×3 矩陣對角線求和

for (i=0; i<3; ++i) sum += a[i][i];

26. 有序陣列插入元素

for (i=0; i<10; ++i) if (a[i]>num) { shift_right(i); a[i]=num; break; }

27. 陣列逆序

for (i=0; i

28-32. 儲存類別示範 (static/auto/external/register)

展示區域靜態變數保持值、自動變數生命週期、外部變數跨檔案連結、暫存器變數加速迴圈。

33-35. 巨集定義技巧 (帶參數/多行/比較運算子)

#define SQ(x) ((x)*(x))
#define exchange(a,b) { int t=a; a=b; b=t; }
#define LAG >  // 運算子巨集

36-37. 條件編譯 (#ifdef/#ifndef/#include)

示範 #ifdef MAX 切換編譯邏輯、跨檔案巨集共享。

38-42. 位元運算實戰 (&, |, ^, ~, 取特定位元)

b = a & 3;        // 取低 2 位
b = a | 3;        // 設低 2 位
b = a ^ 3;        // 翻轉低 2 位
b = ~a;           // 位元取反
d = (a>>4) & ~(~0<<4); // 取 4~7 位

43-45. 圖形繪製 (circle/line/rectangle)

BGI 圖形庫示範:同心圓、網格線、同心矩形 (需 graphics.h,Turbo C 時代遺產)。

學習建議

  1. 先理解演算法邏輯,再閱讀程式碼。
  2. 親手輸入、編譯、執行,觀察輸出。
  3. 嘗試修改參數、邊界條件,驗證健壯性。
  4. 對照現代 C 標準 (C99/C11) 改寫:使用 stdbool.h、inttypes.h、// 註解、變數就近宣告。

後續將陸續發布第 46-100 題,涵蓋遞迴、動態規劃、圖演算法、資料結構實作等進階主題。

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