|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 1613551 于 2022-4-8 10:12 编辑
为什么我在当if(num % a == 0) 为真,b=0后面加上 else,b=1,然后这个程序就计算不了素数了,b的值一直是1了,然后只有在Bool b后面使b=1,不用else才能实现这个程序的功能,也就是第二个程序那样子
有bug的程序
#include <stdio.h>
int main() {
int num, a;
_Bool b ;
printf("请输入一个数");
scanf("%d", &num);
for (a = 2; a < num / 2; a++) {
if (num % a == 0) {
b = 0;
} else {
b = 1;
}
}
if (0 == b) {
printf("%d不是一个素数", num);
} else {
printf("%d是一个素数", num);
}
没有bug的程序
#include <stdio.h>
int main() {
int num, a;
_Bool b = 1 ;
printf("请输入一个数");
scanf("%d", &num);
for (a = 2; a < num / 2; a++) {
if (num % a == 0) {
b = 0;
}
}
if (0 == b) {
printf("%d不是一个素数", num);
} else {
printf("%d是一个素数", num);
}
return 0;
}
本帖最后由 一阵三十六 于 2022-4-8 10:10 编辑
因为后面循环的问题:
举个例子: num = 9 (num 不是一个素数)
a从2-4遍历
for 循环里,
9%2 == 1 那么 b = 1
9%3 == 0 那么 b = 0
9%4 == 1 那么 b = 1
看这个过程 9%4 之后完全是多余的,因为已经判断出 num 不是一个素数了。
你这个bug就在else 那
我想到两种改法,一种是答案那种。
另一种是在 这个有问题的程序下 在语句 b = 0; 下面写 break;
但是这个改法很鸡肋。不如直接去掉else那里。
因为 else 那个地方确实是多余的。
总结来说,画蛇添足了。
|
-
|