C编程的问题:为什么变量类型为float则正确,double就得不出正确结果呢?请高手赐教. 如下:

#include<stdio.h>
double power(double x,int n)
{
int k;
double m=1.0;
if(n>0)
for(k=1;k<=n;k++)
m=1.0*m*x;
else
if(n<0)
for(k=1;k<=-n;k++)
m=1.0*m/x;
else m=1.0;
return m;
}
main()
{
double a;
int b;
printf("请分别输入幂的底数,指数:");
scanf("%f,%d",&a,&b);
printf("函数值为:%f\n",power(a,b));
}
是错误的.换为:
#include<stdio.h>
float power(float x,int n)
{
int k;
float m=1.0;
if(n>0)
for(k=1;k<=n;k++)
m=1.0*m*x;
else
if(n<0)
for(k=1;k<=-n;k++)
m=1.0*m/x;
else m=1.0;
return m;
}
main()
{
float a;
int b;
printf("请分别输入幂的底数,指数:");
scanf("%f,%d",&a,&b);
printf("函数值为:%f\n",power(a,b));
}
就是正确的呢?

对于在scanf中输入的数据要分清,到底是double型还是float型,因为如果定义的是double型而在输入的时候写的是scanf("%f",%a)就会出现错误,必须写成scanf("%lf",%a),其他类型的如int和long型的也一样,所以平时要注意这一点!!!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-09-29
其实主体程序是没有错的,我看了一下,你所谓的double不行的那一个程序中也就是一个小问题:主程序里的输入部分“scanf("%f,%d",&a,&b);”既然在main函数里定义了a为double型,那么在输如语句应写成“%lf”,即改成scanf("%lf,%d",&a,&b);
跟double类型有关的输入时用格式“%lf”,输出时用格式“%lf”或“%f”。
第2个回答  2010-09-30
兄弟,再练练,简单代码写的过于复杂了!
看scanf("%f,%d",&a,&b); 对于double型a肯定要要用%lf严格格式处理了,c语言的scanf功能虽强大,但要求你规范输入,当然对于printf中的%f,float、double型参数都可输出

#include<stdio.h>
#include <math.h>
double power(float x,int n)
{
int nn=fabs(n);
double m=1.0;
while(nn--)
m*=x;
return n>0?m:1/m;

}
void main()
{
double a;
int b;
printf("请分别输入幂的底数,指数:");
scanf("%lf,%d",&a,&b);
printf("函数值为:%f\n",power(a,b));
}
相似回答