下面的程序是求n!,请改错: #include <stdio.h> unsigned long Factorial(unsigned int n); { if (n < 0) { printf("data error!"); return 0; } else if (n==0 && n==1) { return 1; } else { return n * Factorial(n-1); } } main() { int n; unsigned long x; printf("Input n:\n"); scanf("%d", n); x = Factorial(n); printf("%d!=%ld\n", n, x); }
时间: 2024-01-15 08:02:56 浏览: 251
代码中的函数定义缺少函数名,需要在函数定义前加上函数名 Factorial。同时,scanf函数需要传入n的地址,应该为&n。
修改后的代码如下:
```
#include <stdio.h>
unsigned long Factorial(unsigned int n) {
if (n < 0) {
printf("data error!");
return 0;
}
else if (n==0 || n==1) {
return 1;
}
else {
return n * Factorial(n-1);
}
}
int main() {
int n;
unsigned long x;
printf("Input n:\n");
scanf("%d", &n);
x = Factorial(n);
printf("%d!=%ld\n", n, x);
return 0;
}
```
相关问题
对以下程序改错:#include <stdio.h> unsigned long Factorial(unsigned int n); { if (n < 0) { printf("data error!"); return 0; } else if (n==0 && n==1) { return 1; } else { return n * Factorial(n-1); } } main() { int n; unsigned long x; printf("Input n:\n"); scanf("%d", n); x = Factorial(n); printf("%d!=%ld\n", n, x); }
以下是修改后的程序:
```c
#include <stdio.h>
unsigned long Factorial(unsigned int n) {
if (n < 0) {
printf("data error!");
return 0;
} else if (n == 0 || n == 1) { // 修正逻辑错误
return 1;
} else {
return n * Factorial(n-1);
}
}
int main() {
int n;
unsigned long x;
printf("Input n:\n");
scanf("%d", &n); // 修正输入错误
x = Factorial(n);
printf("%d!=%ld\n", n, x);
return 0; // 添加返回值
}
```
程序中原本的函数定义中多了一个分号,导致编译错误,需要将分号去掉。同时在 `main()` 函数中,应该使用 `&n` 而不是 `n` 来获取输入的值,修正这个错误。还需要在程序的最后添加 `return 0;` 语句,以表示程序正常退出。另外,原本的程序中判断 n 是否等于 0 或者 1 的逻辑错误,应该改为判断 n 是否等于 0 或者 n 是否等于 1。
改错:#include <stdio.h> unsigned long Factorial(unsigned int n); { if (n < 0) { printf("data error!"); return 0; } else if (n==0 && n==1) { return 1; } else { return n * Factorial(n-1); } } main() { int n; unsigned long x; printf("Input n:\n"); scanf("%d", n); x = Factorial(n); printf("%d!=%ld\n", n, x); }
以下是修改后的程序:
```
#include <stdio.h>
unsigned long Factorial(unsigned int n) { // 修正1:移动函数体外部,去掉多余的{
if (n < 0) {
printf("data error!");
return 0;
} else if (n == 0 || n == 1) { // 修正2:修改判断条件
return 1;
} else {
return n * Factorial(n-1);
}
}
int main() { // 修正3:添加返回类型
int n;
unsigned long x;
printf("Input n:\n");
scanf("%d", &n); // 修正4:需要传入n的地址
x = Factorial(n);
printf("%d!=%ld\n", n, x);
return 0; // 修正5:添加返回语句
}
```
修改说明:
1. 函数体应该在函数声明后面,去掉多余的`{`;
2. 第二个判断条件应该是`n == 0 || n == 1`;
3. `main`函数需要添加返回类型`int`;
4. `scanf`函数需要传入`n`的地址,即`&n`;
5. `main`函数需要添加返回语句`return 0`。
这样修改后,程序才能正确运行。
阅读全文