C语言基础题,求改错。

#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;
}

最后显示有个地方错了。。
然后不晓得。。。
请各位大大帮忙改正一下。。。谢谢

第1个回答  2014-08-01
printf函数双引号中为一个字符串,如果将字符串折分为两行或者多行,那么编译程序将会提示错误
如果必须对其折行显示,可以有一下几种方法:
1.在折行的末尾跟上一个斜线(\),表示当前行字符串还未结束,下一行的内容任然是字符串的内容
2.对于换行的字符串,需要用双引号括起来,函数将两个相邻或仅有空格分隔的、用双引号括起来的字符串作为一个字符串
另外V=(4/3)*pi*r*r*r;此处有错误,因为两个整数相处,是取整,4/3=1,所以应改成
V=(4.0/3)*pi*r*r*r;
而printf函数应改成
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);
望采纳追问

哇。好厉害。
另外我想问个事情。

就是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就没得用了,所以是随机数

第2个回答  2014-08-01
int main()
{
double 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;
}追问

哇。好厉害。我想问一下。

为什么我那个里面运行完会出问题??

我把后面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);
这么写会有 非法的转义序列的错误的,运算不正确,那是你没有注意到数据类型的精度问题啊

本回答被提问者采纳
相似回答