cs1.6输入命令:关于C语言的几道题,懂的帮我解答(简单)

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/28 08:53:35
1、表达式12/5+(float)(5*8)/(int)(1.2+0.85)的值的数据类型是什么?为什么?
2、main()
{ int u,v;
long w;
u=500;
v=200;
w=(long)u*v;
printf("w=%ld\n",w);
}
把这题的w=(long)u*v;换成w=(long)(u*v);其他的不变,他们的运行结果有什么不同,为什么?
我才刚学C语言,请高手帮我解答啊!
为什么答案第一题是float?谁能给我解释一下,因为本人认为是double
第二题的答案第一种情况是w=100000第二种情况是运行后不是预计结果,为什么会得出这样的答案呢,也请高手给我解释一下啊

1.float
2.这个应该会出错,具体什么错不知道,没上机试过,因为 整型数据的数值范围是-32767-32768 w=(long)u*v;这个应该是先把u强制转换成长整型,然后如果一个表达式里,有整型数据和长整型的话,系统会自动把整型提升成长整型,然后会得到值100000;而w=(long)(u*v)这个式子,是把u*v的整转成long,但是u*v的时候积100000已经超过了-32767-32768这个整型数据的数值范围,这个术语应该叫做溢出吧,所以会出错!
唉!毕业好长时间了,都快忘光了,如果答的还算对的话,把可爱的分加给我吧

1,double

如果我们忽略数字本身,只考虑数据类型的话,这个式子是:

[int] / [int] + (float)([int] * [int]) / (int)([double] + [double])
= [int] + (float)[int] / (int)[double]
= [int] + [float]/[int]
= [int] + [double]/[double]
= [int] + [double]
= [double]

2、有区别,(long)u * v 是指 ((long)u)*v ,在计算乘法的时候,两个操作数都是 long 的了。
如果是 (long)(u * v),在计算乘法的时候两个数都是 int 的,500 * 200 > 65535,会溢出出错的。

1.int
12/5+(float)(5*8)/(int)(1.2+0.85)
(float)只强制转换(5*8)的数据类型,但后面的/是整除,不会有产生浮点 数
2.运行结果没什么不同

实践是检验真理的唯一标准!!!

第一个是浮点的。结果应该是2.6
第二个是优先的问题.应为强制转换优先比乘法高,加了括号就不一样了,w=(long)u*v相当于w=((long)u)*v,后者大家一看就懂了.应为加了括号嘛.谁要是喜欢c的话欢迎加偶qq讨论:24785490

1.浮点(猜的)
2.不会不同,因为没有超过范围,我是这样认为的,不知道高手怎么说!

专家说得精彩啊