鱼C论坛

 找回密码
 立即注册
查看: 1001|回复: 11

[已解决]小白的傻问题求解释

[复制链接]
发表于 2020-2-8 12:10:38 | 显示全部楼层 |阅读模式

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

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

x
小甲鱼带你学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");
        }
}
如果有其他不对的地方也请一并指出,拜托了各位大神们!求求你们了,想不通啊想不通
最佳答案
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 那部分去掉就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-2-8 12:11:11 | 显示全部楼层
全天在线等候
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-8 12:49:49 | 显示全部楼层
素数是只要有一个数能整除就够了,也就是只要有一个 i 满足 num%i==0,这个数就是素数了。
所以小甲鱼的代码中,for循环的if判断是只要有一个 i 满足 num%i==0 ,flag就被置为0了,并不是每个 i 都要满足余数为零
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-8 13:04:06 From FishC Mobile | 显示全部楼层
看清楚代码,源代码这里没有flag=1。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-8 13:54:09 | 显示全部楼层
...布尔类型可以这样定义吗
为什么我的不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-8 16:32:00 From FishC Mobile | 显示全部楼层
君逸逍 发表于 2020-2-8 13:54
...布尔类型可以这样定义吗
为什么我的不行

#define _Bool int,所以怎么定义都可以。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-8 19:19:29 From FishC Mobile | 显示全部楼层
君逸逍 发表于 2020-2-8 13:54
...布尔类型可以这样定义吗
为什么我的不行

C99新增的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-8 22:09:11 | 显示全部楼层
召唤风云 发表于 2020-2-8 13:04
看清楚代码,源代码这里没有flag=1。

有吧,我视屏暂停看着敲的,刚刚还回去确认了一下,他在定义flag的时候就给flag赋值为1了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-8 22:10:34 | 显示全部楼层
君逸逍 发表于 2020-2-8 13:54
...布尔类型可以这样定义吗
为什么我的不行

_Bool  不就是这样定义的吗怎么不行了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

所以我的代码为什么8就判断是一个素数了呢?能给我解释一下吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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判断中,输出素数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 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 那部分去掉就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 04:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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