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

C語言入門實戰:五個經典練習程序詳解

     編輯:關於C

C語言初學者通過編寫小程序鞏固語法與邏輯思維。本文精選五個經典練習:九九乘法表、水仙花數、銀行密碼系統、平方數求解、平均值計算,逐步講解實現思路與代碼細節。

1. 九九乘法表(數組+雙重循環)


#include <stdio.h>

int main(void) {
    int a[9], c[9];
    int x, y;

    // 初始化數組
    for (x = 1; x <= 9; x++) a[x] = x;
    for (y = 1; y <= 9; y++) c[y] = y;

    // 雙重循環輸出
    for (x = 1; x <= 9; x++) {
        for (y = 1; y <= x; y++) {
            printf("%d * %d = %d\t", a[x], c[y], a[x] * c[y]);
        }
        printf("\n");
    }
    return 0;
}

要點:數組下標從1開始為了直觀對應乘數,實際開發通常從0開始。內層循環y <= x實現三角形輸出。

2. 水仙花數(三重循環窮舉)


#include <stdio.h>

int main(void) {
    int a, b, c, sum;
    for (a = 1; a <= 9; a++) {        // 百位 1-9
        for (b = 0; b <= 9; b++) {    // 十位 0-9
            for (c = 0; c <= 9; c++) { // 個位 0-9
                sum = a*100 + b*10 + c;
                if (sum == a*a*a + b*b*b + c*c*c) {
                    printf("%d\n", sum);
                }
            }
        }
    }
    return 0;
}

輸出:153, 370, 371, 407。優化思路:預計算0-9的立方存入數組,避免重複乘法運算。

3. 銀行密碼輸入系統(do-while + 計數限制)


#include <stdio.h>

int main(void) {
    long password;  // 注意:密碼可能超過int範圍,用long
    int count = 0;
    const long CORRECT = 123456;

    printf("密碼最多輸入三次,超過將鎖定!\n");
    do {
        if (count < 3) {
            printf("請輸入密碼: ");
            scanf("%ld", &password);
            if (password == CORRECT) break;
            printf("密碼錯誤,請重試\n");
        } else {
            printf("密碼錯誤三次,卡已鎖定!\n");
            break;
        }
        count++;
    } while (1);

    if (password == CORRECT) {
        printf("歡迎進入銀行系統!\n");
    }
    return 0;
}

改進點:原代碼邏輯有缺陷(while(123456!=password)與內部count判斷衝突),重寫為清晰的狀態機邏輯。實際系統應對密碼加密存儲、防暴力破解。

4. 平方數求解(數學建模 + 暴力搜索)

題目:一個數加100是完全平方數,再加168(即加268)也是完全平方數,求該數。


#include <stdio.h>
#include <math.h>

int main(void) {
    long i, x, y;
    for (i = 1; i < 100000; i++) {
        x = sqrt(i + 100);
        y = sqrt(i + 268);
        if (x*x == i + 100 && y*y == i + 268) {
            printf("%ld\n", i);
        }
    }
    return 0;
}

數學優化:設i+100 = m², i+268 = n² → n² - m² = 168 → (n-m)(n+m) = 168。枚舉168的因子對可O(√168)求解,比暴力O(N)快得多。

5. 多數值平均值計算(哨值控制循環)


#include <stdio.h>

int main(void) {
    int count = 0, sum = 0, input;
    printf("輸入整數(負數結束):\n");
    
    while (1) {
        printf("第%d個數: ", count + 1);
        if (scanf("%d", &input) != 1) break; // 輸入失敗保護
        if (input < 0) break;                // 負數結束
        sum += input;
        count++;
    }

    if (count > 0) {
        printf("平均值: %.2f\n", (double)sum / count);
    } else {
        printf("未輸入有效數據\n");
    }
    return 0;
}

關鍵點:(double)sum / count強制浮點除法,避免整數截斷。增加scanf返回值檢查防非數字輸入導致死循環。

總結與進階建議

練習核心知識點進階優化方向
乘法表數組、嵌套循環、格式化輸出動態內存分配、遞歸實現
水仙花數三重循環、數字拆解、條件判斷預計算查表、位運算優化
密碼系統do-while、計數器、分支控制輸入掩碼、哈希驗證、鎖定解鎖邏輯
平方數數學建模、sqrt函數、暴力搜索因子分解法、數論優化
平均值哨值循環、類型轉換、輸入驗證動態數組存儲、統計方差/中位數

這五個練習涵蓋了C語言基礎語法的核心:變量、循環、條件、數組、函數、輸入輸出。建議初學者手敲代碼、單步調試、嘗試修改邏輯觀察結果,構建扎實的編程直覺。

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