C语言4个简单问题不懂 求解

有几个问题不懂,请详细讲下,特别是一些关于基础的东西。谢谢.1.我要求球的体积定义floatv;为什么v=(4/3)*PI*r*r*r就不对?4/3根本没有乘上去,而用(... 有几个问题不懂,请详细讲下,特别是一些关于基础的东西。谢谢.
1.我要求球的体积 定义float v; 为什么v=(4/3)*PI*r*r*r就不对?4/3根本没有乘上去,而用(4.0/3.0)就行了?
2.用abs函数求绝对值 比如是a=abs(a); printf("%.2f",a)输入结果是对的,为什么变成printf("%.2f",abs(a))结果就不对了,变成0.00了?
3.假设我定义一个变量为double a; 读入这个变量我用scanf("%f",&a)而不用%lf可以吗?有什么影响,我试了下好像有的地方后面输出时就不对了(输入是0.00了)。
4.if else 这个条件语句中else 可以省略吗?如果一连串if else if else ……可以省吗?好像要出问题.
if () {语句1} else {语句2} 与 if () {语句1} {语句2}有什么区别吗?

求解答谢谢
展开
 我来答
十四个矮子
2010-10-02 · TA获得超过233个赞
知道答主
回答量:60
采纳率:0%
帮助的人:64.9万
展开全部
A1.对于字面常量4,编译器认为是int型的,而4.0是double型的,因此虽然4/3的值等于1.333333,但是当它转换成整型之后就是1了,而对于4.0那个表达式,它的结果是double型的,因此可以保留小数部分。这个问题涉及到的知识是类型的隐式转换。

A2.abs()函数是接受整型参数,返回其绝对值,而fabs()函数是接受double类型参数,并返回其绝对值,例如,现a=-0.5,那么abs(a)就是0,fabs(a)就是0.5。

A3.在用scanf()函数进行输入时,%f表示得到一个float类型的值,4个字节,%lf表示得到一个double类型的值,8个字节,两者是不同的。

A4.对于if-else语句,当条件不符合时不需要执行其他动作时,可以不用else。
对于一连串的if-else,只要注意else的匹配,那么最后一个else是可以省略的,条件同上。如果省略中间的else的话,那么就把一个if-else拆成多个语句了。
if () {语句1} else {语句2} 与 if () {语句1} {语句2}的区别是:前者是一个语句,即语句1和语句2有且仅有一个执行;后者是两个语句,即语句2是必然执行的,它不属于if-else,你可以把它的花括号去掉。

有什么问题可以再发消息。望采纳。
石水2
2010-10-02 · TA获得超过2173个赞
知道小有建树答主
回答量:940
采纳率:100%
帮助的人:909万
展开全部
1,整除时 4/3==1
2,我没碰到你那种情况
#include<stdio.h>
#include<math.h>
int main()
{
float a=-2.3;
printf("%.2f\n",fabs(a));
return 0;
}

3,double对应的格式控制符是%lf,float对应的格式控制符是%f

4,不懂你的具体意思是什么,在可以省略的地方可以省
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xiaoxie280
2010-10-02
知道答主
回答量:19
采纳率:0%
帮助的人:24.8万
展开全部
1.在C/C++中 4/3 = 1 结果是整型。 4.0/3.0 = 1.3333333 结果是浮点型。两个数相乘或相除,结果的类型为两个数中范围最大的那个,所以 4.0/3 = 1.3333333.
2.abs()函数返回值是整型的,语句a=abs(a)自动将返回值转成浮点型,因为a为浮点型。但printf("%.2f",abs(a))放回整型0,所以结果为0.00。可以使用fabs()函数解决。
3.%lf与%f没有区别。
4.if语句后不一定要有else。可以写
if(a == b)
{
a = 1;
}
就这样结束了,没有else也行,但如果你想让a不等于b时做其他动作,可以这么写
if (a == b)
{
a = 1;
}
else
{
b = 1;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式