c语言自增自减问题总结_第1页
c语言自增自减问题总结_第2页
c语言自增自减问题总结_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C 语言自增自減问题总结 在程序设计中,经常遇到“i=i+1”和“i=i-1”这两种极为常用的操作。C 语言为这种操作提供了两个更为简洁的运算符,即+和-,分别叫做自增运算 符和自减运算符。它们是单目运算符,是从右向左结合的算术运算符。学习和 应用这两个运算符时应注意以下几点: 我将自增自减运算符和变量结合在一下的表达式称为自增自减表达式,如 x+,-I 等。通常情况下就有以下的结论: 1前缀表达式:+x, -x; 其中 x 表示变量名,先完成变量的自增自减 1 运算,再用 x 的值作为表达式的值;即“先变后用”,也就是变量的值先变, 再用变量的值参与运算。 2、后缀表达式:x+, x-; 先用 x 的当前值作为表达式的值,再进行自 增自减 1 运算。即“先用后变”,也就是先用变量的值参与运算,变量的值再 进行自增自减变化,。 如 a=8; b=a+; c=+a; 其中赋给变量 b 的值为表达式(a+)的值,不应该 理解为 a 的值,则 b=8, c=10; 3、自增、自减运算只能用于单个变量,只要是标准类型的变量,不管是整 型、实型,还是字符型变量等,但不能用于表达式或常量。如:+(a+b), 与 5+, const int N=0; N+; 等都是错误的。 而 i+j+、+i+(+j)、 +a+b+、+array-j;等,这些都是合法的。 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。此赋值表达式的值即为所赋的值-5。不要因为 k=-i+等效于 k=-(i+) 就先做“+”运算!这里采用的是“先用后变”,即先拿出 i 的值做负号“-” 运算,把这个值赋给变量 k 之后变量 i 才自增。 5、注意运算符的副作用 C 语言允许在一个表达式中使用一个以上的赋值类运算,包括赋值运算符、 自增运算符、自减运算符等。这种灵活性使程序简洁,但同时也会引起副作用。 这种副作用主要表现在:使程序费解,并易于发生误解或错误。例如,当 i=3 时,表达式(i+)+(i+)+(i+)的值为多少,各种教材说法不统一。对于这种情 况,为了增强程序的可读性与可移植性,在一个表达式中,就应该用简单的自 增与自减运算,不用对同一变量进行多次自增自减运算的表达式,否则,其他 人可能看不懂,换个运行环境也可能是不同的结果。我相信,在考试试题中也 是不会出现象这种有不同结果的试题的,请读者放心。当然,为了丰富知识, 了解一下这些内容也是必要的。 以下内容是经查阅资料所得:用各种表达式上机测试,给出 VC+环境下连 续自增(自减)运算规则: 1、 在一般表达式中和在函数参数中计算的结果相同(这一点与 Turbo C 环 境不同); 2、 后缀:同表达式中 Turbo C 的情况相同:先统一取值后依次自增,如: int a,i=5; a=i+i+i+; a=15, i=8. 3、 前缀:前两个自增同 Turbo C,即依次自增后统一取值,后面的每个自 增后即取值,如: int a, i=5; a= +i +(+i)+(+i); a=22, i=8. 4、 前后缀混合的情况: (1) 一般情况:表达式中自左向右计算,参数自右向左运算。前缀自增后 取值;后缀(或变量)取值依其所处位置而定,有连续多个将统一取值,其自 增在语句结束前进行。 (2) 前后缀各有一个的情况:设 int i=5; 由于 i+*+i 应满足交换率与 +i*i+相同,规定按后者计算故为 36。实验 2 内容 4:int i=5; printf(“%d,%dn“, -i, i+*+i ); 打印 5,36。 (3) 若 i+或+i 或两者有多于一个的情况:+i 有两个以上在一起时最左 边的连续自增同 3、,其余每个自增后取值,如:int i=5; printf(“%dn%dn“,-i,(+i)+(i+)+(i+)+(+i); 打印 6 和 25 printf(“%dn%dn“,-i,(+i)+(+i)+(+i)+(+i)+(i+); 打印 8 和 40 printf(“%dn%dn“,-i,(+i)+(+i)+(+i)+i+(+i)+(+ i); 打印 9 和 49 (4) 函数参数中有括号时,括号参数优先计算,其余参数仍自右向左计算, 如: int i=9,j=8; printf(“%d %dn“, (+i, j-), +i); 打印 8 11 printf(“%d %d %dn“, (+i, j-), +i, i); 打印 8 11 10 (5) 最后 i 的值等于原值加总自增次数减自减的次数. 克服这类副作用的方法是,尽量把程序写得易懂一些,即将费解处分解成 若干个语句。如:k=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论