服务器之家

服务器之家 > 正文

c语言判断是否素数程序代码

时间:2021-01-10 12:19     来源/作者:C语言教程网

复制代码 代码如下:


#include <stdio.h>

 

bool isPrimeNum(int x)
{
    if (x == 1)
        return false;
    else if (x <= 0)
        return false;
    else if (x == 2)
        return true;
    else
    {
        for (int i = 2; i < x; i++)
        {
            if (x%i == 0)
                return false;
        }
        return true;

    }
}

int main(void)
{
    int x;
    char ch;
    do{
    printf("请输入一个大于1的自然数:\n");
    scanf("%d", &x);
    if (isPrimeNum(x) == false)
        printf("%d不是素数\n",x);
    else if (isPrimeNum(x) == true)
        printf("%d是素数\n",x);
    printf("是否继续(y/n):\n");
    scanf("%c", &ch);
    }while ('y'== ch || 'Y' == ch);
    return 0;
}

 

但是,运行的时候,出现了一个问题.

本来写do...while是为了省事,重复判断.但是,却愣是不起效果.

后来,修改了一下:

 

复制代码 代码如下:


#include <stdio.h>

 

bool isPrimeNum(int x)
{
    if (x == 1)
        return false;
    else if (x <= 0)
        return false;
    else if (x == 2)
        return true;
    else
    {
        for (int i = 2; i < x; i++)
        {
            if (x%i == 0)
                return false;
        }
        return true;

    }
}

int main(void)
{
    int x;
    char ch;
    do{
    printf("请输入一个大于1的自然数:\n");
    scanf("%d", &x);
    if (isPrimeNum(x) == false)
        printf("%d不是素数\n",x);
    else if (isPrimeNum(x) == true)
        printf("%d是素数\n",x);
    printf("是否继续(y/n):\n");
    scanf(" %c", &ch);//在这里加一个空格
    }while ('y'==ch || 'Y' == ch);
    return 0;
}

 

这样,问题就神奇地解决了.

再后来,再这么改:

 

复制代码 代码如下:


#include <stdio.h>

 

bool isPrimeNum(int x)
{
    if (x == 1)
        return false;
    else if (x <= 0)
        return false;
    else if (x == 2)
        return true;
    else
    {
        for (int i = 2; i < x; i++)
        {
            if (x%i == 0)
                return false;
        }
        return true;

    }
}

int main(void)
{
    int x;
    char ch;
    do{
    printf("请输入一个大于1的自然数:\n");
    scanf("%d", &x);
    if (isPrimeNum(x) == false)
        printf("%d不是素数\n",x);
    else if (isPrimeNum(x) == true)
        printf("%d是素数\n",x);
    printf("是否继续(y/n):\n");
    scanf("\n%c", &ch);//在这里加一个换行符 '\n'
    }while ('y'==ch || 'Y' == ch);
    return 0;
}

 

也没问题.

所以,总结一下,问题出现在我们在输入数字按下回车的似乎,'\n'还保存在输入流中

因此,看第一个代码:

 

复制代码 代码如下:


int main(void)
{
    int x;
    char ch;
    do{
    printf("请输入一个大于1的自然数:\n");
    scanf("%d", &x);
    if (isPrimeNum(x) == false)
        printf("%d不是素数\n",x);
    else if (isPrimeNum(x) == true)
        printf("%d是素数\n",x);
    printf("是否继续(y/n):\n");
    scanf("%c", &ch);  //因为 '\n'还在输入流中  所以 就变成了  ch = '\n';
    }while ('y'==ch || 'Y' == ch);  // 'y' != '\n'  && 'Y' != '\n';
    return 0;   //因此程序就return了
}

 


另外,也是可以使用fflush(stdin)清空输入缓存区.

 

复制代码 代码如下:


#include <stdio.h>

 

bool isPrimeNum(int x)
{
    if (x == 1)
        return false;
    else if (x <= 0)
        return false;
    else if (x == 2)
        return true;
    else
    {
        for (int i = 2; i < x; i++)
        {
            if (x%i == 0)
                return false;
        }
        return true;

    }
}

int main(void)
{
    int x;
    char ch;
    do{
    printf("请输入一个大于1的自然数:\n");
    scanf("%d", &x);
    if (isPrimeNum(x) == false)
        printf("%d不是素数\n",x);
    else if (isPrimeNum(x) == true)
        printf("%d是素数\n",x);
    printf("是否继续(y/n):\n");
    fflush(stdin);  //清空输入缓存区
    scanf("%c", &ch);
    }while ('y'==ch || 'Y' == ch);
    return 0;
}

 

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
Intellij idea2020永久破解,亲测可用!!!
Intellij idea2020永久破解,亲测可用!!! 2020-07-29
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享 2020-04-07
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
返回顶部