for循环嵌套变量的定义位置

img


这是一个输出小于等于n的素数的程序,不知道为什么a必须要定义在第一个for后面第二个for前面,否则无论输入的数多大,输出的素数只有2和3,求解答

a定义在哪里都可以。重点是a需要内层for循环开始前,或者结束后,将a恢复为1。因为a的作用是标志外层循环当前判断的x是否为素数。当内层循环判定不是素数时,会将该标志改为0。从而在内层循环结束时,通过该标志确认x是否为素数。在进行下一个x的判断时,该标志需要重新恢复为1,否则永远是0,就没有办法再判断后面的x是否为素数了。
不知道解释清楚了没有

a定义在第一个for后面是为了做标记,如果有能整除的a就会等于0,最后判断不是0才输出素数
你的if语句应该放在内部for循环结束后,否则输出不对
给你改好了:

#include <stdio.h>
 
int main()
{
    int n, i, a = 0,x;
    scanf("%d",&n);
    for(x=2;x<n;x++){
        a=0;
        for(i=2; i<x; i++)
        {
            // 符合该条件不是素数
            if(x%i==0)
            {
                a=1;
                break;
            }
        }
        if (a==0)
            printf("%d ",x);
    }
    return 0;
}

img