还有这道题,想了很久了,不知道问题在哪里?
大佬们看看1.本题要求编写程序,根据公式C
n
m
=
m!(n−m)!
n!
算出从n个不同元素中取出m个元素(m≤n)的组合数。
建议定义和调用函数fact(n)计算n!,其中n的类型是int,函数类型是double。
输入格式:
输入在一行中给出两个正整数m和n(m≤n),以空格分隔。
输出格式:
按照格式“result = 组合数计算结果”输出。题目保证结果在double类型范围内。
输入样例:
2 7
输出样例:
result = 21
这是我的代码
#include<stdio.h>
double fact(int n);
int main(void)
{
double result;
int a,b;
double zi ;
double mu ;
scanf("%d %d",&a,&b);
zi = fact(b);
mu = fact(a) * fact(b - a);
result = zi / mu;
printf("result = %f",result);
return 0;
}
double fact(int n)
{
double sum = 1;
while(n--)
{
sum = sum * n;
}
return sum;
}
差在哪里 wp231957 发表于 2020-11-25 13:32
差在哪里
就是结果不对,然后有乱码,也不知道为什么?
吻你不厌 发表于 2020-11-25 13:37
就是结果不对,然后有乱码,也不知道为什么?
你需要单独测试一下fact函数的正确与否 嗯-_嗯,我试一下 本帖最后由 jackz007 于 2020-11-25 14:06 编辑
#include<stdio.h>
double fact(int n)
{
int k , r ;
for(k = 1 , r = 1 ; k <= n ; k ++) r *= k ;
return 1.0 * r ;
}
int main(void)
{
double result , zi , mu ;
int a , b ;
scanf("%d%d" , & a , & b) ;
zi = fact(b) ;
mu = fact(a) * fact(b - a) ;
result = zi / mu ;
printf("result = %.0lf" , result) ;
}
编译运行实况
D:\0002.Exercise\C>g++ -o x x.c
D:\0002.Exercise\C>x
2 7
result = 21
D:\0002.Exercise\C> 大佬,你的那个.0是为什么啊,还有能不能看一下我的问题啊,感觉和你的差不多 吻你不厌 发表于 2020-11-25 15:23
大佬,你的那个.0是为什么啊,还有能不能看一下我的问题啊,感觉和你的差不多
while(n -- ) {
问题出在这里,n 在 while 中被访问后,进入 while 语句块时,就已经是减去 1 的值了。由此可想而知,当循环到 n = 1 的时候,语句块中 n 值会变成 0,导致函数最后返回的 sum 一定是 0 值。
jackz007 发表于 2020-11-25 16:42
问题出在这里,n 在 while 中被访问后,进入 while 语句块时,就已经是减去 1 的值了。由此 ...
噢噢噢噢
页:
[1]