求大神解答一下编程大神不传之秘语言自增运算问题

求大神帮忙解答,要具体一点的求大神帮忙解一下,要运算过程过程 _百度作业帮
求大神帮忙解答,要具体一点的求大神帮忙解一下,要运算过程过程
求大神帮忙解答,要具体一点的求大神帮忙解一下,要运算过程过程&
X++是先运算再自增++X是先自增后运算减法同理。本题可看到z=x++就是先执行z=x后执行x++
有因为y自增了两次所以y=3 x=2 z=1c语言的自增运算的疑问
[问题点数:0分,结帖人guocai_yao]
c语言的自增运算的疑问
[问题点数:0分,结帖人guocai_yao]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关推荐:
2007年9月 C/C++大版内专家分月排行榜第三2007年8月 C/C++大版内专家分月排行榜第三2006年11月 C/C++大版内专家分月排行榜第三
2003年9月 C/C++大版内专家分月排行榜第二2002年6月 C/C++大版内专家分月排行榜第二2002年4月 C/C++大版内专家分月排行榜第二
2007年3月 C/C++大版内专家分月排行榜第三2007年2月 C/C++大版内专家分月排行榜第三2007年1月 C/C++大版内专家分月排行榜第三2003年7月 C/C++大版内专家分月排行榜第三
2003年9月 C/C++大版内专家分月排行榜第二2002年6月 C/C++大版内专家分月排行榜第二2002年4月 C/C++大版内专家分月排行榜第二
2007年3月 C/C++大版内专家分月排行榜第三2007年2月 C/C++大版内专家分月排行榜第三2007年1月 C/C++大版内专家分月排行榜第三2003年7月 C/C++大版内专家分月排行榜第三
2003年9月 C/C++大版内专家分月排行榜第二2002年6月 C/C++大版内专家分月排行榜第二2002年4月 C/C++大版内专家分月排行榜第二
2007年3月 C/C++大版内专家分月排行榜第三2007年2月 C/C++大版内专家分月排行榜第三2007年1月 C/C++大版内专家分月排行榜第三2003年7月 C/C++大版内专家分月排行榜第三
2015年1月 C/C++大版内专家分月排行榜第二2012年3月 C/C++大版内专家分月排行榜第二2011年11月 C/C++大版内专家分月排行榜第二2010年6月 C/C++大版内专家分月排行榜第二2010年5月 C/C++大版内专家分月排行榜第二
2011年4月 C/C++大版内专家分月排行榜第三2011年2月 C/C++大版内专家分月排行榜第三2010年8月 C/C++大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。C语言自增自减问题总结_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
C语言自增自减问题总结
阅读已结束,如果下载本文需要使用
想免费下载本文?
你可能喜欢关于C语言中自增自减的问题?
问题是这样的,有同学问我一道关于c语言中自增自减的问题,在没有编译前进行分析,然后编译运行后就哭了,我算的结果是:&br&4 2&br&6 1&br&5 3&br&4 2&br&2 2&br&4 2&br&运行后错了4个结果,在百度上搜了一圈,全没有说清楚,还请大神帮助解答,附图片和源代码,注释的是测试用的.&br&&div class=&highlight&&&pre&&code class=&language-c&&&span class=&cp&&#include &stdio.h&&/span&
&span class=&kt&&int&/span& &span class=&nf&&main&/span&&span class=&p&&(&/span&&span class=&kt&&int&/span& &span class=&n&&argc&/span&&span class=&p&&,&/span& &span class=&kt&&char&/span&&span class=&o&&*&/span& &span class=&n&&argv&/span&&span class=&p&&[])&/span& &span class=&p&&{&/span&
&span class=&kt&&int&/span& &span class=&n&&x&/span&&span class=&p&&,&/span&&span class=&n&&y&/span& &span class=&o&&=&/span& &span class=&mi&&3&/span&&span class=&p&&;&/span&
&span class=&c1&&//x = (y++)+(--y)+(--y);&/span&
&span class=&c1&&//x = (y++);&/span&
&span class=&c1&&//x = (y++) + (--y);&/span&
&span class=&n&&x&/span& &span class=&o&&=&/span& &span class=&p&&(&/span&&span class=&n&&y&/span&&span class=&o&&++&/span&&span class=&p&&)&/span& &span class=&o&&+&/span& &span class=&p&&(&/span&&span class=&o&&--&/span&&span class=&n&&y&/span&&span class=&p&&)&/span& &span class=&o&&+&/span& &span class=&p&&(&/span&&span class=&o&&--&/span&&span class=&n&&y&/span&&span class=&p&&);&/span&
&span class=&c1&&//x = (--y) + (--y);&/span&
&span class=&n&&printf&/span&&span class=&p&&(&/span&&span class=&s&&&%d %d&/span&&span class=&se&&\n&/span&&span class=&s&&&&/span&&span class=&p&&,&/span&&span class=&n&&x&/span&&span class=&p&&,&/span&&span class=&n&&y&/span&&span class=&p&&);&/span&
&span class=&n&&y&/span& &span class=&o&&=&/span& &span class=&mi&&3&/span&&span class=&p&&;&/span&
&span class=&n&&x&/span& &span class=&o&&=&/span& &span class=&mi&&3&/span&&span class=&o&&+&/span&&span class=&p&&(&/span&&span class=&o&&--&/span&&span class=&n&&y&/span&&span class=&p&&)&/span&&span class=&o&&+&/span&&span class=&p&&(&/span&&span class=&o&&--&/span&&span class=&n&&y&/span&&span class=&p&&);&/span&
&span class=&n&&printf&/span&&span class=&p&&(&/span&&span class=&s&&&%d %d&/span&&span class=&se&&\n&/span&&span class=&s&&&&/span&&span class=&p&&,&/span&&span class=&n&&x&/span&&span class=&p&&,&/span&&span class=&n&&y&/span&&span class=&p&&);&/span&
&span class=&n&&y&/span& &span class=&o&&=&/span& &span class=&mi&&3&/span&&span class=&p&&;&/span&
&span class=&n&&x&/span& &span class=&o&&=&/span& &span class=&p&&(&/span&&span class=&n&&y&/span&&span class=&o&&++&/span&&span class=&p&&)&/span&&span class=&o&&+&/span&&span class=&p&&(&/span&&span class=&o&&--&/span&&span class=&n&&y&/span&&span class=&p&&);&/span&
&span class=&n&&printf&/span&&span class=&p&&(&/span&&span class=&s&&&%d %d&/span&&span class=&se&&\n&/span&&span class=&s&&&&/span&&span class=&p&&,&/span&&span class=&n&&x&/span&&span class=&p&&,&/span&&span class=&n&&y&/span&&span class=&p&&);&/span&
&span class=&n&&y&/span& &span class=&o&&=&/span& &span class=&mi&&3&/span&&span class=&p&&;&/span&
&span class=&n&&x&/span& &span class=&o&&=&/span& &span class=&mi&&2&/span&&span class=&o&&+&/span&&span class=&p&&(&/span&&span class=&o&&--&/span&&span class=&n&&y&/span&&span class=&p&&);&/span&
&span class=&n&&printf&/span&&span class=&p&&(&/span&&span class=&s&&&%d %d&/span&&span class=&se&&\n&/span&&span class=&s&&&&/span&&span class=&p&&,&/span&&span class=&n&&x&/span&&span class=&p&&,&/span&&span class=&n&&y&/span&&span class=&p&&);&/span&
&span class=&n&&y&/span& &span class=&o&&=&/span& &span class=&mi&&3&/span&&span class=&p&&;&/span&
&span class=&n&&x&/span& &span class=&o&&=&/span& &span class=&p&&(&/span&&span class=&o&&--&/span&&span class=&n&&y&/span&&span class=&p&&);&/span&
&span class=&n&&printf&/span&&span class=&p&&(&/span&&span class=&s&&&%d %d&/span&&span class=&se&&\n&/span&&span class=&s&&&&/span&&span class=&p&&,&/span&&span class=&n&&x&/span&&span class=&p&&,&/span&&span class=&n&&y&/span&&span class=&p&&);&/span&
&span class=&n&&x&/span& &span class=&o&&=&/span& &span class=&n&&x&/span&&span class=&o&&+&/span&&span class=&p&&(&/span&&span class=&n&&y&/span&&span class=&o&&++&/span&&span class=&p&&)&/span&&span class=&o&&+&/span&&span class=&p&&(&/span&&span class=&o&&--&/span&&span class=&n&&y&/span&&span class=&p&&);&/span&
&span class=&n&&printf&/span&&span class=&p&&(&/span&&span class=&s&&&%d %d&/span&&span class=&se&&\n&/span&&span class=&s&&&&/span&&span class=&p&&,&/span&&span class=&n&&x&/span&&span class=&p&&,&/span&&span class=&n&&y&/span&&span class=&p&&);&/span&
&span class=&k&&return&/span& &span class=&mi&&0&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&br&&img src=&/c1730dea1edf2cd2b58b36cb_b.jpg& data-rawheight=&1440& data-rawwidth=&1080& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&/c1730dea1edf2cd2b58b36cb_r.jpg&&
问题是这样的,有同学问我一道关于c语言中自增自减的问题,在没有编译前进行分析,然后编译运行后就哭了,我算的结果是:4 26 15 34 22 24 2运行后错了4个结果,在百度上搜了一圈,全没有说清楚,还请大神帮助解答,附图片和源代码,注释的是测试用的.#include &stdio.h&
int main(int argc, char* argv[]) {
int x,y = 3;
//x = (y++)+(--y)+(--y);
//x = (y++);
//x = (y++) + (--y);
x = (y++) + (--y) + (--y);
//x = (--y) + (--y);
printf("%d %d\n",x,y);
x = 3+(--y)+(--y);
printf("%d %d\n",x,y);
x = (y++)+(--y);
printf("%d %d\n",x,y);
x = 2+(--y);
printf("%d %d\n",x,y);
x = (--y);
printf("%d %d\n",x,y);
x = x+(y++)+(--y);
printf("%d %d\n",x,y);
按投票排序
写出这样代码的人要被弹JJ弹到死。=====挖擦,微软大法好啊!又多了种不同答案!(Codeforces Custom Invocation)===问问你们老师,这&del&仨&/del&四个编译器谁死?!===clang++ 和 g++ 已经给出了未定义行为的提示了。
error:fuck the damn code and tanhaoqiang
如果不是考二级,那么请放弃这种无谓的探索,并远离这个老师。
无定义行为,这种代码本身就是错误的。很多初学者以为能编译通过的代码就没有语法错误,是被垃圾书所误导。能编译通过的不一定是正确(语法)的代码。参见:
C语言中有一个叫序列点(sequence point)的东西。在程序中,表达式可能会对系统环境做出改变,这样的改变被称为副作用(side effect),例如输入输出流、变量修改之类的操作。在程序的执行期间有一些点,这些点中,一个特定的表达式所有副作用都会完成,而下一个表达式的副作用尚未发生,程序中这样的点被称为序列点。在两个连续的序列点之间,可以用任何次序做局部的计算。作为一名程序猿,你不应当在两个序列点之间多次修改同一个对象。例如:i = i++;
// 错,赋值和递增运算可能会以任何次序进行,i 的值执行结束后无法预料作为一名程序猿,要始终记住,你写的程序除了给机器看,还要给人看。
这问题看的瞬间蛋碎一地
把谭浩强的那本C语言教程给扔了吧。工作后没人研究这玩意,即便你研究透了,你在工作项目中这样“炫技”的话,十有八九要被经理同事批……原则上不要在一个语句中多次操作一个变量。
貌似编程的宗旨是把人脑从这种无谓的推理中解放出来的吧ps. 我看到了360的存在
x = (y++) + (--y) + (--y);
假如第一个y值自加,y值更新,后面其中的某个更新后的y值自减,然后y值又更新,再最后一次自减,最后求和。
谁知道编译器的操作顺序呢?这写法简直就是弹自己的JJ …看着都疼………
有的编译器是从 = 号开始从左到右运算,所以得到结果如下而有些是全部都从右到左,正如你计算结果那样,到底去哪个,这个我觉得看编译后的汇编,你就明白了,
一条语句中对同一变量进行多次操作,语言规范中没有规定计算顺序,因而编译器可以自己选择实现方法。这就允许不同编译器有不同实现,有的从做到右算,有的从右到左算,有的从中间向两端算.....
好像有的编译器是从左向右组合,有的是从右向左,所以会出现不同的答案吧。

我要回帖

更多关于 俄罗斯编程大神 的文章

 

随机推荐