请教一个奇怪的基础问题---恐怕不是那么简单哦

执假以为真 2006-03-10 01:44:39
程序一:
main()
{
printf("%f\n",1/4);
}

程序二:
main()
{
float x=2.5,y=4.7;
int a=7;

printf("\n%f\n",a%3*(int)(x+y)%2/4);
printf("%f\n",1/4);
}

程序三:
main()
{
float x=2.5,y=4.7;
int a=7;

printf("\n%f\n",a%3*(int)(x+y)%2/4);
}

程序四:
main()
{
float x=2.5,y=4.7;
int a=7;

printf("\n%f\n",x+a%3*(int)(x+y)%2/4);
}

程序一:
在TC下报错,在VC下结果为0.000000

程序二:
在TC下为:
0.000000
0.000000
在vc下一样的结果

程序三:
在TC下为:8.000000 (这个结果是随机的,如果注释掉程序中与此无关的语句,则结果又会变)
在VC下为: 0.000000

程序四:
在TC和VC下都是2.500000

为什么这四个程序的结果会是这样的呢?
...全文
108 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
执假以为真 2006-03-10
  • 打赏
  • 举报
回复
%和/的优先级一样高,拜托不要误导别人!!
执假以为真 2006-03-10
  • 打赏
  • 举报
回复
明白了,河马回答完全正确。
Dark_Lee补充说明了程序1和2的差异所在,以及程序3的奇怪现象,两位功不可没!谢谢!
寻开心 2006-03-10
  • 打赏
  • 举报
回复
主要就是两个问题:
1 1/4 是整数除法, 结果是0 然后转换成浮点数显示的

2 %2/4 这个运算当中 / 的优先级比%高
问题就出在 % 0 的结果返回是什么上,也许tc和vc有不同的定义
zez 2006-03-10
  • 打赏
  • 举报
回复
实际很简单...

楼主不用故弄玄虚..

首先是 int 和 float 的转换. 1/4 中1,4 都是整数,结果也是整数,就是 0 了

其二,看一下printf 的源码,岂不都明白了..
iamcaicainiao 2006-03-10
  • 打赏
  • 举报
回复
同上
Darkay_Lee 2006-03-10
  • 打赏
  • 举报
回复
浮点数在计算机的表示是不精确的,除非全部编译器都遵循浮点数的标准(IEEE多少忘记了,^_^),否则不同编译器出来的结果会有些差别。
Ninstein 2006-03-10
  • 打赏
  • 举报
回复
基本都与浮点库有关
jinjiajie 2006-03-10
  • 打赏
  • 举报
回复
同上
dragonzxh 2006-03-10
  • 打赏
  • 举报
回复
vc报错的原因应该是printf接受第二个参数不能为0.因为1/4其实是0...所以.....runtime error...
dragonzxh 2006-03-10
  • 打赏
  • 举报
回复
基本都和浮点数有关.首先明确两个操作数是int时/是整除.比如1/4,返回的就是0.
程序1,2都是这个问题
程序3.a%3*(int)(x+y)%2/4这里a是int.后面的值有都变成了int,所以最后的/也是在两个int之间进行的而程序4:x+a%3*(int)(x+y)%2/4,这里x是float.这里到/之前的操作数就是float,/就当float来操作,所以返回2.500000
bm1408 2006-03-10
  • 打赏
  • 举报
回复
main()
{
printf("%f\n",1/4);
}


printf第一个格式串,要求后面有与其对应的变量,
TC我手头没有,VC下编译出错

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧