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