近些年来,各种笔试题就喜欢出这种自增自减运算符,这种题目若没有好的解题方法很烦人,今天我就教你接这种题目的方法,以后都是送分题。
小伙伴们先测试一下自己的水平:
int main()
{
int i = 2;
int num;
num = (i++) + (i++) + (i++) + (i++);
printf(“i = %d, num = %d”,i,num);
}
答案是:i = 6,num = 8;(你算对了吗?)
我们都知道i++是先使用完再自加,而++i是先自加再使用;
问题就出在完上面,何时算完,当遇到“函数的()”“,”“;”算结束
好了,我们一点一点分析吧:i = 2,i一直都等于2,,一直等到 i + i + i + i 等于8赋给num之后,i 才开始自增,这就叫使用完之后再自加。
再看一题:int i = 2;num = (++i)+(++i)+(++i)+(++i);求i,num。
看着题之前我们先明白一件事:就是计算3+2+5+4这个式子是不是先看到3和2 然后执行加法对吧,这题也一样,我们先看到第一个 i (i=3),然后看到第二个i(此时i=4),然后再执行加法4+4,然后看到第三个i(i=5),前面的结果和第三个 i 相加,8+5,然后看到第四个 i(i=6),
将前面的结果和 i 相加13+6=19=num,所以这题num=19;i=6;
是不是还有点迷糊,好,我们再看一题:i=2;
i = i *((i++)+(++i));求 i ,首先我们找到两个 i 求加法发现括号里面的一个是(i++),一个是(++i),根据先前所讲的(i++)先不自加,所以i=3,3+3=6,然后6和外面的3相乘=18,,最后才执行(i++)=19,所以i的值为19;记得(什么时候i++,要遇到结束符函数的(),和;这是i才++)。
为了验证心中所想,我们再看一题:i=2;
i=(i++)+(++i)+(++i)+(i++);求 i ,3+3=6,6+4=10;10+4=14;14+1=15;15+1=16;
好了,上面的题目估计也已经会了,
下面在函数参数传递时怎么算:
int f(int a,int b)
{
printf(“%d,%d\n”,a,b);
}
int main()
{
int i = 2;
f(i++,i++);
f(i++,++i);
f(++i,i++);
f(++i,++i);
}
函数传参时还怎么计算呢?
老师总结一个规律,i++等于数值,++i,i=变量名
我们看第一个f(i++,i++),对了,还有一点,函数在传参是从右向左传的,先看最右边的i++ 它等于数值所以是2,因为遇到逗号,所以(i=3)然后看左边的i++,它等于数值是3
所以值是3,2
我们再看f(i++,++i);++i等于i,(此时i=3)然后i++等于3,然后遇到i++(此时i=3),然后结束,i=4,所以值是3,4
看一道复杂点的:f(++i,++i,i++,++i,i++),我们从最右边开始(,2)(,i,2)(4,i,2)(i,i,4,i,2),然后所有的i等于7,所以答案:77472
++i与i++
Int i = 1;
(i++)+(i++)+(i++)=6
i=4
(++i)+(++i)+(++i)=9
i=4
Int i = 2;
函数从右向左看,i++看成2;++i看成i;i也看成i;
Int fun(i++,++i);
Printf(a,b);
A = 3
B = 4
*我总结这种函数传参的方法是所有++i和i都等于i最大值
i++等于它右边的的i 的值**举个例子,i++,++i,i,i++,++i
等于( 5, i, i,3,i)【i++右边加几次就是几】
i等于最大值6,最后答案(5,6,6,3,6);