#include <stdio.h> double fun(int n) { int i; double y=1.0; for(i=1;i<=n;i++) { y*=i; } return y; } int main() { int m,n; scanf("%d %d",&m,&n); double result=fun(n)/(fun(m)*fun(n-m)); printf("result = %.0lf\n", result); return 0; }这个代码有一个错误运行不了是为什么
时间: 2023-12-07 12:03:20 浏览: 278
计算机二级c语言机试题库.doc
这段代码可能无法运行的原因是在计算组合数时出现了除零错误。具体来说,当m等于0时,计算表达式`fun(n-m)`中的`fun(n)`会发生除零错误,因为`fun(n)`的结果为0,而在计算过程中出现了除法操作。
为了解决这个问题,你可以在计算之前增加一个条件判断来避免除零错误。以下是修复后的代码示例:
```c
#include <stdio.h>
double fun(int n) {
int i;
double y = 1.0;
for (i = 1; i <= n; i++) {
y *= i;
}
return y;
}
int main() {
int m, n;
scanf("%d %d", &m, &n);
if (m > n) {
printf("无法计算组合数,m应小于等于n。\n");
return 0;
}
double result = 0.0;
if (m == 0) {
result = 1.0;
} else {
result = fun(n) / (fun(m) * fun(n - m));
}
printf("result = %.0lf\n", result);
return 0;
}
```
在修复后的代码中,添加了一个条件判断,当m等于0时,直接将结果设为1。这样就避免了除零错误,并且保持了正确的计算结果。
希望这次能够顺利运行!如果还有其他问题,请随时提问。
阅读全文