黃建瓊
摘要:自增自減運(yùn)算符在C語(yǔ)言的編程過程中經(jīng)常用到,具有重要的作用,而靈活使用自增自減運(yùn)算符則是個(gè)難點(diǎn)。該文從幾個(gè)例子入手,觀察運(yùn)行的結(jié)果,對(duì)結(jié)果進(jìn)行分析,最后得出結(jié)論。以期能使初學(xué)者避重就輕,從而熟練掌握自增自減運(yùn)算符。
關(guān)鍵詞:C語(yǔ)言;自增自減運(yùn)算符;表達(dá)式;函數(shù)
中圖分類號(hào):TP301文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):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語(yǔ)言功能強(qiáng)大,使用靈活,是初學(xué)者的很好的入門語(yǔ)言。而C語(yǔ)言中規(guī)則繁多、運(yùn)算符豐富,特別是含有自增自減運(yùn)算符的同一個(gè)表達(dá)式在不同情況下具有不同的值,讓許多初學(xué)者感到困難。本文以TURBO C為運(yùn)行環(huán)境,從示例入手,由淺入深,巧析自增自減運(yùn)算符的使用。
1 自增自減運(yùn)算符的功能
自增自減運(yùn)算符的符號(hào)分別為“++”和“--”,其作用是使變量的值增1或減1,它的操作方法又分為兩種,即運(yùn)算符在變量前和運(yùn)算符在變量后,本文為了說明方便,統(tǒng)一用前自增(前自減)或后自增(后自減)來引用。
例1: ++i,i++(在使用之前,使i的值加1)
這里,++ i和i++的作用相當(dāng)于i =i+1。但++ i和i++出現(xiàn)在表達(dá)式或語(yǔ)句中是有區(qū)別的。
例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)
當(dāng)“++”在后時(shí),先使用i的值,再執(zhí)行i=i+1;當(dāng)“++”在前時(shí),先執(zhí)行j=j+1,再使用j的值。所以m和n的結(jié)果分別是3和4。
2 自增自減運(yùn)算符在賦值表達(dá)式中的應(yīng)用
例3:main()
{ int i=3,a;
a=(++i)+(i--)+i;
printf("a=%d,i=%d ",a,i);}
運(yùn)行程序,輸出結(jié)果為a=12,i=3。
分析:先計(jì)算++i,i的值變?yōu)?,右邊三個(gè)i均取4, a的值為4+4+4=12,最后i減1變?yōu)?。
例4:main()
{ int i=3,a;
a=(++i)+(i--)+(++i)+i;
printf("a=%d,i=%d ",a,i);}
運(yùn)行程序,輸出結(jié)果為a=20,i=4。
分析:先計(jì)算兩個(gè)++i,i的值變?yōu)?,右邊四個(gè)i均取5, a的值為5+5+5+5=20,最后i減1變?yōu)?。
根據(jù)以上兩個(gè)例子及眾多的實(shí)驗(yàn),在涉及自增自減的賦值表達(dá)式運(yùn)算中,筆者總結(jié)出如下計(jì)算規(guī)律:1) 碰到前自增自減的情況時(shí),先計(jì)算前自增自減表達(dá)式;2) 統(tǒng)一處理整個(gè)表達(dá)式,求解;3) 最后進(jìn)行后自增自減運(yùn)算。
例5:main()
{ int n=4,m;
m=(++n)+(--n)+(++n)+(++n)+(n--)+n;
printf("m=%d,n=%d ",m,n);}
運(yùn)行程序,輸出結(jié)果為m=36,n=5。
根據(jù)以上結(jié)論進(jìn)行推導(dǎo):1)計(jì)算(++n)、(--n)、(++n)和(++n),得出n=6;2)m=6+6+6+6+6+6,等于36;3)計(jì)算n--,n等于5。
例6:main()
{ i=3;
i=(++i)+(i--)+i;
printf("i=%d ",i);}
運(yùn)行程序,輸出結(jié)果為i=11。
根據(jù)以上結(jié)論推導(dǎo):1)計(jì)算++i,得出i=4;2)i=4+4+4,等于12;3)計(jì)算i--,i等于11。
3 自增自減運(yùn)算符在printf函數(shù)中的應(yīng)用
例7:main()
{ int i=3;
printf("a=%d ", (++i)+(i--)+i);}
運(yùn)行程序,輸出結(jié)果為a=11。
觀察例7和例3,例7是由例3修改而來的。在例3中,(++i)+(i--)+i是放在賦值表達(dá)式中,而例7中(++i)+(i--)+i是放在printf函數(shù)中作為參數(shù),而結(jié)果卻不一樣。這說明自增自減運(yùn)算符在賦值表達(dá)式和printf函數(shù)中的應(yīng)用是不一樣的。
分析:先計(jì)算++i,i的值變?yōu)?,表達(dá)式變?yōu)?+(i--)+i;接著前兩項(xiàng)相加結(jié)果為8+i,i變?yōu)?;最后計(jì)算8+3,等于11。
例8:main()
{ int i=3;
printf("%d ", (i++)+(i++)+(i++));}
運(yùn)行程序,輸出結(jié)果12。
分析:先計(jì)算表達(dá)式,變?yōu)?+(i++)+(i++),i的值變?yōu)?;接著前兩項(xiàng)相加,表達(dá)式變?yōu)?+4+(i++),即7+(i++),i的值變?yōu)?;最后計(jì)算整個(gè)表達(dá)式的值為7+5,等于12,i的值為6。
例9:main()
{int i=3;
printf("%d ", (++i)+( ++i)+( ++i));}
運(yùn)行程序,輸出結(jié)果a=15。
計(jì)算的過程和上例一樣,按照自左向右的規(guī)則,i的值依次為4、5、6,表達(dá)式的值為4+5+6=15
由上例7~例9及大量的實(shí)驗(yàn),可以歸納如下:當(dāng)自增自減表達(dá)式作為printf函數(shù)的參數(shù)時(shí),按自左向右的原則,依次計(jì)算得出結(jié)果。
例10:main()
{int i=3;
printf("%d ", (++i)+(i++)+( ++i));}
運(yùn)行程序,輸出結(jié)果14。
運(yùn)用上述結(jié)論,不難推出i的結(jié)果為6,表達(dá)式的結(jié)果為4+4+6,即14。
4 小結(jié)
自增自減運(yùn)算符在編程過程中經(jīng)常用到,靈活的使用它,可以簡(jiǎn)化編程語(yǔ)句。而它在不同地方、不同編譯環(huán)境下的實(shí)現(xiàn)過程不一,這就要求使用者在使用時(shí)要倍加小心。此外,對(duì)于初學(xué)者一定要勤學(xué)多問、多實(shí)踐。
參考文獻(xiàn):
[1] 譚浩強(qiáng).C程序設(shè)計(jì)[M].3版.北京:清華大學(xué)出版社,2005.
[2] 譚浩強(qiáng),張基溫.C語(yǔ)言程序設(shè)計(jì)教程[M].3版.北京:高等教育出版社,2006.
[3] 張莉.C程序設(shè)計(jì)教程[M].北京:電子工業(yè)出版社,2000.
電腦知識(shí)與技術(shù)2010年11期