代码块如下,为什么打印为空?结果为下图
//练习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之间的素数了。
【相关推荐】