鱼C论坛

 找回密码
 立即注册
查看: 31860|回复: 10

编一函数fun,功能是判断一个整数m是否是素数,若是返回1,否则返回0。

[复制链接]
发表于 2013-12-22 22:07:25 | 显示全部楼层 |阅读模式
10鱼币
#include<stdio.h>
int fun(int m)
{
        int i,k;
        for(i=2,k=0;i<m;i++)
        {
                k=m%i;
                if(k==0)
                {
                        return 0;
                }
                else
                {
                        return 1;
                }
        }
        return -1;
}
main()
{
        int m;
        printf("请输入一个整数:\n");
        scanf("%d",&m);
        if(fun(m))
        {
                printf("yes.%d\n",m);
        }
        else
        {
                printf("no.\n");
        }
       
}为什么我输入27显示的也是素数呀。求告知。其他数值倒没错。。
楼主不会用排版 麻烦大家了

最佳答案

查看完整内容

兄弟,给你看看我的代码,自己查百度写的,有什么问题的话欢迎提出! #include #include void main() { int n;// 接收输入的正整数 int i; int j;//j=0标志n是质数,j=1标志n是合数 printf("请输入一个正整数!\n"); scanf("%d",&n); while(n=0) { if (n==1||n==0) { printf("%d既不是质数也不是合数!\n",n); } else if(n==2 ||n==3) { printf("%d是质数!\n",n); ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-22 22:07:26 | 显示全部楼层
兄弟,给你看看我的代码,自己查百度写的,有什么问题的话欢迎提出!

#include <stdio.h>
#include <math.h>


void  main()
{  
       
        int n;// 接收输入的正整数
        int i;
        int j;//j=0标志n是质数,j=1标志n是合数
        printf("请输入一个正整数!\n");
        scanf("%d",&n);
       
        while(n<0)
        {
                printf("请输入一个正整数!\n");
                scanf("%d",&n);
        }
        if (n>=0)
        {
                if (n==1||n==0)
                {
                        printf("%d既不是质数也不是合数!\n",n);
                }
                else if(n==2 ||n==3)
                {
                        printf("%d是质数!\n",n);
                }
                else
                {
                        for (i=2;i<=(int)sqrt(n);i++)
                        {
                                if (n%i==0)
                                {
                                        printf("%d是合数!\n",n);
                                        printf("%d的最小因子i=%d!\n",n,i,n);
                                        j=1;
                                        break;       
                                }
                                else
                                {
                                        j=0;
                                }                               
                        }
                        if (0==j)
                        {
                                printf("%d是质数!\n",n);
                        }
                }
        }       
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-12-22 22:10:41 | 显示全部楼层
求帮忙啊,我多输入了几遍 发现好多都是错的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-12-22 22:12:53 | 显示全部楼层
在线等啊啊啊啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-22 22:16:50 | 显示全部楼层
你这个程序设计有问题
fun函数只会执行一次,根本不能循环判断。
return一旦执行就代表该函数结束
所以当你输入27时,k = 1;那么就会执行else里面的语句 return 1;
此时整个fun结束返回值为1,
main中输出yes
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-22 22:17:36 | 显示全部楼层
本帖最后由 cocoboy027 于 2013-12-22 22:20 编辑

可以改为
int fun(int m)
{
      int i;
      for (i=2; i<sqrt(m); i++)
     {
             if(m%i == 0)
                    return 0;
     }

     return 1;
}


注意添加头文件
# include <math.h>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-12-22 22:24:09 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-12-22 22:28:22 | 显示全部楼层
cocoboy027 发表于 2013-12-22 22:16
你这个程序设计有问题
fun函数只会执行一次,根本不能循环判断。
return一旦执行就代表该函数结束

噢 谢了谢了 看懂了
你会改么?谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-22 22:54:07 | 显示全部楼层
a372187663 发表于 2013-12-22 22:24
改了之后输入27还显示的是YES是素数。

不会吧,我的代码没错的,27不会输出yes的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-23 22:58:15 | 显示全部楼层
本帖最后由 Ъγ:_小ツ雨oο 于 2013-12-23 23:01 编辑

#include<stdio.h>
#include<math.h>
void main()
{
        int fun(int n);

        int k,b;
        scanf("%d",&k);
        b=fun(k);
        printf("%d",b);
}
int fun(int n)
{
        int i,j;
        i=sqrt(n);
        for(j=2;j<=i;j++)
        {
                if(n%j==0)
                {
                        return 0;
                }
        }
        if(j>=i)
        {
                return 1;
        }
}
这个应该是你想要的答案吧 ,  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-23 23:07:21 | 显示全部楼层
不建議直接求助問程序邏輯上的錯誤,因為這個完全可以調試出來,調試越多越有經驗,離高手才越近。DEBUG才是精髓啊,大家要培養樂於DEBUG的心態。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 03:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表