关于布尔函数的问题
不知道为什么,我无法正常编译布尔函数 #include <stdio.h>int main()
{
int count = 2; // 已知2和3是素数
int i, j;
_Bool flag = 1;
for (i = 5; i < 10000; i++)
{
for (j = 2; j < i / 2; j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag)
{
count++;
}
else
{
flag = 1;
}
}
printf("10000以内共有%d个素数!\n", count);
return 0;
} 你的布尔函数编译不正常的原因是变量`flag`未被正确初始化。在你的代码中,`flag`的初始值设为1,代表素数,但在每次外层循环开始时,并未将`flag`重置为1。这导致内层循环结束后,`flag`可能仍然为0,从而导致错误的计数。
你可以将内层循环修改为如下形式:`for (j = 2; j <= i / 2; j++)`,将等号放入判断条件中。同时,在每次外层循环开始时,添加一行代码`flag = 1;`来重置`flag`的值。
修正后的代码如下所示:
#include <stdio.h>
int main()
{
int count = 2; // 已知2和3是素数
int i, j;
_Bool flag = 1;
for (i = 5; i < 10000; i++)
{
flag = 1; // 重置flag的值
for (j = 2; j <= i / 2; j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag)
{
count++;
}
}
printf("10000以内共有%d个素数!\n", count);
return 0;
}
通过以上修改,你的布尔函数应该能够正常编译并得到正确结果。注意,这里使用了`_Bool`类型表示布尔值,其取值只能是0和1。你也可以使用`bool`类型,并包含`<stdbool.h>`头文件。 这个代码是用来计算10000以内素数个数的,但存在一点小错误。你需要将判断 flag 是否为 true 的部分放在内部循环结束之后,而不是放在外部循环中。这是因为 flag 只有在检查完所有小于 i/2 的数之后才能确认 i 是否为素数。这是修正后的代码:
#include <stdio.h>
int main()
{
int count = 2; // 已知2和3是素数
int i, j;
_Bool flag;
for (i = 5; i < 10000; i++)
{
flag = 1;
for (j = 2; j <= i / 2; j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag)
{
count++;
}
}
printf("10000以内共有%d个素数!\n", count);
return 0;
}
另外,这个代码中的素数判断算法并不是最高效的。我们知道,一个合数一定可以表示为两个自然数的乘积,如果这两个数相等,那么它们就是这个合数的平方根;如果它们不相等,那么其中一个数小于平方根,另一个大于平方根。所以,只要小于或等于这个数的平方根的数(从2开始)不能整除这个数,那么这个数就是质数。
以下是改进后的代码:
#include <stdio.h>
#include <math.h>
int main()
{
int count = 2; // 已知2和3是素数
int i, j;
_Bool flag;
for (i = 5; i < 10000; i++)
{
flag = 1;
for (j = 2; j <= sqrt(i); j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag)
{
count++;
}
}
printf("10000以内共有%d个素数!\n", count);
return 0;
}
这个代码比原来的代码运行得更快。 isdkz 发表于 2023-6-30 22:33
这个代码是用来计算10000以内素数个数的,但存在一点小错误。你需要将判断 flag 是否为 true 的部分放在内 ...
不要抢我的{:10_249:} sfqxx 发表于 2023-6-30 22:39
不要抢我的
我也还差一个{:10_256:} isdkz 发表于 2023-6-30 22:42
我也还差一个
{:10_243:} isdkz 发表于 2023-6-30 22:42
我也还差一个
我不能让歌者文明清理员电摇我 本帖最后由 歌者文明清理员 于 2023-6-30 23:50 编辑
sfqxx 发表于 2023-6-30 22:47
我不能让歌者文明清理员电摇我
https://img.youxi369.com/article/contents/2022/05/30/2022053022721718.gif sfqxx 发表于 2023-6-30 22:46
{:10_243:}{:10_266:}{:5_100:}{:9_220:}{:7_119:}{:10_258:}{:10_265:}{:10_324:}
(心情曲线) * _Bool的B是大写的,且前面有下划线,应改为bool
代码如下
#include <stdio.h>
int main()
{
int count = 2; // 已知2和3是素数
int i, j;
bool flag = 1;
for (i = 5; i < 10000; i++)
{
for (j = 2; j < i / 2; j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag)
{
count++;
}
else
{
flag = 1;
}
}
printf("10000以内共有%d个素数!\n", count);
return 0;
} python/print 发表于 2023-7-1 07:46
* _Bool的B是大写的,且前面有下划线,应改为bool
代码如下
{:10_254:}我记得小甲鱼讲的是布尔变量是需要首字母大写且前面要加横杠的 1613551 发表于 2023-7-2 20:23
我记得小甲鱼讲的是布尔变量是需要首字母大写且前面要加横杠的
那应该是编译器的区别,我一直不加
页:
[1]