3

私が知りたいのは、このステートメントが実行可能かどうかだけです

for(j = 2; (j <= i) && flag; j++)

flagiこのループの前に初期化されます。私は前にそのようなものを見たことがありません。

4

1 に答える 1

7

一般的な for ループ条件は次のようになります:-

for(initialization ; condition; increment)

だからあなたがしていることは正しいです。

for ループを分解するということは、次のことを意味します。

for(j=2;(j<=i)&& flag ;j++)

初期化は j=2;

条件は (j<=i)&& フラグです。

インクリメントは j++

一例: -

int main(int argc, const char * argv[])
{
    int sum = 0;
    int j = 100;
    for(int i = 1; i<=100/2 && j>100/2; i++){
        sum += i+j;
        j--;
    }

    return sum;

}

2 番目の例flag:

バブル ソートを思い出してください。バブル ソートでは、2 つのネストされたループが必要です。外側のループはパス数に対して実行され、内側のループはペアごとにスワッピング タスクを実行しますa[i], a[i + 1]。実行を保存するために、いくつかのフラグ変数を利用できます。一部のパスでスワッピングが行われなかった場合、これは次のパスを実行する必要がなく、ソートが完了したことを意味します。以下をお読みください:バブルソートの最適化:

これをコード化します:

FLAG = 1;
for(i = 0; FLAG && (i < n - 1); i++){//If flag = ), break outer loop sorting done
  FLAG = 0; // set flag = 0
  for(j = 0; j < n - 1 - i; j++){
   if(arr[j] > arr[j + 1]){
    swap(arr[j], arr[j + 1]);
    FLAG = 1; // if any swapping need, then check in next round  
   }
 }
}

外側のループの状態FLAG && (i < n - 1)に注意してください。これはあなたが望んでいるものだと思います。この助けを願っています!

于 2013-10-18T05:44:55.217 に答える