黄建琼
摘要:自增自减运算符在C语言的编程过程中经常用到,具有重要的作用,而灵活使用自增自减运算符则是个难点。该文从几个例子入手,观察运行的结果,对结果进行分析,最后得出结论。以期能使初学者避重就轻,从而熟练掌握自增自减运算符。
关键词:C语言;自增自减运算符;表达式;函数
中图分类号:TP301文献标识码:A文章编号:1009-3044(2010)11-2631-02
Skillfully Apply the Autoincrement and Autodecrement Operators in the C Programming Language
HUANG Jian-qiong
(Fuzhou Technical College of Foreign Studies, Fuzhou 350018, China)
Abstract: Autoincrement and autodecrement operators in the C programming language frequently used process has an important role, while the flexible use of autoincrement and autodecrement operators is a difficult. In this paper, a few examples to start to observe the operation results, the results were analyzed, the final conclusion. With a view to enable the novice takes the easy way to master the autoincrement and autodecrement operators.
Key words: C programming language; increment and decrement operators; expression; function
C语言功能强大,使用灵活,是初学者的很好的入门语言。而C语言中规则繁多、运算符丰富,特别是含有自增自减运算符的同一个表达式在不同情况下具有不同的值,让许多初学者感到困难。本文以TURBO C为运行环境,从示例入手,由浅入深,巧析自增自减运算符的使用。
1 自增自减运算符的功能
自增自减运算符的符号分别为“++”和“--”,其作用是使变量的值增1或减1,它的操作方法又分为两种,即运算符在变量前和运算符在变量后,本文为了说明方便,统一用前自增(前自减)或后自增(后自减)来引用。
例1: ++i,i++(在使用之前,使i的值加1)
这里,++ i和i++的作用相当于i =i+1。但++ i和i++出现在表达式或语句中是有区别的。
例2:int i=3,j=3,m,n;
m=i++;(i的值赋给m,m的值为3,之后i加1,值为4)
n=++j; (j加1,值为4,4赋给n,n的值为4)
当“++”在后时,先使用i的值,再执行i=i+1;当“++”在前时,先执行j=j+1,再使用j的值。所以m和n的结果分别是3和4。
2 自增自减运算符在赋值表达式中的应用
例3:main()
{ int i=3,a;
a=(++i)+(i--)+i;
printf("a=%d,i=%d
",a,i);}
运行程序,输出结果为a=12,i=3。
分析:先计算++i,i的值变为4,右边三个i均取4, a的值为4+4+4=12,最后i减1变为3。
例4:main()
{ int i=3,a;
a=(++i)+(i--)+(++i)+i;
printf("a=%d,i=%d
",a,i);}
运行程序,输出结果为a=20,i=4。
分析:先计算两个++i,i的值变为5,右边四个i均取5, a的值为5+5+5+5=20,最后i减1变为4。
根据以上两个例子及众多的实验,在涉及自增自减的赋值表达式运算中,笔者总结出如下计算规律:1) 碰到前自增自减的情况时,先计算前自增自减表达式;2) 统一处理整个表达式,求解;3) 最后进行后自增自减运算。
例5:main()
{ int n=4,m;
m=(++n)+(--n)+(++n)+(++n)+(n--)+n;
printf("m=%d,n=%d
",m,n);}
运行程序,输出结果为m=36,n=5。
根据以上结论进行推导:1)计算(++n)、(--n)、(++n)和(++n),得出n=6;2)m=6+6+6+6+6+6,等于36;3)计算n--,n等于5。
例6:main()
{ i=3;
i=(++i)+(i--)+i;
printf("i=%d
",i);}
运行程序,输出结果为i=11。
根据以上结论推导:1)计算++i,得出i=4;2)i=4+4+4,等于12;3)计算i--,i等于11。
3 自增自减运算符在printf函数中的应用
例7:main()
{ int i=3;
printf("a=%d
", (++i)+(i--)+i);}
运行程序,输出结果为a=11。
观察例7和例3,例7是由例3修改而来的。在例3中,(++i)+(i--)+i是放在赋值表达式中,而例7中(++i)+(i--)+i是放在printf函数中作为参数,而结果却不一样。这说明自增自减运算符在赋值表达式和printf函数中的应用是不一样的。
分析:先计算++i,i的值变为4,表达式变为4+(i--)+i;接着前两项相加结果为8+i,i变为3;最后计算8+3,等于11。
例8:main()
{ int i=3;
printf("%d
", (i++)+(i++)+(i++));}
运行程序,输出结果12。
分析:先计算表达式,变为3+(i++)+(i++),i的值变为4;接着前两项相加,表达式变为3+4+(i++),即7+(i++),i的值变为5;最后计算整个表达式的值为7+5,等于12,i的值为6。
例9:main()
{int i=3;
printf("%d
", (++i)+( ++i)+( ++i));}
运行程序,输出结果a=15。
计算的过程和上例一样,按照自左向右的规则,i的值依次为4、5、6,表达式的值为4+5+6=15
由上例7~例9及大量的实验,可以归纳如下:当自增自减表达式作为printf函数的参数时,按自左向右的原则,依次计算得出结果。
例10:main()
{int i=3;
printf("%d
", (++i)+(i++)+( ++i));}
运行程序,输出结果14。
运用上述结论,不难推出i的结果为6,表达式的结果为4+4+6,即14。
4 小结
自增自减运算符在编程过程中经常用到,灵活的使用它,可以简化编程语句。而它在不同地方、不同编译环境下的实现过程不一,这就要求使用者在使用时要倍加小心。此外,对于初学者一定要勤学多问、多实践。
参考文献:
[1] 谭浩强.C程序设计[M].3版.北京:清华大学出版社,2005.
[2] 谭浩强,张基温.C语言程序设计教程[M].3版.北京:高等教育出版社,2006.
[3] 张莉.C程序设计教程[M].北京:电子工业出版社,2000.