源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2022-10-26 21:26 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:c语言判断是否素数程序代码
[u]复制代码[/u] 代码如下:
#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是为了省事,重复判断.但是,却愣是不起效果. 后来,修改了一下:
[u]复制代码[/u] 代码如下:
#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; }
这样,问题就神奇地解决了. 再后来,再这么改:
[u]复制代码[/u] 代码如下:
#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'还保存在输入流中 因此,看第一个代码:
[u]复制代码[/u] 代码如下:
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)清空输入缓存区.
[u]复制代码[/u] 代码如下:
#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; }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部