c语言中多个自增自减的运算规律

c语言中多个自增自减的运算规律

ID:22631313

大小:66.00 KB

页数:8页

时间:2018-10-30

c语言中多个自增自减的运算规律_第1页
c语言中多个自增自减的运算规律_第2页
c语言中多个自增自减的运算规律_第3页
c语言中多个自增自减的运算规律_第4页
c语言中多个自增自减的运算规律_第5页
资源描述:

《c语言中多个自增自减的运算规律》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、C语言中多个自增自减的运算规律  摘要:C语言允许在一个表达式中使用一个以上的自增运算符、自减运算符,这种灵活性使程序简洁,但同时也会引起副作用。这种副作用主要表现在:使程序费解,并易于发生误解或错误。例如,当i=3时,表达式(i++)+(i++)+(i++)的值为多少,各种教材说法不统一或者干脆回避这类问题。为了弄清楚C语言中多个自增或自减运算符的运算规律,笔者经查阅大量资料并反复上机验证,总结出在VC++6.0环境下多个自增自减的运算规律。  关键词:自增;自减;运算规律  中图分类号:TP311  C语言中有两个很奇特的单目

2、运算符:++(自增运算符)和--(自减运算符),自增运算符和自减运算符都有前缀式和后缀式。这两个运算符在C语句中,尤其是循环语句中使用较为广泛,对于单个的自增运算符或自减运算符,相信大家都易于理解。但是,C语言允许在一个表达式中使用一个以上的自增运算符、自减运算符,这种灵活性使程序简洁,但同时也会引起副作用。这种副作用主要表现在:使程序费解,并易于发生误解或错误。例如,当i=3时,表达式(i++)+(i++)+(i++)的值为多少,各种教材说法不统一或者干脆回避这类问题。既然前面提到在一个表达式中可以有多个自增或自减运算符,我们不

3、能总是以费解或避免出错为由来回避这个问题,不用归不用,了解一下这些内容还是相当有必要的。为了弄清楚C语言中多个自增或自减运算符的运算规律,笔者经查阅大量资料并反复上机验证,总结出在VC++6.0环境下多个自增自减的运算规律。  1连续多个后缀的运算规律  先统一取值后依次自增或自减。如:  #include  voidmain()  {  inta,i=5;  a=(i++)+(i++)+(i++);  printf(a=%d,i=%d\n,a,i);  }  其运算规律是先对所有的i++统一取值5,然后i依次自增3次,即a=5+

4、5+5=15,i=5+1+1+1=8。  因此,程序输出结果为:a=15,i=8  2连续多个前缀的运算规律  前两个连续的前缀(两个连续自增,或者两个连续自减,或者一个自增一个自减),即依次自增(减)后,统一取第二个自增(减)的值,后面的每个自增(减)后即刻取值。如:  #include  voidmain()  {  inta,i=5;  a=(++i)+(++i)+(++i);  printf(a=%d,i=%d\n,a,i);  }  第一个++i的值为6,第二个++i的值为7,第三个++i的值为8,但第一个++i和第二个

5、++i统一取第二个++i的值7,即a=7+7+8=22,而i的值则依次自增,即i=5+1+1+1=8。  因此,程序输出结果为:a=22,i=8  同理,我们再看一个稍复杂的例子:  #include  voidmain()  {  inta,i=5;  a=(--i)+(++i)+(++i)+(--i);  printf(a=%d,i=%d\n,a,i);  }  其运算过程为:a=5+5+6+5=21,i=5-1+1+1-1=5。  因此,程序输出结果为:a=21,i=5  当然,多个自增自减之间的其它算术运算也适用此规律。如

6、:  #include  voidmain()  {  inta,i=5;  a=(++i)*(--i);  printf(a=%d,i=%d\n,a,i);  }  其运算过程为:a=5*5=25,i=5+1-1=5。因此,程序输出结果为:a=25,i=5  3前后缀混合的情况  3.1一般情况:表达式中自左向右计算,函数参数列表中自右向左运算。前缀自增(减)后取值;后缀(或变量)取值依其所处位置而定,有连续多个将统一取值,其自增(减)在语句结束前进行。如:  #include  voidmain()  {  inta,i=5;

7、  a=(++i)+(++i)+(i++)+(i++)+(++i);  printf(a=%d,i=%d\n,a,i);  }  其运算过程为:a=7+7+7+7+8=36,i=5+1+1+1+1+1=10。因此,程序输出结果为:a=36,i=10  3.2前后缀各有一个的情况:如:  #include  voidmain()  {  inta,i=5;  a=(i++)*(++i);  printf(a=%d,i=%d\n,a,i);  }  由于(i++)*(++i)应满足交换率与(++i)*(i++)相同,规定按后者计算,即

8、先计算前缀再计算后缀,故a=6*6=36,i=5+1+1=7。因此,程序输出结果为:a=36,i=7  当自增(减)出现在函数表达式的参数列表中,它的计算方法与作为普通语句的运算结果是完全不同的。因此如果函数有多个参数,则参数自右向左计算,如:  

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

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

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