标题:帮忙看一段代码,求大神指导
只看楼主
猪自轻
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2012-12-11
结帖率:100%
已结贴  问题点数:20 回复次数:5 
帮忙看一段代码,求大神指导
程序的功能是计算组合数的函数combinNum(int m,int n),计算结果由函数返回。
计算组合数的公式是:  c(m,n)=m!/(n!*(m-n)!)。现在的问题是当输入的第一个数比第二个数大的时侯,显示的却是第一个数比第二个数小时会出现的情况;当输入的第一个数比第二个小时,显示的却是1.000000。请问哪里有问题呢?求解答~~
代码如下————
#include <stdio.h>
double combinNum(double m,double n);
int fun(int j);
main()
{
    double i,j;
    printf("Please enter two number:\n");
    scanf("%d%d",&i,&j);
    if(i<j)
    {
        printf("Your input is error.\n");
        //printf("The result is %lf.\n",combinNum(i,j));
    }
    else if(i>j)
    {
        printf("The result is %lf.\n",combinNum(i,j));
    }
    else
        printf("The result is 1.\n");
}
int fun(int j)
{
    if(j==0||j==1)
        return 1;
    else
        return fun(j-1)*j;
}
double combinNum(double m,double n)
{
    double k=1,a,b;
    if(m>n)
    {
        b=m-n;
        a=fun(b);
        k=fun(m)/fun(n)*a;
        return k;
    }
    else if(m<n)
    {
        printf("Yours input is error.\n");
    }
    else
        return 1;
}
搜索更多相关主题的帖子: number double include 
2013-01-19 16:13
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
得分:5 
double combinNum(double m,double n)
怎么用double类型?不是int?考虑到符号问题,应该是unsigned int吧

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2013-01-19 17:56
猪自轻
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2012-12-11
得分:0 
回复 2楼 pauljames
不是符号的问题呢?
初学者就是不会,调试也不会
2013-01-19 18:21
魍丶紫
Rank: 2
来 自:浙江台州
等 级:论坛游民
帖 子:6
专家分:21
注 册:2013-1-19
得分:8 
好像有两种解决方法 虽然我还不知道什么原因 但结果是对的
一种是把scanf("%d%d",&i,&j);改成scanf("%lf%lf",&i,&j);
#include <stdio.h>
double combinNum(double m,double n);
int fun(int j);
main()
{
    double i,j;
    printf("Please enter two number:\n");
    scanf("%lf%lf",&i,&j);
    if(i<j)
    {
        printf("Your input is error.\n");
        //printf("The result is %lf.\n",combinNum(i,j));
    }
    else if(i>j)
    {
        printf("The result is %lf.\n",combinNum(i,j));
    }
    else
        printf("The result is 1.\n");
}
int fun(int j)
{
    if(j==0||j==1)
        return 1;
    else
        return fun(j-1)*j;
}
double combinNum(double m,double n)
{
    double k=1,a,b;
    if(m>n)
    {
        b=m-n;
        a=fun(b);
        k=fun(m)/(fun(n)*a);
        return k;
    }
    else if(m<n)
    {
        printf("Yours input is error.\n");
    }
    else
        return 1;
}
还一种就是函数定义中就把m,n改成int 不用double类型
#include <stdio.h>
int combinNum(int m,int n);
int fun(int j);
main()
{
    int i,j;
    printf("Please enter two number:\n");
    scanf("%d%d",&i,&j);
    if(i<j)
    {
        printf("Your input is error.\n");
        //printf("The result is %lf.\n",combinNum(i,j));
    }
    else if(i>j)
    {
        printf("The result is %d.\n",combinNum(i,j));
    }
    else
        printf("The result is 1.\n");
}

int fun(int j)
{
    if(j==0||j==1)
        return 1;
    else
        return fun(j-1)*j;
}
int combinNum(int m,int n)
{
    int k=1,a,b;
    if(m>n)
    {
        b=m-n;
        a=fun(b);
        k=fun(m)/(fun(n)*a);
        return k;
    }
    else if(m<n)
    {
        printf("Yours input is error.\n");
    }
    else
        return 1;
}
顺便说下 k=fun(m)/(fun(n)*a);
好像你忘了加括号了  

红颜色  我已没有勇气问你 离开的理由
2013-01-19 21:48
猪自轻
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2012-12-11
得分:0 
回复 4楼 魍丶紫
嗯,确实是可以正确运行了,但是我也不明白为什么也这样改~
2013-01-20 12:15
ren613
Rank: 3Rank: 3
来 自:宣武
等 级:论坛游侠
帖 子:117
专家分:120
注 册:2012-11-20
得分:7 
输入变量类型与定义的变量类型不符

天道酬勤
2013-01-20 12:29



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-397084-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.508670 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved