#include<stdio.h> double fact(int n); int main(void) { int e=0,i,n; printf("input n:") ; scanf("%d",&n); for(i=1;i<=n;i++) { e+=fact(i); } printf("e=%d",e); return 0; } double fact(int n) { int i; double product=1; for(i=1;1<=n;i++){ product*=i; } return product; }有什么问题
时间: 2023-12-04 19:02:51 浏览: 89
SeqList.h #include <stdio.h> //包含标准输入输出流的头文件 #include <assert.h
这段代码中有两个问题:
1. 在主函数中,将double类型的返回值fact(i)赋值给int类型的变量e,这会造成精度丢失。应该将变量e的类型修改为double。
2. 在函数fact中的for循环条件中,应该是i<=n,而不是1<=n,否则会导致死循环。
修改后的代码如下:
```
#include <stdio.h>
double fact(int n);
int main(void) {
double e = 0.0;
int i, n;
printf("input n:");
scanf("%d", &n);
for(i = 1; i <= n; i++) {
e += fact(i);
}
printf("e = %lf\n", e);
return 0;
}
double fact(int n) {
int i;
double product = 1.0;
for(i = 1; i <= n; i++) {
product *= i;
}
return product;
}
```
这样修改后,程序能够正确计算e的值。
阅读全文