如何做形如k=(i++)+(++i)+(++i)的c语言题呢

首先,我不会汇编语言,也没有进入反编译参看它具体是如何进行运算的。我这里写出来只是一个总结,或者说碰到这样的题,我们该如何写出这个结果。

下面我主要分析的还是在VC下进行:

void main()
{

  int i=5;
  int k;
    k=(i++)+(++i)+(i++);//6+6+6=18
//	k=(++i)+(++i)+(++i) ;//7+7+8=22
//	k=(i++)+(i)+(i++);//5+5+5=15
//	k=(i++)+(++i)+(++i);//6+6+7=19	
//	k=(i++)+(i++)+(++i);//5+5+6=16
//	k=(i++)+(++i)+(i++);//6+6+6=18
//	k=(++i)+(++i);//7+7=14
//	k=(++i)+(i++)+(i++)+(i++);//6+6+6+6=24
//	k=(i++)+(i)+(++i);//5+5+6=16
	printf("%d %d",k,i);
}
上面的代码给出了计算测试的结果,我们并对结果进行了分析,尽管这种分析可能是错误的,但是我们在上述的测试中都通过了验证。


1、首先我们看第一个 k=(i++)+(++i)+(i++);我们先在计算这个表达式上遵循两个原则:1)加号和自加运算符的优先级原则。2)从左到右两两相加的原则。

那么对于上式我们分两步进行运算先计算(i++)+(++i)的结果,然后在计算该结果和最后一个(i++)相加的结果。在第一步中,我们先考虑优先级的原则即++和+号的优先级,加号的两边一个是i++一个是++i,先后对这两个运算后,i的结果为6,然后在计算中间的加号即为6+6=12,此时i为6。我们将同样的运算法则应用到对最后一个元素的加法,此时i先运算i++,因为是后加所以此时i的值并不改变任然为6,故k=6+6+6=18。对于i的结果,就是不管是前增运算还是后增运算,因为都是运算完输出,所以i的只加三次1,即为8.


posted on 2013-11-30 17:18  Raby_Draby  阅读(852)  评论(2编辑  收藏  举报

导航