/第七行中如果写成: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 loop 但此时的prime
是true
, 所以你会印出 1.再来当
m==2
和m==3
的时候是正常的, 两者皆不会进入内层 for loop, 然后都会被印出.接着当
m==4
的时候, 进入了内层for loop, 但在if (m=2)
这一步会让m
被设成2, 且离开回圈, 此时的prime
仍然为true
导致2 重复被印出.接着
m
再下一次回圈会成为 3 (2+1), 此时 3 重复被印出.接着你我都懂了,
m==4
会让一切陷入不可自拔的循环.解决错误
很简单, 首先将
m=2
改正为m==2
, 其次为了避免 1 被印出, 我建议外层的 for 直接从 2 开始走就好.其他建议
代码的排版很重要, 会影响可读性, 建议有自己一套逻辑, 尽量排得好看
建议层次要分明(内层的 block 就要记得缩排)
代码别太壅挤
我个人建议即便是单行的
if/else/for
都加上{}
, 统一, 好读且不容易出问题可以尝试抽出写 function
下次遇到错误可以自己模拟电脑跑个两三次 loop 很容易抓到问题
我回答过的问题: Python-QA
for(int i=2;i if(n%i==0){
雷雷}
}
返回 true;