该程序应该打印从3到100不是素数的每个数字。 但它的行为就像它不能很好地解释最后的if语句。
#include <stdio.h>
main(){
int i,k;
int flag;
for (i=3; i<100; i++) {
for (k=2; k<=i/2; k++) {
if (i%k == 0) {
flag=0;
break;
}
}
if (flag==0) {
printf("not prime : %d\n",i);
}
}
}
是什么事?只有当flag等于0时才打印i。我打印的所有数字从3到100都不是素数。
我很困惑。
答案 0 :(得分:1)
您忘记将flag
设置为非零值:
for (i = 3; i < 100; i++){
flag = 1;
for(k = 2; k <= i/2; ++k){
if(i % k == 0) {
flag = 0;
break;
}
}
if (flag==0) { printf("not prime : %d\n",i); }
}
答案 1 :(得分:0)
请尝试以下代码 -
#include <stdio.h>
main(){
int i,k;
// int flag;
for (i=3; i<100; i++){
for (k=2; k<i; k++){ // note this loop
if(i%k == 0) break;
}
if (k!=i) { printf(" not prime : %d\n",i); }
}
}
在此方法中,当if(i%k == 0)
为真时,循环将为break
。那时,i
可以i
和k
之间的任意数字分割。因此,如果任何数字可以被1和其他数字分割,那么这不是素数。
答案 2 :(得分:0)
标志永远不会设置为零。所以它从一开始就可能为零,从你将它设置为零到程序结束之前肯定会为零。 您需要做的是在&#34; prime-finding&#34;之前将其设置为非零。 (内)循环。