私はこのプログラムの下に出くわしました。私は出力を理解していません。Cの割り当てと条件付きチェック
誰かが光を当ててもらえますか?
#include <stdio.h>
int main()
{
int i=1,j=1;
for(;j;printf("%d %d\n",i,j))
j=i++ <=5;
return 0;
}
その出力は次のとおりです。
2 1
3 1
4 1
5 1
6 1
7 0
私はこのプログラムの下に出くわしました。私は出力を理解していません。Cの割り当てと条件付きチェック
誰かが光を当ててもらえますか?
#include <stdio.h>
int main()
{
int i=1,j=1;
for(;j;printf("%d %d\n",i,j))
j=i++ <=5;
return 0;
}
その出力は次のとおりです。
2 1
3 1
4 1
5 1
6 1
7 0
#include <stdio.h>
int main()
{
int i=1,j=1;
//for(initialisation; condition; operations)
// here no initialisation,
// 1. condition is j, if j is true
// 2. then it will execute block statements
// 3. then finally it execute operations, here printf
// 4. again check step 1.
for(;j;printf("%d %d\n",i,j))
j=i++ <=5; // j = (i <= 5); i++;
return 0;
}
#include <stdio.h>
int main()
{
int i=1,j=1;
while(j) {
j = (i++ <=5);
printf("%d %d\n",i,j);
}
return 0;
}
を次のようにアジャイは、元の1(I」の代替コードを与えてきたようにあなたの質問を簡略化することができます便宜上下にコピー&ペーストしてください)
#include <stdio.h>
int main()
{
int i=1,j=1;
while(j) {
j = (i++ <=5);
printf("%d %d\n",i,j);
}
return 0;
}
それでは、whileループ
の実行を見てみましょうI = 1、J = 1、jはループで、Trueで、J =(1 < = 5)真= = 1、I = 2 (ポストインクリメント)。 i = 2、j = 1、jはループ内で真、j =(2 < = 5)=真= 1、i = 3(ポストインクリメント)。 i = 3、j = 1、jはループ内で真、j =(3 < = 5)=真= 1、i = 4(ポストインクリメント)。
I = 4、J = 1、jはループで、真、J =(4 < = 5)がtrue = = 1、I = 5(ポストインクリメント)
I = 5、J = 1 、j = True、1、i = 6(ポストインクリメント)、j =(5 < = 5)= true = 1 i = 6、j = 1、jはループ内で真、j =(6 < = 5)=偽= 0、i = 7(ポストインクリメント)。
i = 7、j = 0、jはループ外です。
プログラムが停止します。
この実行の説明が役立つことを願います。
次の文:
j=i++ <=5;
がそれをインクリメントする前に、変数i
の値を評価します。この評価値は比較<= 5
で使用されます。比較の結果は、条件が偽または真であるかどうかによって、0
または1
のいずれかになります。この場合
、それは二つの別々のステートメントでそれを書くのと同じ効果があります:for
ループの
j = i <= 5;
++i;
比較演算子 '<='は、assigment演算子 '='よりも優先順位が高いことに注意してください。したがって、割り当ては割り当て前に行われます。 –
構文:
for (initialization Statement; check condition; increment/decrements operation)
{
// codes
}
初期化ステートメントは一度だけ実行されます。次に、チェック条件が評価されます()。条件が(ゼロ以外)の場合、forループ本体のコードが実行され、更新式が更新されます。条件がfalse(0)の場合、forループが終了します。あなたのコードで
、j = 1
for
ループ本体に入ります。次に、 j = i++ <= 5 = true
をチェックし、制御は部分の
増分/減分になり、i = 2
とj = 1
と表示されます。 次に、テスト条件が偽になるまで再度コードを繰り返します。
同じことが、このように表現することができます:ここ
#include <stdio.h>
int main()
{
int i,j;
for(i=1,j=1;j!=0;){
j=i++ <=5;
printf("%d %d\n",i,j);
}
return 0;
}
、for
ループの慣例に従って。
j != 0
i <= 5
かどうか1つのi = 2, j =1
i <= 5
ので、J(インクリメント後)2となります残っている1 & & iが3になる(インクリメント後)i = 3, j =1
i <= 5
そうjはiが4(インクリメント後)i = 4, j =1
Fyi、これをデバッガで*ショート*プログラムすると、その動作に関する情報の小説が表示されます。デバッガは何かがどのように壊れているかを理解するだけでなく、何かが動作する方法を理解するのに非常に強力です。 – WhozCraig