这是一道C语言基础题,求大神!
上图是题目,下面是我的源代码,为啥计算结果是错的。没有语法错误。
#include <stdio.h>
double fact(double n)
{
double sum=0;int i;
for(i=1;i<=n;i++)
sum+=i;
return sum;
}
double pow(double a, double b)
{
int i;
int result = 1;
for (i = 1; i<=b; i++)
result *=a;
return result;
}
double cal(double m,double n)
{
double y;
y=pow(m,n)/fact(n);
return y;
}
void main()
{
double n;double x;double y;
scanf("%lf%lf",&x,&n);
y=1+cal(x,n);
printf("f(x)=%lf",y);
}
[解决办法]
#include <math.h>
#include <stdio.h>
int fact(int n)
{
return (n * (n + 1)) >> 1;
}
double calc(double x, int n)
{
return pow(x, n) / fact(n);
}
int main()
{
int n;
double x, result = 1.0;
scanf("%d%lf", &n, &x);
while (n > 0)
{
result += calc(x, n--);
}
printf("%lf\n", result);
}
#include <stdio.h>
double fact(double n)//改成double fact(int n)
{
double sum=0;int i;
for(i=1;i<=n;i++)//n如果是double型, i<=n 会存在问题
sum+=i;
return sum;
}
double pow(double a, double b)//改成double pow(double a, int b)
{
int i;
int result = 1;//改成double result = 1.0
for (i = 1; i<=b; i++)
result *=a;
return result;
}
double cal(double m,double n)
{
double y;
y=pow(m,n)/fact(n);
return y;
}
void main()
{
double n;double x;double y;
scanf("%lf%lf",&x,&n);
y=1+cal(x,n);
printf("f(x)=%lf",y);
}
int fact(int n)
{
if((n&1)==0)
return (n>>1)*(n+1)
else
return ((n+1)>>1)*n;
}