#include<stdio.h>
#include<math.h>
int main()
{
float r,h,d,s,S,V,v,pi=3.14159;
scanf("%lf%lf",&r,&h);
d=2*pi*r;
s=pi*r*r;
S=4*pi*r*r;
V=(4/3)*pi*r*r*r;
v=s*h;
printf("r=%7.2f\n
h=%7.2f\n
d=%7.2f\n
s=%7.2f\n
S=%7.2f\n
V=%7.2f\n
v=%7.2f\n",r,h,d,s,S,V,v);
return 0;
}
最后显示有个地方错了。。
然后不晓得。。。
请各位大大帮忙改正一下。。。谢谢
哇。好厉害。
另外我想问个事情。
就是scanf("%lf%lf",&r,&h);
这个里面有没有问题??
为什么我输入了r和h为1.5和3之后
输出的r是2.13,h为0.00
然后我把%lf改为%f之后就没问题额。
但是lf不是双精度应该只是精度更大而已啊,
为什么会出问题呢???
lf对应的是double型,32位系统里占8个字节,而f对应float,占4个字节
你的r声明是用的是float,而输入是函数检查到 lf 就想在输入缓冲区中得到double(8个字节)的数据,而r、h只有四个字节,所以就把他们拉到一块当成8个字节的数据来算了,r是这么来的
由于在存r的时候数据都被用完了,h就没得用了,所以是随机数
哇。好厉害。我想问一下。
为什么我那个里面运行完会出问题??
我把后面printf那块改成了
然后就运行成功了,
但是输入r和h的值是1.5和3,
输出的时候r是2.13,h是0.00,
然后我把
scanf("%lf%lf",&r,&h);
改成了
scanf("%f%f",&r,&h);
数值就对了。
但是感觉超麻烦。
而且为什么你的printf那么简单就对了,
而且你的scanf也是%lf啊?……
求大神解答。。。
printf("r=%7.2f\n
h=%7.2f\n
d=%7.2f\n
s=%7.2f\n
S=%7.2f\n
V=%7.2f\n
v=%7.2f\n",r,h,d,s,S,V,v);
这么写会有 非法的转义序列的错误的,运算不正确,那是你没有注意到数据类型的精度问题啊