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

C 語言迴圈頻度分析:while vs do-while 邊界條件詳解

     編輯:C 語言問答

題目:計算標記 @ 語句的執行次數

/* 片段 1 */
i = 1; k = 0;
while (i <= n - 1) {
    @ k += 10 * i; i++;
}

/* 片段 2 */
i = 1; k = 0;
do {
    @ k += 10 * i;
    i++;
} while (i <= n - 1);

逐步推演

片段初始 i條件判斷時機迴圈結束條件執行次數
1 (while)1迴圈前i 變為 n 時 (i <= n-1 為假)n - 1
2 (do-while)1迴圈後i 變為 n 時 (i <= n-1 為假)n - 2 (n > 1 時)

詳細邏輯

片段 1:while 迴圈

i = 1;
// 第 1 次檢查:1 <= n-1 ? 是 → 執行 @ → i=2
// 第 2 次檢查:2 <= n-1 ? 是 → 執行 @ → i=3
// ...
// 第 n-1 次檢查:n-1 <= n-1 ? 是 → 執行 @ → i=n
// 第 n 次檢查:n <= n-1 ? 否 → 結束
// 共執行 n-1 次

片段 2:do-while 迴圈

i = 1;
do {
    // 第 1 次:無條件執行 @ → i=2
    // 第 2 次檢查:2 <= n-1 ? 是 → 執行 @ → i=3
    // ...
    // 第 n-2 次檢查:n-2 <= n-1 ? 是 → 執行 @ → i=n-1
    // 第 n-1 次檢查:n-1 <= n-1 ? 是 → 執行 @ → i=n
    // 第 n 次檢查:n <= n-1 ? 否 → 結束
    // 共執行 n-1 次?等等!
} while (i <= n - 1);

關鍵差異:do-while 至少執行一次。若 n = 1:

  • 片段 1:while (1 <= 0) 偽 → 0 次。
  • 片段 2:do { @ } while (2 <= 0) → 執行 1 次。

若 n = 2:

  • 片段 1:i=1 滿足 → 執行 1 次 → i=2 不滿足 → 共 1 次 (n-1)。
  • 片段 2:執行 @ → i=2;檢查 2 <= 1 偽 → 共 1 次 (n-1)。

若 n = 3:

  • 片段 1:i=1,2 共 2 次 (n-1)。
  • 片段 2:執行 @ → i=2;檢查 2<=2 真 → 執行 @ → i=3;檢查 3<=2 偽 → 共 2 次 (n-1)。

結論:原答案「片段 2 執行 n-2 次」僅在 n > 2 時成立。嚴謹說法應為:

  • 片段 1:max(0, n-1) 次。
  • 片段 2:(n > 1) ? n-1 : 1 次 (至少 1 次)。

教學啟示

  1. while:零次或多次,適合「先檢查再執行」場景(如讀檔迴圈 while (fgets(...)))。
  2. do-while:一次或多次,適合「至少執行一次」場景(如選單系統、輸入驗證)。
  3. for:語法糖,適用於已知迭代次數或明確初始/條件/遞增三要素。

面試熱門變體
「請寫出等價的 for 迴圈」
片段 1 → for (i=1; i <= n-1; i++) @;
片段 2 → for (i=1; ; i++) { @; if (i > n-1) break; } (較繁瑣,說明 do-while 語義獨特)。

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