2016-07-14 2 views
0
#include <stdio.h> 

int main() { 

    int i, j; 

    for (i = 2; i < 20; i++) { 
     for (j = 2; j <= (i/j); j++) { 
      if (!(i%j)) break; 
     } 
     if (j > (i/j)) printf("%d\n", i); 
    } 

    return 0; 
} 

私は初心者で、forループの仕組みを理解しようとしています。私の質問は、ネストされたループの条件がTRUECのループとその動作について

(j < (i/j)) // 2 <= 4/2 

を返します、第4回の反復であり、第一if文はまた、今ではのでNOTオペレータ

(!(i%j)); // 4/2 = !(0) 

j = 3の値をTRUEを返します。増分のために、なぜTRUEの場合、2番目のifステートメントは出力を出力しませんでしたか?

jがインクリメントされる前に、あなたはループを抜け出している
(j > (i/j)); // 3 > 4/3 
+0

「私の質問は4THループにあります」それはどこですか? –

+0

ループが4番目のループにあると想像してください。 –

+2

繰り返しを意味しましたか? –

答えて

4

ので、jはない3

3

break文は途中でその最も近い外側のループを終了し、まだ2です。それ以降のすべて(そして、ループの3番目のステートメントを含む)は発生しません。

したがって、マークのように、印刷の条件がチェックされている場合は、jはまだ2です。

+0

と9回目の繰り返しについて、2番目のif文がTRUEを返す方法は?ありがとう。 –

+0

@DisplayName 'i'が' 9'、 '10'のときはどうですか? ( '2'から始めるので、9回目の繰り返しが何であるかは分かりません) – StoryTeller

+0

@DisplayName、あなたのコードを実行しても' 9'や '10'は表示されませんhttp://ideone.com/OmXHvpそれは素数。 – StoryTeller

関連する問題