```#include<stdio.h>
int main() {
int i,k;
int sum=0;
for (i = 2; i <= 100; i++) {
int isprime = 1;
for (k = 2; k < i; k++) {
if (i % k == 0) {
isprime = 0;
break;
}
}
if (isprime)
sum =sum+ i;
}
printf("%d", sum);
return 0;
}
这个是正确的输出的是100以内的素数和;但是之前我是这样写的:
```c
```#include<stdio.h>
int main() {
int i,k;
int sum=0;
int isprime = 1;
for (i = 2; i <= 100; i++) {
for (k = 2; k < i; k++) {
if (i % k == 0) {
isprime = 0;
break;
}
}
if (isprime)
sum =sum+ i;
}
printf("%d", sum);
return 0;
}这样输出的结果是5,为什么呢?
```
isprime 是标志位的作用,第二段里 isprime 在循环体外定义初始化一次,进入循环体后,当 i = 4 时,isprime = 0, 此后 ,当 i = 5时,isprime因为没有被重新置位始终为 0 ,就不能正确的反馈 i 是不是素数的判断了。第一段里,每循环一次,isprime 被重新定义和置位了一次,其实和定义的位置没什么关联,每次被重新置位才是关键。