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

C語言基礎算法教程:循環累乘、條件篩選與閏年判斷經典例題

     編輯:關於C語言

前言

算法是程序的靈魂。好的算法不僅正確,更要結構清晰、易於機器執行(利用循環、分支)。本文通過三個經典例題,展示從「直觀步驟」到「計算機友好算法」的轉化過程。

例題 1:階乘計算 (1×2×3×4×5)

直觀方法 (人腦思維)

  1. 1×2=2
  2. 2×3=6
  3. 6×4=24
  4. 24×5=120

缺點:步驟固定,擴展到 100! 需重寫 100 行。

改進算法 (循環累乘)


S1: t ← 1
S2: i ← 2
S3: t ← t × i
S4: i ← i + 1
S5: 若 i ≤ 5 則轉 S3,否則結束

優勢:修改 S5 條件即可計算任意 n! (如 i ≤ 100)。

變體:計算 1×3×5×7×9×11


S1: t ← 1
S2: i ← 3
S3: t ← t × i
S4: i ← i + 2
S5: 若 i ≤ 11 則轉 S3,否則結束

思考題

若 S5 改為 若 i < 11,結果如何?
答:i 取值 3,5,7,9 (9<11 繼續,11<11 假結束),缺少 ×11,結果為 945 而非 10395。

例題 2:成績篩選 (50 學生,輸出 ≥80 分者)

數據結構:並行數組 n[i] (學號)、g[i] (成績)。


S1: i ← 1
S2: 若 g[i] ≥ 80 則輸出 n[i], g[i]
S3: i ← i + 1
S4: 若 i ≤ 50 則轉 S2,否則結束

關鍵點:順序遍歷、條件判斷、計數器控制循環次數。

例題 3:區間閏年判斷 (2000-2500 年)

閏年規則

  1. 能被 4 整除、不能被 100 整除 → 閏年。
  2. 能被 100 整除、又能被 400 整除 → 閏年。

算法描述


S1: y ← 2000
S2: 若 y 不能被 4 整除 → 輸出 "不是閏年" → 轉 S6
S3: 若 y 能被 4 整除、不能被 100 整除 → 輸出 "是閏年" → 轉 S6
S4: 若 y 能被 100 整除、又能被 400 整除 → 輸出 "是閏年" → 轉 S6
S5: 輸出 "不是閏年"  (能被 100 整除但不能被 400 整除)
S6: y ← y + 1
S7: 若 y ≤ 2500 則轉 S2,否則結束

邏輯簡化 (代碼實現)


bool isLeap(int y) {
    return (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0);
}
for (int y = 2000; y <= 2500; y++)
    printf("%d %s\n", y, isLeap(y) ? "是閏年" : "不是閏年");

流程圖要素對照

算法步驟流程圖符號說明
S1: 賦初值平行四邊形 (輸入/輸出) 或矩形 (處理)初始化變量
S2-S5: 判斷菱形 (判斷)多路分支
S6: 遞增矩形 (處理)循環變量更新
S7: 循環條件菱形 (判斷)決定是否回轉

總結:優秀算法的三個特徵

  1. 有限性:必須在有限步驟內終止 (S5/S7 保證)。
  2. 確定性:每步無歧義 (明確的賦值、判斷、跳轉)。
  3. 可行性:每步可在有限時間內完成 (基本算術、邏輯運算)。

將「人腦直觀步驟」轉化為「帶循環判斷的結構化算法」,是從初學者邁向程序設計師的關鍵一步。

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