Ash刻痕 发表于 2020-2-8 12:10:38

小白的傻问题求解释

小甲鱼带你学C带你飞第14课,视频讲解实例的判断一个数是不是素数
#include<stdio.h>

int main ()
{
      int i, num;
      _Bool flag = 1;
      printf("请输入一个数:");
      scanf("%d", &num);
      for(i = 2;i < num / 2;i++);
      {
                if(num % i == 0)
                {
                        flag = 0;
                }
      }
      if(flag)
      {
                printf("这是一个素数!\n");
      }
      else
      {
                printf("这不是一个素数!\n");
      }
        return 0;
}
这是他的源代码。
我的问题是当输入的数是8的时候,在for循环中会运算2,3,4三次,其中运算8 % 3的时候,flag会被置为1,就是这三次运算结果有一次flag应该是1,为什么这不会导致8被判断为这是一个素数?
下面是我自己想的程序,在判断8的时候被认为是一个素数,这当然是不对的,但我想不明白原因,求大神指导一下
#include<stdio.h>
int main ()
{
      int i, n;
        _Bool flag;
      printf("请输入一个数:");
      scanf("%d",&n);
      for(i = 2;i < n / 2;i++)
      {
                if(n % i == 0)
                {
                        flag = 0;
                }
                else
                {
                        flag = 1;
                }
      }
      if(flag)
      {
                printf("这是一个素数!\n");
      }
      else
      {
                printf("这不是一个素数!\n");
      }
}
如果有其他不对的地方也请一并指出,拜托了各位大神们!求求你们了,想不通啊想不通

Ash刻痕 发表于 2020-2-8 12:11:11

全天在线等候

我爱学习. 发表于 2020-2-8 12:49:49

素数是只要有一个数能整除就够了,也就是只要有一个 i 满足 num%i==0,这个数就是素数了。
所以小甲鱼的代码中,for循环的if判断是只要有一个 i 满足 num%i==0 ,flag就被置为0了,并不是每个 i 都要满足余数为零

召唤风云 发表于 2020-2-8 13:04:06

看清楚代码,源代码这里没有flag=1。

君逸逍 发表于 2020-2-8 13:54:09

...布尔类型可以这样定义吗
为什么我的不行

召唤风云 发表于 2020-2-8 16:32:00

君逸逍 发表于 2020-2-8 13:54
...布尔类型可以这样定义吗
为什么我的不行

#define _Bool int,所以怎么定义都可以。

SHRS23 发表于 2020-2-8 19:19:29

君逸逍 发表于 2020-2-8 13:54
...布尔类型可以这样定义吗
为什么我的不行

C99新增的

Ash刻痕 发表于 2020-2-8 22:09:11

召唤风云 发表于 2020-2-8 13:04
看清楚代码,源代码这里没有flag=1。

有吧,我视屏暂停看着敲的,刚刚还回去确认了一下,他在定义flag的时候就给flag赋值为1了

Ash刻痕 发表于 2020-2-8 22:10:34

君逸逍 发表于 2020-2-8 13:54
...布尔类型可以这样定义吗
为什么我的不行

_Bool不就是这样定义的吗怎么不行了?

Ash刻痕 发表于 2020-2-8 22:11:38

我爱学习. 发表于 2020-2-8 12:49
素数是只要有一个数能整除就够了,也就是只要有一个 i 满足 num%i==0,这个数就是素数了。
所以小甲鱼的代 ...

所以我的代码为什么8就判断是一个素数了呢?能给我解释一下吗

alexw_h264 发表于 2020-2-9 09:27:28

Ash刻痕 发表于 2020-2-8 22:11
所以我的代码为什么8就判断是一个素数了呢?能给我解释一下吗

for(i = 2;i < n / 2;i++)

如果n输入8,那么这个循环是从2到3,不会到4。在i=3时,flag被设置成1了,此后退出for 循环。在随后的if判断中,输出素数

我爱学习. 发表于 2020-2-9 10:28:50

Ash刻痕 发表于 2020-2-8 22:11
所以我的代码为什么8就判断是一个素数了呢?能给我解释一下吗

因为你在 for 循环里加了 else...这样一来,flag 就只跟 for 循环里最后一次循环的数有关系。
你说你的 8 会被判为素数,原因是最后一次 for 循环的 i = 3,8%3不等于零,于是flag就被置一了,所以 8 就被判成了素数。
你把 else 那部分去掉就行了
页: [1]
查看完整版本: 小白的傻问题求解释