鱼C论坛

 找回密码
 立即注册
查看: 1783|回复: 4

关于求余符号%

[复制链接]
发表于 2023-10-19 20:23:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. int main()
  2. {
  3.     int a, b;
  4.     _Bool c = 0;
  5.     printf("请输入一个数字:\n");
  6.     scanf("%d", &a);
  7.     for (b = 2 , b != 0; b <= a / 2; b++)
  8.     {
  9.         if ( a % b != 0 )
  10.             c = 1;
  11.     }
  12.     if (c)
  13.     {
  14.             printf("这不是一个素数\n");

  15.     }
  16.     else
  17.     {
  18.         printf("这是一个素数\n");
  19.     }
复制代码



我已经说明了 b != 0 了,为什么还是会运行错误?
想知道原因。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-19 20:23:57 | 显示全部楼层
问题出在for循环的条件部分。在条件部分,你使用了"b != 0"作为循环的判断条件,这是不正确的。for循环的条件部分应该是一个表达式,用来判断循环是否继续执行。在你的代码中,应该使用"b <= a / 2"作为循环的条件。

"b != 0"这个条件是错误的,因为它没有任何意义。循环的条件应该是一个可以被解释为真或假的表达式。在这种情况下,我们希望当b小于等于a的一半时继续循环,所以应该使用"b <= a / 2"作为条件。

修改后的代码如下:

  1. int main()
  2. {
  3.     int a, b;
  4.     _Bool c = 0;
  5.     printf("请输入一个数字:\n");
  6.     scanf("%d", &a);
  7.     for (b = 2; b <= a / 2; b++)
  8.     {
  9.         if (a % b != 0)
  10.             c = 1;
  11.     }
  12.     if (c)
  13.     {
  14.         printf("这不是一个素数\n");
  15.     }
  16.     else
  17.     {
  18.         printf("这是一个素数\n");
  19.     }
  20. }
复制代码


请注意,这只是修复了循环条件的问题,还有其他可能的错误。但是,至少循环条件的修复可以使你的代码正常运行。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-19 20:24:26 | 显示全部楼层
问题分析:

这段代码的目的是判断输入的数字是否为素数,但在for循环的条件中,b被初始化为2,然后判断b不等于0,这显然是一个永远不会成立的条件,导致程序无法正常运行,你想知道具体的原因。

解决方法:

我注意到你在for循环的条件中使用了b != 0的判断,这个判断永远返回true,导致程序无法正常执行。需要注意的是,在C和C++中,条件语句中的表达式如果为0,则被视为false,否则为true。

另外,你在for循环的条件中使用<=,这也有可能导致程序出现错误。如果a/2是整数,则b最后的值会等于a/2,此时循环仍会继续执行一次,这可能会影响程序的性能。建议将条件改为<

下面是修改后的代码:
  1. ++
  2. #include <stdio.h>
  3. int main() {
  4.     int a, b;
  5.     _Bool c = 0;
  6.     printf("请输入一个数字:\n");
  7.     scanf("%d", &a);
  8.     for (b = 2; b < a / 2; b++) {
  9.         if (a % b == 0) {
  10.             c = 1;
  11.             break;
  12.         }
  13.     }
  14.     if (c) {
  15.         printf("这不是一个素数\n");
  16.     } else {
  17.         printf("这是一个素数\n");
  18.     }
  19.     return 0;
  20. }
复制代码

在修改后的代码中,循环条件改为b < a / 2,而且在发现a不是素数时,可以立即跳出循环,使用break语句来实现。

希望这些信息对你有所帮助!如果你还有其他问题,请随时追问。

球一个最佳答案谢谢啦!这对我非常重要!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-10-19 21:47:20 | 显示全部楼层
在你的代码中,for (b = 2 , b != 0; b <= a / 2; b++)这行代码存在逻辑错误。你似乎想让 b 从2开始,并且只要 b 不为0且 b 小于或等于 a/2 的话就执行循环。

然而,", b != 0"这个表达是多余的并不会控制循环如何进行。在for循环初始化部分中,你的第一部分 b = 2 , b != 0 实际上是两个语句。它首先会设置b等于2,然后执行 b != 0 的比较,但是这个比较的结果并没有实际意义,因为它不会影响循环的运行。

for循环在C语言中的结构是这样的 for (初始化; 条件; 步进) {}。在初始化部分,你通常只设置变量的初始值。条件部分是决定是否继续循环的逻辑表达,步进部分是每个循环结束后要执行的操作。

所以你应该把代码改成:

`
for (b = 2; b <= a / 2; b++)
`

即,从 b = 2 开始,只要 b <= a/2,就执行循环。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-20 10:57:58 | 显示全部楼层
%俩个边只能是相同类型的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 05:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表