关于#c语言#的问题,请各位专家解答!

代码块如下,为什么打印为空?结果为下图

img


//练习05:计算100-200之间的素数
//?
int main() {
    int i = 0;
    for (int i = 100; i < 201; i++) {
        int j = 0;
        for (int j = 2; j < i; j++) {
            if (i % j == 0) {
                break;
            }
        }
        if (j == i) {
            printf("%d\t", i);
        }
    }

}

试看

int main() {

    for (int i = 100; i < 201; i++) {

        for (int j = 2; j < i; j++) {
            if (i % j == 0) {
                break;
            }

        else{
            printf("%d\t", i);
        }
    }
         }
}

【以下回答由 GPT 生成】

问题确实是出在代码逻辑上。在这段代码中,内层循环for (int j = 2; j < i; j++)的目的是寻找i的因子,如果找到了,则跳出循环。如果内层循环完整执行完毕,即j循环到了i,则表示i是素数。然后通过if (j == i)来判断是否找到了素数,如果找到了则打印i

但是问题在于,由于内层循环的变量j是在循环体内部定义的,所以外部的if (j == i)判断始终无法得到正确的结果,因为内部的j永远都是循环结束后的值,而不是循环中找到因子时的值。

解决方案如下:

#include <stdio.h>

int main() {
    int i, j;
    for (i = 100; i <= 200; i++) {
        for (j = 2; j < i; j++) {
            if (i % j == 0) {
                break;
            }
        }
        if (j == i) {
            printf("%d\t", i);
        }
    }
    return 0;
}

主要改动如下: - 将内层循环的int j定义移到循环外部,使得内外层循环共享同一个j变量。 - 将外层循环的判断条件i<201改为i<=200,确保循环能够执行到200。 - 添加return 0;语句,作为main()函数的返回值。

现在运行这段代码,就可以正确地打印出100-200之间的素数了。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^