您的位置】:知源论文网 > 理工类论文 > 计算机 > 正文阅读资讯:C语言中多个自增自减的运算规律

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

[作者:杨泽明[来源:互联网]| 打印 | 关闭 ]

  摘 要:C语言允许在一个表达式中使用一个以上的自增运算符、自减运算符,这种灵活性使程序简洁,但同时也会引起副作用。这种副作用主要表现在:使程序费解,并易于发生误解或错误。例如,当i=3时,表达式(i++)+(i++)+(i++)的值为多少,各种教材说法不统一或者干脆回避这类问题。为了弄清楚C语言中多个自增或自减运算符的运算规律,笔者经查阅大量资料并反复上机验证,总结出在VC++6.0环境下多个自增自减的运算规律。
  关键词:自增;自减;运算规律
  中图分类号:TP311
  C语言中有两个很奇特的单目运算符:++(自增运算符)和--(自减运算符),自增运算符和自减运算符都有前缀式和后缀式。这两个运算符在C语句中,尤其是循环语句中使用较为广泛,对于单个的自增运算符或自减运算符,相信大家都易于理解。但是,C语言允许在一个表达式中使用一个以上的自增运算符、自减运算符,这种灵活性使程序简洁,但同时也会引起副作用。这种副作用主要表现在:使程序费解,并易于发生误解或错误。例如,当i=3时,表达式(i++)+(i++)+(i++)的值为多少,各种教材说法不统一或者干脆回避这类问题。既然前面提到在一个表达式中可以有多个自增或自减运算符,我们不能总是以费解或避免出错为由来回避这个问题,不用归不用,了解一下这些内容还是相当有必要的。为了弄清楚C语言中多个自增或自减运算符的运算规律,笔者经查阅大量资料并反复上机验证,总结出在VC++6.0环境下多个自增自减的运算规律。
  1 连续多个后缀的运算规律
  先统一取值后依次自增或自减。如:
  #include
  void main()
  {
  int a,i=5;
  a=(i++)+(i++)+(i++);
  printf(“a=%d,i=%d\n”,a,i);
  }
  其运算规律是先对所有的i++统一取值5,然后i依次自增3次,即 a=5+5+5=15,i=5+1+1+1=8。
  因此,程序输出结果为:a=15,i=8
  2 连续多个前缀的运算规律
  前两个连续的前缀(两个连续自增,或者两个连续自减,或者一个自增一个自减),即依次自增(减)后,统一取第二个自增(减)的值,后面的每个自增(减)后即刻取值。如:
  #include
  void main()
  {
  int a, i=5;
  a= (++i)+(++i)+(++i);
  printf(“a=%d,i=%d\n”,a,i);
  }
  第一个++i的值为6,第二个++i的值为7,第三个++i的值为8,但第一个++i和第二个++i统一取第二个++i的值7,即 a=7+7+8=22,而i的值则依次自增,即i=5+1+1+1=8。
  因此,程序输出结果为:a=22,i=8
  同理,我们再看一个稍复杂的例子:
  #include
  void main()
  {
  int a,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
  当然,多个自增自减之间的其它算术运算也适用此规律。如:
  #include
  void main()
  {
  int a,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
  void main()
  {
  int a,i=5;
  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
  void main()
  {
  int a, i=5;
  a=(i++)*(++i);
  printf(“a=%d,i=%d\n”,a,i);
  }
  由于(i++)*(++i)应满足交换率与(++i)*(i++)相同,规定按后者计算,即先计算前缀再计算后缀,故a=6*6=36,i=5+1+1=7。因此,程序输出结果为:a=36,i=7
  当自增(减)出现在函数表达式的参数列表中,它的计算方法与作为普通语句的运算结果是完全不同的。因此如果函数有多个参数,则参数自右向左计算,如:

Tags: