if判断内少了break
素数判断逻辑错误。从2到x-1,只要有一个数能被x整除,x就不是素数,这时候结束循环就可以了。也不要再用else t=1来设置了,这样可能会把前面的t=0又给覆盖掉了,另外,还需要判断一下x是否小
代码修改如下:
质数又称素数。一个大于1的自然数,如果除了1和它自身外,不能被其他自然数整除的数;
所以循环起点应该是 2 而不是 1,但2也是素数,所以应该在循环前额外添加一个判断
另外在循环中如果出现了可以整除的数后就应该跳出循环了,但你这个循环没有跳出会一
直执行,导致判断变量 t 被重复赋值,在循环变量为 8 时跳出,8 不能整除 9 所以导致执行
了 t = 0,导致结果错误,建议多看点书,另外可以百度一下vs断点,跟踪一下执行步骤就能
发现问题了,下面是修改后的代码:
#include<stdio.h>
int main(void)
{
int x = 0 ,t = 1,i = 0;
printf("请输入一个数:");
scanf("%d",&x);//高一点的vs编译器使用 scanf_s("%d",&x);
if (x < 2)
{
printf("不是素数\n");
return 0;
}
else if (2 == x)
{
printf("是素数\n");
return 0;
}
for (i = 2; i < x; i++)
{
if ((x % i) == 0)
{
t = 0;//能被其他数整除所以不是素数
break;//跳出循环,或者 x = i;
}
else
t = 1;
}
if(t)
printf("是素数\n");
else
printf("不是素数\n");
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!