-3

こんにちは、私はCプログラミングクラスの入門のテストのために勉強しています.最終的に私はそれをしました。以下にアップロードした2枚の写真があります。そのうちの 1 つは正しいコードと正しい出力を表示します。もう 1 つは、正しく動作しなかった問題に対する最初の試みの 1 つを示しています。戻って、すべてを直接コピーして貼り付けることなく、可能な限り動作するコードに似せて作成しました。

残念ながら、新しいユーザーは写真を投稿することを許可されていません。下のリンクが機能することを願っています。

これは失敗します。自然な平方根の範囲内のすべての数値を出力するわけではありません:

for (i = 2; i <= x; i++)
{
   //non relevant line
   a = sqrt(i);
   aa = a * a;
   if (aa == i); 
       printf("%d ",i);
}

ソース: http://i.imgur.com/WGG6n.jpg

これは成功し、自然な平方根で偶数を出力しますが、

for (i = 2; i <= x; i++) 
{
   a = sqrt(i);
   aa = a * a;
   if (aa == i && ((i/2) *2) == i)
        printf("%d ", i);
}

ソース: http://i.imgur.com/Kpvpq.jpg

ここにあるスクリーンショットを見て読んでいただければ幸いです。「間違ったコード」の画像には (i/2)*2 == i の部分がないことはわかっていますが、それでも奇数と偶数だけが出力されると考えました。また、「sqrd」を計算するコードもありますが、それは出力に影響を与えるべきではありません。ただし、最後の部分で間違っている場合は修正してください。

そして、はい、私が読んだDev-C++を使用していますが、これはちょっとくだらないプログラムですが、最初はcode::blocksでこれを行いましたが、同じことをしました...

実際にくそったれのコードが機能するようになる 2 時間前に、私が何を間違えたのかについてのアドバイスや提案をいただければ幸いです。

ありがとう、アダム

4

2 に答える 2

9

「それ」のコードには次が含まれます:

if (aa == i);
//          ^
   printf(...);

;[ if条件の最後に注意してください]

したがって、if aa == i- 空のステートメントが発生し、if ステートメントの範囲外であるため、常に出力が発生します。

将来この問題を回避するには、少なくとも言語プログラミングの最初のステップで、 明示的なスコープ1 [制御フロー ステートメント{の後に を使用] を使用することをお勧めします。}


1: 質素なプログラマーはおそらくこのステートメントを嫌うでしょう

于 2012-04-17T00:01:08.670 に答える