/第七行中如果写成: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;
}
PHP中文网2017-04-17 14:21:33
この行のエラーにより、最初に出力される値は 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
その他の提案
を追加することをお勧めします。統一されていて読みやすく、問題が起こりにくい if/else/for
{}
: Python-QA