#include <stdio.h>
#include <math.h>
int main()
{
double precision = 0;
printf("ninsert numbern");
while(precision < 1){
scanf("%lf",&precision);
}
printf("the value of e with precision of %.0lf is %lf",precision,e(precision));
return 0;
}
int fact(int num){
int ris = 1;
for(int i = num;i > 0;i--){
ris = ris * i;
}
printf("res=%dn",ris);
return ris;
}
int e(double precision){
double valE = 1;
for(double i = precision;i > 0 ;i--){
valE = valE + 1/fact(i);
printf("nsame res:%.1lfn",fact(i));
}
return (double)valE;
}
调试我知道有一个答案,但我的问题是两个函数之间的通信,我知道我可以通过拍打main()中的所有内容来解决它
有很多问题:
- 格式说明符(对于
scanf
和printf
)必须匹配参数 - 不使用浮点类型作为计数器
- 如果你用一个整数除以另一个整数,结果将是一个结构化的整数。如果您希望结果为浮点类型,则需要将至少一个操作数转换为浮点类型。
- 您需要在使用它们之前声明您使用的函数(
fact
和e
),或者只是将它们放在main
之前,如下所示。
你想要这个,在注释中解释:
#include <stdio.h>
#include <math.h>
int fact(int num) {
int ris = 1;
for (int i = num; i > 0; i--) {
ris = ris * i;
}
printf("res=%dn", ris);
return ris;
}
double e(int precision) {
double valE = 1;
for (int i = precision; i > 0; i--) { // use int for loop counters
valE = valE + 1.0 / fact(i); // use `1.0` instead of `1`, otherwise an
// integer division will be performed
printf("nsame res: %dn", fact(i)); // use %d for int^, not %llf
}
return valE; // (double) cast is useless
}
// put both functions e and fact before main, so they are no longer
// declared implicitely
int main()
{
int precision = 0; // precision should be an int
printf("ninsert numbern");
while (precision < 1) {
scanf("%d", &precision); // use %d for int
}
printf("the value of e with precision of %d is %lf", precision, e(precision));
return 0;
}