2012-01-02 1 views
0

とp%のD == 0である、 は、変数dがインクリメントされているか、スキップされインクリメントされ?デバッガの下で、それを通じてforループで次の制御式がインクリメントされていますか? < Pはdは、最も内側のループ内の次のコードでは、

// Program to generate a table of prime numbers 

#include <stdio.h> 

int main (void) 
{ 
    int p, d; 
    _Bool isPrime; 

    for (p = 2; p <= 50; ++p) { 
     isPrime = 1; 

     for (d = 2; d < p; ++d) 
      if (p % d == 0) 
       isPrime = 0; 

      if (isPrime != 0) 
       printf ("%i ", p); 
    } 
    printf ("\n"); 
    return 0; 
} 
+2

デバッガでこれを実行しようとしましたか? –

+0

'if(isPrime!= 0)'を内側または外側の 'for'ループに含めるべきですか?インデントの外観では内側ループの一部でなければならないが、中括弧がないということはそうでないことを意味する。あなたの質問に対する答えには影響しませんが、指摘する価値はあると思いました。 – AusCBloke

+0

'p%d == 0'なら、内側のループから抜け出すべきです。もしそうでなければ、無意味にサイクルを焼いているだけです。 (d = 2; d

答えて

1

は、その後dがインクリメントされています。モジュラスが価値を持っているかどうかではなく、それが重要な唯一の条件です。

はまた、それは重要ではないということが、なぜそれがはるかに重要が、あなたがそれらを使用しない場合、それは変数の範囲を限定するために素敵だとループ内

int p = 2; p <= 50; ++p 

int d = 2; d < p; ++d 

をd、pとしない宣言しませんループの後

3

ステップ:)

あなたは「d」がONLYループ「のために」にインクリメントされていることをコードから見ることができます。

デバッガの下にd> = pと表示され、 "++ d"が実行されていないことが表示されます。

PS: 私は、インデントが実際のロジックを反映させるためにあなたのコードを再フォーマット:D < pが真である場合には

int main (void) 
{ 
    int p, d; 
    _Bool isPrime; 

    for (p = 2; p <= 50; ++p) { 
     isPrime = 1; 

     for (d = 2; d < p; ++d) 
      if (p % d == 0) 
       isPrime = 0; 

     if (isPrime != 0) 
      printf ("%i ", p); 
    } 
    printf ("\n"); 
    return 0; 
} 
関連する問題