promotion image of download ymail app
Promoted

C語言問題 flag新手發問!!

以下一個程式我不太清楚flag在這的用法 可以詳細說明一下給我聽嗎 謝謝了!!

#include<stdio.h>

void main()

{

int i,j,tmp;

int num[]={3,6,7,5,9};

int flag;

for (i=0;i<4;i++)

{

flag = 1;

for (j=0;j<4;j++)

if (num[j]>num[j+1])

{

tmp = num[j];

num[j] = num[j+1];

num[j+1] = tmp;

flag = 0;

}

if(flag)

brake;

printf(\"\\2: loop %d \",i);

for (j=0;j<5;j++)

printf(\"%4d\",num[j]);

printf(\"\\n\");

}

}

已更新項目:

可以跟我說一下 這個程式會怎跑的順序會怎樣嗎

謝謝嚕

2 個已更新項目:

想問一下 第三次主回圈時 flag是1進去副迴圈雖然什麼都沒有做不過副迴圈裡不是還是有個flag = 0; 為什麼還忽略掉他 直接flag= 1跑出來呢??

1 個解答

評分
  • 1 0 年前
    最佳解答

    剛剛我才剛回答過一模一樣的問題 這個是改變順序的function 裡面的flag是用來加快速度的

    假如num[]裡面的數字大小都排好了的話 就不需要再花四趟的時間一直檢查 所以假如flag沒有改變的話就表示裡面沒有跟改順序的必要 也就是說可以提早結束那個for loop

    break; 你拼錯了... 很確定是 break

    break; 的用法就是在loop裡面馬上跳出

    2006-06-18 17:54:27 補充:

    這邊有兩個loop 一個我簡稱為主loop 跟副loop第一個主loop前兩個副loop都是一樣第一個主loop第3次在副loop裡面 {3,6,5,7,9} flag 在這邊變成0 第四個副loop沒變 第一個主loop結束第二個主loop在第二個副loop因為6比5大 所以順序換了{3,5,6,7,9} flag在這邊變成0 之後沒有改變array 所以第二次主loop結束第三個主loopflag是1 進入副loop 副loop沒有做什麼 所以出來了 flag是1 所以break 提早結束所以假如沒有那個flag的話 主loop還會在跑一圈(第四次的loop)i是2

    2006-06-24 12:59:02 補充:

    if (num[j]>num[j+1])

    {

    tmp = num[j];

    num[j] = num[j+1];

    num[j+1] = tmp;

    flag = 0;

    }

    有沒有注意到if??只有在if裡面 flag才會變成0

    對了 幫我加一個評價吧^_^

    參考資料: Myself. Computer Science BS degree.
    • Commenter avatar登入以對解答發表意見
還有問題?馬上發問,尋求解答。