一个关于定义变量位置的问题




```#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 被重新定义和置位了一次,其实和定义的位置没什么关联,每次被重新置位才是关键。