これは、私が完全に理解していない模擬試験の問題です。
コードフラグメントの場合
int i = 0, j = 0, k = 0;
for (i=-1; i<=10; ++i){
j = i; ++k;
}
コードを実行した後、変数の値を見つけるように求められます。
答えは次のとおりです。
i = 11 j = 10 k = 12
やり方がわかりません、誰か助けてくれませんか?
手順は次のとおりです。
i
マイナス 1 に設定します。i <= 10
が真なので、ループに入ります。j
は に設定されてi
いるため、j
もマイナス 1 です。k
がインクリメントされるので、k
1 になります。i
のためにインクリメントされるので、++i
0 にi
なります。i
がゼロでi <= 10
あるため、真であるため、再びループに入ります。j
このように、 、 k
、の順にループが続きi
ます。したがって、i
10 にj
なると、9 とk
11 になります。その時点で:
j
も 10 になります。k
12になるi
、11 にインクリメントされます。ループ条件i <= 10
は false で、ループは終了します。i
11j
もそうです。k
ループが終了すると 10、12 になります。
重要な点は、最初のパスの後、ループに入るたびに、j
より 1 小さく、 よりi
1k
大きいことですi
。ループが終了しても、これは引き続き当てはまります。
i は <= 10 でなければならないため、ループを終了するには 11 であり、ループの最後の反復内では i = 10 = j です。最初の繰り返しの後、k は 1 ですが、i は -1 です。ループを実行すると、次のことがわかります。
k = 1, i = -1
k = 2, i = 0
k = 3, i = 1
k = 4, i = 2
k = 5, i = 3
k = 6, i = 4
k = 7, i = 5
k = 8, i = 6
k = 9, i = 7
k = 10, i = 8
k = 11, i = 9
k = 12, i = 10
したがって、k = 12
3 つの変数を分離します。ループが実行される回数である変数 k がインクリメントされることがわかります。いいえ。of time sit は -1 から 10 まで実行され、12 回の反復が行われたことになります。
k = 1, i = -1, j=-1
k = 2, i = 0, j=0
k = 3, i = 1, j=1
k = 4, i = 2, j=2
k = 5, i = 3, j=3
k = 6, i = 4, j=4
k = 7, i = 5, j=5
k = 8, i = 6, j=6
k = 9, i = 7, j=7
k = 10, i = 8, j=8
k = 11, i = 9, j=9
k = 12, i = 10, j=10
この後、i は限界に達しましたが、最初にインクリメントしてからチェックします。したがって、i=11、k=12、j は i の値より 1 小さい値、つまり j= 10 になります。
for (i=-1; i<=10; ++i){
j = i; ++k;
}
ループは次のとおりです。
i = i +1; <-------+
| |
check condition!------|--+
| | |
j = i; | |
| | |
k++;----------------+ |
| |
+<--------------------+
|
other code
最後にループ
i = 10
condition == true
j = 10;
k = 12;
それで
i= i+1
という意味i = 11
ですが、条件は false を示しています。ループエンド。