c语言问题,困惑,高手请进帮帮忙啊!感激万分!!!

来源:百度知道 编辑:UC知道 时间:2024/06/25 19:28:44
#include<stdio.h>
double x2n(float s,int l)
{
int i;
double m=1;
for(i=1;i<=2*l;i++)
{
m=m*s;
}
return m;
}
int k2n(int l)
{
int k=1,j;
for(j=1;j<=2*l;j++)
{
k=k*j;
}
return k;
}

double f(float s,int l)
{
double p;
int g,b=-1;
double sum=0;

for(g=1;g<=l;g++)
{
p=b*x2n(s,g)/k2n(g);
sum=sum+p;
b=-b;

}
return sum+1;
}
void main()
{
int n;
float x;
double z=2.3,c=3.2;
printf("请输入x的值:");
scanf("%f",&x);
printf("请输入n的值:");
scanf("%d",&n);
printf("计算结果为:%f===%f\n",x2n(x,n),x2n(x+2,n));
printf("计算结果为:%d===%d\n",k2n(n),k2n(n+3));
printf("计算结果为:%f===%f===%f\n",f(x,n),f(x,n+3),f(x+3,n));
printf("计算结果为:y=%f\n"

问题在于f()函数中的p=b*x2n(s,g)/k2n(g); 语句,此语句中调用了x2n()函数;而在此函数中m=m*s; 此语句存在隐形转换可能带来的截断问题(m为double型,s为float型)。
在这里把s改为double型,并把f函数的形参改为double型就ok了

不知道你用的是什么编译器,
我用dev-c编译器

在c环境和c++环境下 都能正常编译和运行!

warning不是错误! 应该一样可以运行的.

double z=2.3,c=3.2; 改成 float
PS:隐性的强制转换存在一定风险。

我觉得是:
f(x,n)/(f(x+z,n)+f(x+c,n+3))的结果应该是double型的,而却是 %f 输出的。

tc2.0情况下可以正常编译通过