#include <stdio.h> long fact(int n); int main() { int n, result = 0; printf("Input n:"); scanf("%d", &n); result = fact(n); printf("%d != %d", n, result); return 0; } long fact(int n) { int result; if (n < 0) printf("n<0,data error!\n"); else { result = n * fact(n - 1); return result; } }
时间: 2023-06-20 15:05:32 浏览: 80
这段代码实现的是阶乘函数,但存在一些问题。首先,在函数fact中没有考虑到n等于0和1的情况,应该添加对这两种情况的处理。另外,当n等于0时,递归调用会一直进行下去,导致程序崩溃,应该在函数开头加上判断n是否等于0的语句,如果是则直接返回1。最后,函数返回类型应该为long,因为阶乘的结果可能很大,超过int类型的范围。
下面是修改后的代码:
```c
#include <stdio.h>
long fact(int n);
int main() {
int n, result = 0;
printf("Input n:");
scanf("%d", &n);
result = fact(n);
printf("%d! = %ld", n, result);
return 0;
}
long fact(int n) {
if (n < 0)
printf("n<0,data error!\n");
else if (n == 0 || n == 1)
return 1;
else
return n * fact(n - 1);
}
```
相关问题
计算n!算法如下,请改正程序中的错误,使它能得出正确的结果。 #include <stdio.h> long fact(int n); main() { int n, result = 0; printf("Input n:"); scanf("%d", &n); result = fact(n); printf("%d != %d", n, result); } long fact(int n) { int result; if (
程序截断了,我不知道你的具体问题是什么。但是根据你提供的代码,可以看出以下错误:
1. 在主函数中,将result初始化为0是无意义的,因为阶乘的结果不可能为0。
2. 在计算阶乘的函数fact中,没有给result赋初值,导致计算结果不确定。
3. 在计算阶乘的函数fact中,没有设置递归结束的条件,会导致无限递归。
下面是改正后的程序:
```
#include <stdio.h>
long fact(int n);
int main() {
int n;
printf("Input n:");
scanf("%d", &n);
printf("%d! = %ld", n, fact(n));
return 0;
}
long fact(int n) {
if (n == 1 || n == 0) {
return 1;
} else {
return n * fact(n-1);
}
}
```
改正后的程序中,将result的初值设为1,因为阶乘的结果一般不为0,并且在计算阶乘的函数fact中加入了递归结束条件,保证了程序的正确性。
#include<stdio.h> long fact(int n); int mian(void){ int n; long resoult; printf("input n:"); scanf("%d",&n); resoult=fact(n); if(resoult==-1) printf("error"); else printf("nde jiecheng :%d",n); return 0; } long fact(int n) { if( n < 0 ) return -1; else if(n==0||n==1) return 1; else return(n*fact(n-1)); }哪错了?
该程序中有一个拼写错误,将 `mian` 改为 `main` 即可。另外,程序最后输出的应该是 `n` 的阶乘结果 `resoult`,而不是 `n` 本身。修改后的程序如下:
```
#include<stdio.h>
long fact(int n);
int main(void){
int n;
long result;
printf("input n:");
scanf("%d",&n);
result = fact(n);
if(result == -1)
printf("error");
else
printf("%d的阶乘为:%ld", n, result);
return 0;
}
long fact(int n) {
if(n < 0)
return -1;
else if(n == 0 || n == 1)
return 1;
else
return n * fact(n - 1);
}
```