這段 C 語言程式碼展示了經典的三層巢狀迴圈結構,目的是找出 1 到 4 之間所有互不相同的三個數字組合。讓我們逐層拆解其執行順序與判斷邏輯。
#include <stdio.h>
void main() {
int i, j, k;
printf("\n");
for(i = 1; i < 5; i++) {
for(j = 1; j < 5; j++) {
for(k = 1; k < 5; k++) {
if(i != k && i != j && j != k)
printf("%d,%d,%d\n", i, j, k);
}
}
}
}
程式執行遵循「從上到下、由外而內」的原則:
總迭代次數 = 4 × 4 × 4 = 64 次。但由於 if 條件過濾,只有滿足「三數互不相同」的組合會被輸出。
if(i != k && i != j && j != k) 包含三個子條件,採用邏輯與(&&)連接,具備短路求值特性:
i != k,若為假(相等),直接跳過後續判斷,不執行 printfi != j,若為假則停止j != kprintf 輸出程式將輸出所有由 1、2、3、4 組成的不重複三位數排列,共 24 組(4P3 = 4×3×2 = 24):
1,2,3 1,2,4 1,3,2 1,3,4 1,4,2 1,4,3 2,1,3 ... 4,3,2
| 概念 | 說明 |
|---|---|
| 巢狀迴圈執行順序 | 外層執行一次,內層跑完一輪;由外而內,逐層遞進 |
| 邏輯與(&&)短路特性 | 前條件為假即停止判斷,提升效率 |
| 排列組合應用 | 從 n 個元素中取 r 個不重複排列:nPr = n!/(n-r)! |
理解巢狀迴圈與條件判斷是掌握 C 語言流程控制的基礎,這類「生成所有符合條件的組合」模式在排列組合、搜尋演算法中極為常見。