请问有谁知道哪里错了吗?

img

img

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;
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632