c语言疑问

[复制链接]
查看11 | 回复5 | 2010-8-5 00:46:04 | 显示全部楼层 |阅读模式
#include"stdio.h"
main()
{
int a,b;
a=3;
b=(a++)*(++a)+(a--)*(--a);

printf(",b=%d\n",b);
}
、用VC得b=25,但答案不是。。我也觉得不是,找人看看。
其实我想要的是这程序错哪了。。。 为什么我的出来是25。。。

回复

使用道具 举报

千问 | 2010-8-5 00:46:04 | 显示全部楼层
要弄清计算的顺序就清楚了。得25说明编译器是从左向右运算的。首先做a++再做++a之后将a++与++a的结果相乘然后是a--和--a再把a--和--a的结果相乘最后运行相加这里a++和a--对当前运算中的a的值没有影响暂且不看。++a后a的值变为4那么(a++)*(++a)的结果就是16接下来做--a,a的值又变回3,所以(a--)*(--a)的结果是9加和就是25了。 其实这个是根据不同的编译器来的,不同的编译器运算的顺序是不一样的。
回复

使用道具 举报

千问 | 2010-8-5 00:46:04 | 显示全部楼层
程序没有错!我来告诉你编译器是怎么算得25:关键看这个语句b=(a++)*(++a)+(a--)*(--a);编译器怎么理解这个语句的呢?在一个语句中,对于a++,是先调用a的值,在下个语句中,调用到的a才会加1,在同个语句中,a的值是不变的;对于++a,就是先强制把a加个1,才去参加运算的,所以在同个语句中,a的值是有变化的。对于这个语句,编译器先
回复

使用道具 举报

千问 | 2010-8-5 00:46:04 | 显示全部楼层
这个25怎么来的,我都晕晕得。。。
回复

使用道具 举报

千问 | 2010-8-5 00:46:04 | 显示全部楼层
这个问题不要深究啊,序编译器有关的
回复

使用道具 举报

千问 | 2010-8-5 00:46:04 | 显示全部楼层
我刚刚运行了下,也纠结了会儿。现在我跟你说下他则么计算的。 b=(a++)*(++a)+(a--)*(--a);先是前面的(a++)*(++a),由于a++在当前程序下是不会变值的,所以起作用的还是++a,执行完后a=4.然后乘法,前面就是4*4=16;然后a=4是吧,接着做下面的同理,最后是3*3=9;最后为25。 如果你讲这两个导致下就会出现答案
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行