
(int)((double)(5/2)+2.5)的值
这里是我看到的答案,但是显然和09年全国二级c语言的答案(4)不同,怎么回事?“其实就是强制类型转换的运用:强制类型转换格式:(转换类型)(表达式)我们一步一步的来解释你...
这里是我看到的答案,但是显然和09年全国二级c语言的答案(4)不同,怎么回事?
“其实就是强制类型转换的运用:强制类型转换格式:(转换类型)(表达式)我们一步一步的来解释你上面的表达式的值(1)、(double)(5/2)----本来5/2应该值为整型,但是被强制转换为double型,所以结果为2.5 (2)、(double)(5/2)+2.5=5(3)、(int)((double)(5/2)+2.5)--------本来 ((double)(5/2)+2.5 )的值为5.0000,前面加了一个强制类型转换,故最后的结果为整型5.” 展开
“其实就是强制类型转换的运用:强制类型转换格式:(转换类型)(表达式)我们一步一步的来解释你上面的表达式的值(1)、(double)(5/2)----本来5/2应该值为整型,但是被强制转换为double型,所以结果为2.5 (2)、(double)(5/2)+2.5=5(3)、(int)((double)(5/2)+2.5)--------本来 ((double)(5/2)+2.5 )的值为5.0000,前面加了一个强制类型转换,故最后的结果为整型5.” 展开
7个回答
展开全部
获得5这个答案从哪里来的? 明确告诉你 这是错的 答案是4
(double)(5/2)----本来5/2应该值为整型,但是被强制转换为double型,所以结果为2.5
这个解释不正确
(double)(5/2)转换的是5/2的结果 而5 2均为整型,所以在5/2的时候,已经确定了结果是2
再double转换后为2.00000 加上后面的2.5 结果就是4.5000 再转换为int就是4
除非是
(int)((double)5/2+2.5) 这样结果才是5
(double)(5/2)----本来5/2应该值为整型,但是被强制转换为double型,所以结果为2.5
这个解释不正确
(double)(5/2)转换的是5/2的结果 而5 2均为整型,所以在5/2的时候,已经确定了结果是2
再double转换后为2.00000 加上后面的2.5 结果就是4.5000 再转换为int就是4
除非是
(int)((double)5/2+2.5) 这样结果才是5
更多追问追答
追问
也就是说,不管5/2之前定义的是什么类型答案都是2,然后根据类型再转化吗?
那么如果是5.4/2呢?
追答
(5/2)是在括号里面的,在C语言中 括号大于天。有个括号罩着 那么不管括号外面有什么东东,括号里面的运算都不会受影响
所以不管何时
(5/2)都等同于(2)
类似的(5.4/2)都等同于(2.7) 因为不同类型计算,会自动升格为"高级类型"
在这里会先转换为float/double来计算(5.4的类型) 具体是float还是double 看编译器设置,默认一般为double
展开全部
a+b/b等价于((int)a)+(b/b),这个根据运算的优先级别可以得到。
(int)这个是强制类型转换,强制转换之后((int)a)就是整型。一般这个double转化为int类型时多数平台下是按照向零取整的方法,于是这一步强制类型转化后,得到5.
b/b,除号两边都是double类型,得到的结果也是double类型。也就是1.000000;
第一步得到的5是int类型,int类型和double类型进行相加运算时,int类型会自动转化为double类型再进行加法运算。
综上所述有,整个表达式的结果是6.000000.
注意:在强制类型转化时,a的类型还是double类型,保持不变。(int)这个强制转化会产生一个新的中间变量,利用这个int类型的中间变量去进行接下来的运算。
以下是程序:
#include "stdio.h"
#include "stdlib.h"
int main()
{
double a,b,c;
a=5.5;
b=2.5;
c=(int)a+b/b;
printf("...c\n");
printf("%d",sizeof(c));
printf("\n%lf",c);
printf("\n\n...a\n");
printf("%d\n",sizeof(a));
system("pause");
return 1;
}
程序结果是:
...c
8
6.000000
...a
8
(int)这个是强制类型转换,强制转换之后((int)a)就是整型。一般这个double转化为int类型时多数平台下是按照向零取整的方法,于是这一步强制类型转化后,得到5.
b/b,除号两边都是double类型,得到的结果也是double类型。也就是1.000000;
第一步得到的5是int类型,int类型和double类型进行相加运算时,int类型会自动转化为double类型再进行加法运算。
综上所述有,整个表达式的结果是6.000000.
注意:在强制类型转化时,a的类型还是double类型,保持不变。(int)这个强制转化会产生一个新的中间变量,利用这个int类型的中间变量去进行接下来的运算。
以下是程序:
#include "stdio.h"
#include "stdlib.h"
int main()
{
double a,b,c;
a=5.5;
b=2.5;
c=(int)a+b/b;
printf("...c\n");
printf("%d",sizeof(c));
printf("\n%lf",c);
printf("\n\n...a\n");
printf("%d\n",sizeof(a));
system("pause");
return 1;
}
程序结果是:
...c
8
6.000000
...a
8
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不确定在计算上试一下就是了,我的机器结果是4
描述里面第一步显然忽悠人的, (double)(5/2)将会是2.0
其实计算机更难预测结果的是某个double型x = 5.0,然后它和整数5是相等、还是大于小于的情况是不确定的,所以x转换成整数时,常见写成(int)(x+0.0000001) 或者在知道x是整数的情况下,写成(int)(x+0.5)
描述里面第一步显然忽悠人的, (double)(5/2)将会是2.0
其实计算机更难预测结果的是某个double型x = 5.0,然后它和整数5是相等、还是大于小于的情况是不确定的,所以x转换成整数时,常见写成(int)(x+0.0000001) 或者在知道x是整数的情况下,写成(int)(x+0.5)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
结果是4
注意(5/2)==2就可以了;
如果是(5.0/2.0)==2.5,结果就为5;
double(5/2)是把5/2结果转化成双精度。
int(4.5)是把4.5转换成整形,因而为4.
注意(5/2)==2就可以了;
如果是(5.0/2.0)==2.5,结果就为5;
double(5/2)是把5/2结果转化成双精度。
int(4.5)是把4.5转换成整形,因而为4.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先运算两个整数相除5/2,得到的是2,
再强制double成2.000,
再与2.5相加,得到4.50000,
最后强制成整形4
再强制double成2.000,
再与2.5相加,得到4.50000,
最后强制成整形4
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询