
c语言问题,困惑,高手请进帮帮忙啊!感激万分!!!
#include<stdio.h>doublex2n(floats,intl){inti;doublem=1;for(i=1;i<=2*l;i++){m=m*s;}ret...
#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(x,n)/(f(x+z,n)+f(x+c,n+3)));
}
这里有这样的一个问题,在最后的一行printf("计算结果为:y=%f\n",f(x,n)/(f(x+z,n)+f(x+c,n+3)));显示了两个同样的错误:\c++\MSDev98\MyProjects\hao\hao.cpp(49) : warning C4244: 'argument' : conversion from 'double' to 'float', possible loss of data;
\c++\MSDev98\MyProjects\hao\hao.cpp(49) : warning C4244: 'argument' : conversion from 'double' to 'float', possible loss of data。不太明白,但是如果z和c是整数的话就不存在这样的问题了,这是怎么回事啊,我是新手,找了半天也不知是那里出了错,强制改变成double或float都不行,一样的提示,高手帮忙啊,先谢谢了。
1、我用的是vc++6.0.
2、warning的确不是错误,也可以运行,但运行结果不会是你想要的,会出错。
3、不管是double z=2.3,c=3.2;还是float z=2.3,c=3.2;都一样的提示。
4、%f是以小数形式输出单双精度数,隐含输出6位小数。 展开
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(x,n)/(f(x+z,n)+f(x+c,n+3)));
}
这里有这样的一个问题,在最后的一行printf("计算结果为:y=%f\n",f(x,n)/(f(x+z,n)+f(x+c,n+3)));显示了两个同样的错误:\c++\MSDev98\MyProjects\hao\hao.cpp(49) : warning C4244: 'argument' : conversion from 'double' to 'float', possible loss of data;
\c++\MSDev98\MyProjects\hao\hao.cpp(49) : warning C4244: 'argument' : conversion from 'double' to 'float', possible loss of data。不太明白,但是如果z和c是整数的话就不存在这样的问题了,这是怎么回事啊,我是新手,找了半天也不知是那里出了错,强制改变成double或float都不行,一样的提示,高手帮忙啊,先谢谢了。
1、我用的是vc++6.0.
2、warning的确不是错误,也可以运行,但运行结果不会是你想要的,会出错。
3、不管是double z=2.3,c=3.2;还是float z=2.3,c=3.2;都一样的提示。
4、%f是以小数形式输出单双精度数,隐含输出6位小数。 展开
6个回答
展开全部
问题在于f()函数中的p=b*x2n(s,g)/k2n(g); 语句,此语句中调用了x2n()函数;而在此函数中m=m*s; 此语句存在隐形转换可能带来的截断问题(m为double型,s为float型)。
在这里把s改为double型,并把f函数的形参改为double型就ok了
在这里把s改为double型,并把f函数的形参改为double型就ok了
展开全部
不知道你用的是什么编译器,
我用dev-c编译器
在c环境和c++环境下 都能正常编译和运行!
我用dev-c编译器
在c环境和c++环境下 都能正常编译和运行!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
warning不是错误! 应该一样可以运行的.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
double z=2.3,c=3.2; 改成 float
PS:隐性的强制转换存在一定风险。
PS:隐性的强制转换存在一定风险。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我觉得是:
f(x,n)/(f(x+z,n)+f(x+c,n+3))的结果应该是double型的,而却是 %f 输出的。
f(x,n)/(f(x+z,n)+f(x+c,n+3))的结果应该是double型的,而却是 %f 输出的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
tc2.0情况下可以正常编译通过
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询