| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1339 人关注过本帖
标题:tc2.0上几个++,--结合问题(相信看了之后你会outbreak的)
只看楼主 加入收藏
我是菜鸟哦
Rank: 6Rank: 6
等 级:贵宾
威 望:22
帖 子:921
专家分:209
注 册:2007-5-4
结帖率:73.33%
收藏
 问题点数:0 回复次数:21 
tc2.0上几个++,--结合问题(相信看了之后你会outbreak的)
1,main()
{
int i,j;
i=3;
j=(i++)*(++i)+(i--)*(--i);
printf("%d",j);
}
/*结果是18*/

2,main()
{
int i,j;
i=3;
printf("%d",(i++)*(++i)+(i--)*(--i));
}
/*结果是30*/

3,main()
{
int i,j;
i=3;
j=(i++)*(++i)+(i--);
printf("%d",j);
}
/*结果是20*/

4,main()
{
int i,j;
i=3;
j=(i++)*(++i)+(--i);
printf("%d",j);
}
/*结果是12*/

5,main()
{
int i,j;
i=3;

printf("%d",(i++)*(++i)+(i--));
}
/*结果是20*/

6,main()
{
int i,j;
i=3;

printf("%d",(i++)*(++i)+(--i));
}
/*结果是19*/



以上结果都是编译得到的,没的质疑,那么事实是这样的话,有哪为高人能够解释下过程????!!!!!

[此贴子已经被作者于2007-7-25 15:12:37编辑过]

搜索更多相关主题的帖子: outbreak 结合 
2007-07-25 15:10
我是菜鸟哦
Rank: 6Rank: 6
等 级:贵宾
威 望:22
帖 子:921
专家分:209
注 册:2007-5-4
收藏
得分:0 
解决不了,没关系,顶一下,让更多人来看看,人多力量大嘛,别沉下去就行
觉得问的好的话,也顶一个
谢谢了

偶是菜鸟鸟偶惧WHO?!!!!
2007-07-25 15:35
zps851218
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2007-7-25
收藏
得分:0 
3,main()
{
int i,j;
i=3;
j=(i++)*(++i)+(i--);
printf("%d",j);
}
/*结果是20*/
我觉得结果是15,怎么是20啊?
4,main()
{
int i,j;
i=3;
j=(i++)*(++i)+(--i);
printf("%d",j);
}
/*结果是12*/
结果是14
我也不知道对不对,但是我感觉是这样的.如果是我错了大家请多多包涵
2007-07-25 16:05
我是菜鸟哦
Rank: 6Rank: 6
等 级:贵宾
威 望:22
帖 子:921
专家分:209
注 册:2007-5-4
收藏
得分:0 

那个是编译的结果......
小平同志曾经曰过:实践是检验理论的唯一标准.
请不要主观臆断,谢谢


偶是菜鸟鸟偶惧WHO?!!!!
2007-07-25 16:13
jianfeng11
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2007-1-30
收藏
得分:0 
这个结果有点玄,和我的结果有冲突的。
有那位能解释下最好了

我要成为高手,半个也行。总是个高手吧,哈哈哈哈
2007-07-25 16:56
viky2003
Rank: 5Rank: 5
等 级:职业侠客
帖 子:375
专家分:383
注 册:2007-4-11
收藏
得分:0 
未定义的行为!!对于(i++)*i这样的表达式不要武断的认为是先计算前面的,多看看c标准就知道了

要练习算法就来http:///!!有挑战哦!!
2007-07-25 18:48
我是菜鸟哦
Rank: 6Rank: 6
等 级:贵宾
威 望:22
帖 子:921
专家分:209
注 册:2007-5-4
收藏
得分:0 
楼上具体点谢了

偶是菜鸟鸟偶惧WHO?!!!!
2007-07-25 19:57
zrgong
Rank: 1
等 级:新手上路
帖 子:95
专家分:0
注 册:2007-6-26
收藏
得分:0 
因为不同的编译器有不同的规则,所以会得出不同的结果!
你可以在TC和VC6.0上面的试验,就可以得到两个结果.
编程绝对不能这样写。

原因:编译顺序不同,TC编译是从右到左,对于i++;++i的编译是这样的:
如:i=5
p=(i++)+(i++)+(i++);就是i在赋值完成后再自加,所以p=5+5+5=15;
q=(++i)+(++i)+(++i);是i在赋值之前就自加q=8+8+8=24。

也就可以把你这个语句分解为
p=i+i+i; -->p=5+5+5=15
i++;
i++;
i++; i-->8


q=8+8+8=24,先自增再求和,可分解为
++i;
++i;
++i; i-->8
q=i+i+i; 8+8+8=24

第一题:
--i; --->i=2
++i;-->i=3
j=i*i+i*i=18
i--
i++

对于printf函数中是严格按照从左到右,一个括号一个括号计算的

以上是个人的理解。
最后还有句话:别研究这个太多,没意思的

[此贴子已经被作者于2007-7-25 20:20:47编辑过]


2007-07-25 20:15
xxcc309
Rank: 2
等 级:论坛游民
威 望:1
帖 子:63
专家分:82
注 册:2007-6-25
收藏
得分:0 
多看书就能解决的

努力决定一切 奋斗才是命运
2007-07-25 21:11
lxc2lxy
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-7-26
收藏
得分:0 

好多书上写的不详细。
我是这样理解的。
对于一般的算术表达式,比如i初值2,有(++i)+(++i),从优先级上来说,先做++,估i变成4,再加,结果为8。如果(i++)+(i++),依然先++,但是因为是后缀,所以先取值,最后才++,故先+,结果为2,然后i变成3。
但是,如果++在函数的参数中出现,TC中就不是这个结果。可能不单是考虑运算顺序的关系吧。
比如int i,j;
i=3;
printf("%d",(i++)*(++i)+(i--)*(--i));
结果为30,就不清楚了。
希望高人指点。


2007-07-26 10:23
快速回复:tc2.0上几个++,--结合问题(相信看了之后你会outbreak的)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017207 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved