c语言自增自减问题总结

c语言自增自减问题总结

ID:32192627

大小:57.80 KB

页数:3页

时间:2019-02-01

c语言自增自减问题总结_第1页
c语言自增自减问题总结_第2页
c语言自增自减问题总结_第3页
资源描述:

《c语言自增自减问题总结》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、C语言自增自減问题总结在程序设计中,经常遇到“i=i+1”和“i=i-1”这两种极为常用的操作。C语言为这种操作提供了两个更为简洁的运算符,即++和--,分别叫做自增运算符和自减运算符。它们是单目运算符,是从右向左结合的算术运算符。学习和应用这两个运算符时应注意以下几点:我将自增自减运算符和变量结合在一下的表达式称为自增自减表达式,如x++,--I等。通常情况下就有以下的结论:1‘’前缀表达式:++x,--x;其中x表示变量名,先完成变量的自增自减1运算,再用x的值作为表达式的值;即“先变后用”,也就是变量的值先变,再用变量的值参与运算。2、后缀

2、表达式:x++,x--;先用x的当前值作为表达式的值,再进行自增自减1运算。即“先用后变”,也就是先用变量的值参与运算,变量的值再进行自增自减变化,。如a=8;b=a++;c=++a; 其中赋给变量b的值为表达式(a++)的值,不应该理解为a的值,则b=8,c=10;3、自增、自减运算只能用于单个变量,只要是标准类型的变量,不管是整型、实型,还是字符型变量等,但不能用于表达式或常量。如:++(a+b),与5++,constintN=0;N++;等都是错误的。而i+++j++、++i+(++j)、++a+b++、++array[--j];等,这些都

3、是合法的。4、再说结合性与结合方向编译器对程序编译时,从左到右尽可能多地将字符组合成一个运算符或标识符,因此i+++j++等效于(i++)+(j++),两个“++”作用的对象都是变量,这是合法的;而++i+++j等效于++(i++)+j,第1个“++”作用的对象是表达式“i++”,这是不允许的。自增自减运算符是单目运算符,其结合性是从右到左。表达式k=-i++等效于k=(-i)++还是k=-(i++)?。因为负号也是单目运算符,因此,上式从右到左结合,等效于k=-(i++);若i=5,则表达式k=-i++运算之后k的值为-5,i的值为6。此赋值表

4、达式的值即为所赋的值-5。不要因为k=-i++等效于k=-(i++)就先做“++”运算!这里采用的是“先用后变”,即先拿出i的值做负号“-”运算,把这个值赋给变量k之后变量i才自增。5、注意运算符的副作用C语言允许在一个表达式中使用一个以上的赋值类运算,包括赋值运算符、自增运算符、自减运算符等。这种灵活性使程序简洁,但同时也会引起副作用。这种副作用主要表现在:使程序费解,并易于发生误解或错误。例如,当i=3时,表达式(i++)+(i++)+(i++)的值为多少,各种教材说法不统一。对于这种情况,为了增强程序的可读性与可移植性,在一个表达式中,就应

5、该用简单的自增与自减运算,不用对同一变量进行多次自增自减运算的表达式,否则,其他人可能看不懂,换个运行环境也可能是不同的结果。我相信,在考试试题中也是不会出现象这种有不同结果的试题的,请读者放心。当然,为了丰富知识,了解一下这些内容也是必要的。以下内容是经查阅资料所得:用各种表达式上机测试,给出VC++环境下连续自增(自减)运算规则:1、在一般表达式中和在函数参数中计算的结果相同(这一点与TurboC环境不同);2、后缀:同表达式中TurboC的情况相同:先统一取值后依次自增,如:inta,i=5;a=i+++i+++i++;a=15,i=8.3

6、、前缀:前两个自增同TurboC,即依次自增后统一取值,后面的每个自增后即取值,如:inta,i=5;a=++i+(++i)+(++i);a=22,i=8.4、前后缀混合的情况:(1)一般情况:表达式中自左向右计算,参数自右向左运算。前缀自增后取值;后缀(或变量)取值依其所处位置而定,有连续多个将统一取值,其自增在语句结束前进行。(2)前后缀各有一个的情况:设inti=5;由于i++*++i应满足交换率与++i*i++相同,规定按后者计算故为36。实验2内容4:inti=5;printf("%d,%d",--i,i++*++i);打印5,36

7、。(3)若i++或++i或两者有多于一个的情况:++i有两个以上在一起时最左边的连续自增同3、,其余每个自增后取值,如:inti=5;printf("%d%d",--i,(++i)+(i++)+(i++)+(++i));打印6和25printf("%d%d",--i,(++i)+(++i)+(++i)+(++i)+(i++));打印8和40printf("%d%d",--i,(++i)+(++i)+(++i)+i+(++i)+(++i));打印9和49(4)函数参数中有括号时,括号参数优先计算,其余参数仍自右向左计算,如:

8、inti=9,j=8;printf("%d%d",(++i,j--),++i);打印811printf("%d%d%d",(++

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。