/第七行中如果写成:for(m=1;m<=100;m=m+2)然后底下删去十一和十二行, 就可以输出除2外所有素数/
//那么如果要输出加上2的素数,我的这个程序错在哪(输出结果是2、3交替不停输出,都看不清
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int m,n,k;
for(m=1;m<=100;m=m+1)//7
{ bool prime=true;
k=int(sqrt(float(m)));
for(n=2;n<=k;++n)
{if (m=2)//11
break;//12
else if(m%n==0)
{prime=false;
break;}
}
if (prime==true)
cout<<m<<endl;
}
return 0;
}
どこにエラーがありますか?
リーリーこの行のエラーにより、最初に出力される値は 1 になり、その後 2 と 3 が交互に表示されます。
なぜですか?まず、
を出力します。m==1
は内側の for ループには入りませんが、この時点ではprime
はtrue
なので、1.m==2
とm==3
が使用される場合、どちらも内部の for ループに入らず、出力されます。その後、
m==4
になると、内側の for ループに入りますが、if (m=2)
ステップでm
が 2 に設定され、ループを終了します。この時点では、prime
はまだtrue
です。重複して印刷されます。すると、
すると、あなたも私も理解しています、m
次のサイクルは 3 (2 1) になり、このとき 3 が繰り返し出力されます。それはすべてを抜け出すことのできないサイクルに陥ることになります。
エラーの解決m==4
リーリー
それは非常に簡単です。まず、を
m=2
に変更します。次に、1 が出力されるのを避けるために、外側の for を 2 から直接開始することをお勧めします。m==2
その他の提案コードのレイアウトは非常に重要であり、読みやすさに影響します。独自のロジックを用意し、できるだけ美しく配置することをお勧めします。-
関数を抽出して作成してみることができます
次にエラーが発生した場合は、コンピューターをシミュレートしてループを 2 ~ 3 回実行すると、問題を簡単に見つけることができます。-
透明なレイヤーを使用することをお勧めします (内側のブロックをインデントすることを忘れないでください)
コードを詰め込みすぎないようにしてください
個人的には、単一行の - にも
を追加することをお勧めします。統一されていて読みやすく、問題が起こりにくい
if/else/for
{}
私が回答した質問
: Python-QA
for(int i=2;i if(n%i==0){
リーリー}
}
true を返す;