小白的傻问题求解释
小甲鱼带你学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");
}
}
如果有其他不对的地方也请一并指出,拜托了各位大神们!求求你们了,想不通啊想不通 全天在线等候 素数是只要有一个数能整除就够了,也就是只要有一个 i 满足 num%i==0,这个数就是素数了。
所以小甲鱼的代码中,for循环的if判断是只要有一个 i 满足 num%i==0 ,flag就被置为0了,并不是每个 i 都要满足余数为零 看清楚代码,源代码这里没有flag=1。 ...布尔类型可以这样定义吗
为什么我的不行 君逸逍 发表于 2020-2-8 13:54
...布尔类型可以这样定义吗
为什么我的不行
#define _Bool int,所以怎么定义都可以。 君逸逍 发表于 2020-2-8 13:54
...布尔类型可以这样定义吗
为什么我的不行
C99新增的 召唤风云 发表于 2020-2-8 13:04
看清楚代码,源代码这里没有flag=1。
有吧,我视屏暂停看着敲的,刚刚还回去确认了一下,他在定义flag的时候就给flag赋值为1了 君逸逍 发表于 2020-2-8 13:54
...布尔类型可以这样定义吗
为什么我的不行
_Bool不就是这样定义的吗怎么不行了? 我爱学习. 发表于 2020-2-8 12:49
素数是只要有一个数能整除就够了,也就是只要有一个 i 满足 num%i==0,这个数就是素数了。
所以小甲鱼的代 ...
所以我的代码为什么8就判断是一个素数了呢?能给我解释一下吗 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判断中,输出素数 Ash刻痕 发表于 2020-2-8 22:11
所以我的代码为什么8就判断是一个素数了呢?能给我解释一下吗
因为你在 for 循环里加了 else...这样一来,flag 就只跟 for 循环里最后一次循环的数有关系。
你说你的 8 会被判为素数,原因是最后一次 for 循环的 i = 3,8%3不等于零,于是flag就被置一了,所以 8 就被判成了素数。
你把 else 那部分去掉就行了
页:
[1]