iT邦幫忙

0

C語言雙層for迴圈運作流程

不好意思,小弟程式新手,想請教問題:
https://ithelp.ithome.com.tw/upload/images/20210610/20138307BnLpJ1Uj6l.png
如圖,請問圖片上的雙層迴圈是怎麼運作的呢?一開始我的想法是:
c = 1
2 % 2 = 0
i + i = 3
3 % 2 != 0
2 = 3 - 1
c + 1 = 2
j + i = 3
3 % 3 = 0
i + i = 4
4 % 3 != 0
3 = 4 - 1
c + 1 = 3
印出i = 4

可是實際印出來卻是5,而且確實是5,請問這樣的想法有甚麼問題呢?

最簡單的方法
加追蹤啊
用 printf "i=".i."j=".j."c=".c; 這樣的方式
看到哪一段不 知道數字變化就給他PRINT 一次
這樣你就知道變化,再去想想為什麼
haward79 iT邦新手 5 級 ‧ 2021-06-10 15:26:47 檢舉
可以善用 debug 功能!
0
shijung
iT邦新手 5 級 ‧ 2021-06-10 13:41:31
最佳解答
    int i, j, c = 1;
    
    // i從 2 開始 只要i>0 就繼續跑內圈 每次+1 所以等於無窮無盡跑
    for (i = 2; i > 0; i++) {
        for (j = 2; j < i; j++) { }//j從 2 開始 只要 j<i 就繼續+1
    }
    i = 2, j = 2 //j不小於i 所以直接不跑j 
    i = 3; j = 2;
    // j == i - 1 => 2 == 3 - 1 符合
    // 所以 c+1 此時 c = 2
    // j = 3 已經不小於i所以跳出
    // c == n => 3不等於2所以繼續
    i = 4, j = 2
    // 4 % 2 == 0
    // break;//跳出j迴圈
    i = 5, j = 2
    // j == i-1  => 2 != 5 - 1
    // j = 3 
    // j == i-1  => 3 != 5 - 1
    // j = 4 
    // j == i-1  => 4 == 5 - 1
    // c +=1
    // c == n ==3
    // 此時i = 5
1
0
小魚
iT邦大師 1 級 ‧ 2021-06-10 18:23:57

請貼文字然後上下用```包起來

像這樣子

我要發表回答

立即登入回答