判断并输出素数的循环问题

判断101-200之间有多少个素数,并输出所有素数。
无报错,为什么输出只有101呢?
代码如下


```c
        int i=2,sqrt;
    float a,b=0;
       for (sqrt=101;sqrt<=200;sqrt++)
    {
        for(i=2;ia=sqrt%i;
        if (a==0)
        b=1;break;
       }
       
        if (b==0)
        {
        printf("%d\n",sqrt);
        }
        
    }

     return 0;

```

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
在你的代码中,只有 101 被输出,这是因为在外层循环中,你没有将变量 b 重置为 0。因此,当第一个数 101 被判断为不是素数时,b 的值变为了 1,而在后续循环中,由于 b 的值一直为 1,不会再有素数被输出。

为了解决这个问题,你可以在每次循环开始时将 b 的值重置为 0,以确保每个数都能被正确地判断。

另外,你的内层循环中的判断条件应该是 i <= sqrt / 2,而不是 i < sqrt - 1。这是因为如果 i 大于 sqrt / 2,则 sqrt / i 必定小于 2,因此不需要再进行判断。

以下是修改后的代码示例:

#include <stdio.h>

int main() {
    int sqrt, i, b;
    for (sqrt = 101; sqrt <= 200; sqrt++) {
        b = 0;
        for (i = 2; i <= sqrt / 2; i++) {
            if (sqrt % i == 0) {
                b = 1;
                break;
            }
        }
        if (b == 0) {
            printf("%d\n", sqrt);
        }
    }
    return 0;
}

希望这个解释和代码示例能够帮助你解决问题。如果你有其他问题,请随时提问。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢


 
```c
        int i=2,sqrt;
       int a,b=0;
       for (sqrt=101;sqrt<=200;sqrt++)
    {
        b=0;//这里要将b标志复位!!!
        for(i=2;i<sqrt-1;i++)
       {
        a=sqrt%i;
        if (a==0)
        b=1;break;
       }
       
        if (b==0)
        {
        printf("%d\n",sqrt);
        }
        
    }
 
     return 0;

你的代码中存在一些问题。首先,变量 b 被初始化为0,但在检查 sqrt 是否为质数时,如果找到了任何一个 sqrt 的因子,b 的值就设为1。但是,在下一个循环迭代中,b 的值没有被重置为0,这意味着即使在下一次循环迭代中,当检查下一个数是否为质数时,b 的初始值仍然是1,也就是说,将不会输出比101更大的任何一个质数。

另一个问题是在检查sqrt是否为质数时,第二个for循环应该从2到sqrt-1,而不是sqrt-2,因为sqrt-2会导致计算范围的缺失,即当sqrt等于2时第二个for循环就根本没有执行。

以下是修改后的代码:


```c
#include <stdio.h>

int main(){
    int i, sqrt, count = 0;
    for (sqrt = 101; sqrt <= 200; sqrt++) {
        int isPrime = 1;
        for (i = 2; i < sqrt; i++) {
            if (sqrt % i == 0) {
                isPrime = 0;
                break;
            }
        }
        if (isPrime) {
            printf("%d\n", sqrt);
            count++;
        }
    }
    printf("Total primes: %d\n", count);
    return 0;
}

```
此代码使用了一个名为 isPrime 的变量来追踪 sqrt 是否为质数,在每个循环迭代中都将其初始化为1。如果在循环中找到了sqrt的因子,则将 isPrime 设置为0,并退出循环。如果没有找到任何因子,则在其它所有循环迭代结束时, isPrime的值将仍然是1,其中的数就是一个质数。