帮帮孩子吧!为什么运行起来就是有问题啊?

#include <stdio.h>
#include <stdbool.h>
int main(void)
{int a;
int n;
bool isprime;
printf("please enter the number of you want:");
scanf("%d",&a);
for (isprime=true;a>0;a--)
{
    for(n=2;(n*n)<=a;n++){
        if(a%n==0)
        isprime=false;
    }
    if (isprime)
    printf("%d is a prime\n ",a);

    return 0;
  
 } 

    我想输入一个整数 然后打印出小于等于它的素数 感觉我的是对的 但运行时就是有问题

小于2的不是素数,要特殊判断。还有isprime为false就可以直接break跳出循环,可以节省一点时间(不影响结果)。

isprime=true这句写在for括号里而不是循环体的话只会执行一次初始化。你的算法设计要求每次循环都初始化这个变量,那就必须把isprime=true放进大括号。

免费送你一段代码:

    int a;
    int n;
    bool isprime;
    printf("please enter the number of you want:");
    scanf("%d", &a);
    for (;a>1; a--)
    {
        isprime = true;
        for (n = 2; n < a/2+1; n++) 
        {
            if (a%n == 0)
            {
                isprime = false;
                break;
            }
                
        }
        if (isprime)
            printf("%d is a prime\n ", a);
    }