Vikey. 发表于 2023-10-19 20:23:16

关于求余符号%

int main()
{
    int a, b;
    _Bool c = 0;
    printf("请输入一个数字:\n");
    scanf("%d", &a);
    for (b = 2 , b != 0; b <= a / 2; b++)
    {
      if ( a % b != 0 )
            c = 1;
    }
    if (c)
    {
            printf("这不是一个素数\n");

    }
    else
    {
      printf("这是一个素数\n");
    }


我已经说明了 b != 0 了,为什么还是会运行错误?
想知道原因。

isdkz 发表于 2023-10-19 20:23:57

问题出在for循环的条件部分。在条件部分,你使用了"b != 0"作为循环的判断条件,这是不正确的。for循环的条件部分应该是一个表达式,用来判断循环是否继续执行。在你的代码中,应该使用"b <= a / 2"作为循环的条件。

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

修改后的代码如下:

int main()
{
    int a, b;
    _Bool c = 0;
    printf("请输入一个数字:\n");
    scanf("%d", &a);
    for (b = 2; b <= a / 2; b++)
    {
      if (a % b != 0)
            c = 1;
    }
    if (c)
    {
      printf("这不是一个素数\n");
    }
    else
    {
      printf("这是一个素数\n");
    }
}


请注意,这只是修复了循环条件的问题,还有其他可能的错误。但是,至少循环条件的修复可以使你的代码正常运行。

Mike_python小 发表于 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,此时循环仍会继续执行一次,这可能会影响程序的性能。建议将条件改为<。

下面是修改后的代码:

++
#include <stdio.h>

int main() {
    int a, b;
    _Bool c = 0;
    printf("请输入一个数字:\n");
    scanf("%d", &a);
    for (b = 2; b < a / 2; b++) {
      if (a % b == 0) {
            c = 1;
            break;
      }
    }
    if (c) {
      printf("这不是一个素数\n");
    } else {
      printf("这是一个素数\n");
    }
    return 0;
}


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

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

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

liuhongrun2022 发表于 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,就执行循环。

朕也来学学 发表于 2023-10-20 10:57:58

%俩个边只能是相同类型的
页: [1]
查看完整版本: 关于求余符号%