在DEVC++環(huán)境下C語(yǔ)言自加自減運(yùn)算符使用分析_第1頁(yè)
在DEVC++環(huán)境下C語(yǔ)言自加自減運(yùn)算符使用分析_第2頁(yè)
在DEVC++環(huán)境下C語(yǔ)言自加自減運(yùn)算符使用分析_第3頁(yè)
在DEVC++環(huán)境下C語(yǔ)言自加自減運(yùn)算符使用分析_第4頁(yè)
在DEVC++環(huán)境下C語(yǔ)言自加自減運(yùn)算符使用分析_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、    在devc+環(huán)境下c語(yǔ)言自加自減運(yùn)算符使用分析    袁玲摘要:針對(duì)c語(yǔ)言運(yùn)算符使用規(guī)則,分析了在dev c+環(huán)境下自加/自減運(yùn)算符的使用方法和在復(fù)雜表達(dá)式中的求值情況分析,并針對(duì)問(wèn)題給出了解決方案。關(guān)鍵詞:c語(yǔ)言;自增運(yùn)算符;自減運(yùn)算符:tp311 :a :1009-3044(2016)27-0248-02abstract:for the c language operators use rules, analysis of the add-self /sub-self and evaluation in the analysis of com

2、plex expressions with dev c+, and the solutions were given.key words: c language;add-self;add-selfc語(yǔ)言是典型的結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言,在國(guó)內(nèi)外得到了廣泛的使用,也是各大學(xué)普遍開(kāi)設(shè)的程序設(shè)計(jì)課程。在近年的教學(xué)過(guò)程中,大多借用c+的編輯環(huán)境編輯c程序,使用較多的有visual c+,dev c+等。在這些編輯環(huán)境下運(yùn)行c程序,對(duì)于某些特定的操作,對(duì)不同的編譯器可能會(huì)得到不同的運(yùn)行結(jié)果。筆者發(fā)現(xiàn),在c語(yǔ)言的運(yùn)算符中,自加和自減運(yùn)算符的使用非常靈活,是c語(yǔ)言的特色之一,但在使用過(guò)程中也比較容易出錯(cuò)?,F(xiàn)就這兩

3、種運(yùn)算符在dev c+環(huán)境中的使用做一個(gè)詳細(xì)的分析。1 自加/自減運(yùn)算符的使用方法及運(yùn)算對(duì)象自加自減運(yùn)算符是c語(yǔ)言特有的單目運(yùn)算符,只能和一個(gè)變量組成表達(dá)式,有前綴和后綴兩種形式。前綴形式為:+操作數(shù)/- -操作數(shù),后綴形式為操作數(shù)+/操作數(shù)- -。自加運(yùn)算符可以使操作數(shù)的值增加1個(gè)單位,自減運(yùn)算符可以使操作數(shù)的值減少1個(gè)單位。操作數(shù)只能是變量,不允許使用常量和表達(dá)式。比如i和j都是整型變量,使用i+,j+都是合法的,如果對(duì)常量3使用自加運(yùn)算符即3+,則會(huì)使常量3的值增加1,這和常量在程序運(yùn)行期間值不發(fā)生改變的定義相違背;而對(duì)表達(dá)式(i+2)使用自加運(yùn)算符(i+2)+,則會(huì)使表達(dá)式(i+2)的

4、值增加1,但是減少以后的值沒(méi)有變量可以存儲(chǔ),因此這兩種使用方法都不合法。2 自加/自減運(yùn)算符單獨(dú)使用與在復(fù)合表達(dá)式中使用的區(qū)別2.1 自加/自減運(yùn)算符單獨(dú)使用以自加運(yùn)算為例,使用整型變量i作為操作數(shù),在運(yùn)算符單獨(dú)使用的情況下,有i+;和+i;兩種形式,不論是用前綴表示還是后綴表示,都可以使i的值增加1,當(dāng)然也可以使用賦值語(yǔ)句i=i+1;實(shí)現(xiàn)。但是,對(duì)于多數(shù)c的編譯程序,利用自加/自減運(yùn)算使變量增加/減少1和使用賦值語(yǔ)句相比,生成代碼的運(yùn)行速度會(huì)快很多,目標(biāo)代碼的效率更高一些。因此從效率上分析,前兩種形式的效率更高。2.2 自加/自減運(yùn)算符在復(fù)合表達(dá)式中使用同樣以自加運(yùn)算為例,使用整型變量i作為

5、操作數(shù),分析運(yùn)算符在復(fù)合表達(dá)式中的使用情況。(1)i=3;y=i+;printf(“i=%d,y=%d”,i,j);(2)i=3;y= + i;printf(“i=%d,y=%d”,i,j);在第一個(gè)程序段中,運(yùn)行結(jié)果為i=4,y=3。說(shuō)明在y=i+語(yǔ)句中,i先將增加前的值賦給y,在當(dāng)前表達(dá)式計(jì)算完成之后才自己增加1,所以輸出結(jié)果時(shí),i的值是4,而y的值為3。在第二個(gè)程序段中,運(yùn)行結(jié)果為i=4,y=4。在y= + i語(yǔ)句中,i的值先增加1,再把增加后的值參與本表達(dá)式的運(yùn)算,賦給y,所以i,y的值都為4。通過(guò)以上兩個(gè)程序段的分析,我們發(fā)現(xiàn),當(dāng)使用后綴表示時(shí),變量i會(huì)先將自己的值賦給y,再對(duì)自己加

6、1,而使用前綴表示時(shí),變量i先自己增加1,再將增加后的值賦給y。可以將這兩種情況總結(jié)為“變量在前就先使用,變量在后就先加”。3 自加/自減運(yùn)算符的優(yōu)先級(jí)和結(jié)合方向c語(yǔ)言規(guī)定,在表達(dá)式求值時(shí),先看運(yùn)算符的優(yōu)先級(jí),優(yōu)先級(jí)高的先運(yùn)算,對(duì)于同一優(yōu)先級(jí)的運(yùn)算符,則按照結(jié)合方向確定運(yùn)算次序。自加/自減運(yùn)算符是單目運(yùn)算符,優(yōu)先級(jí)僅次于括號(hào)等運(yùn)算符,結(jié)合方向?yàn)樽杂蚁蜃?。也就是說(shuō)在出現(xiàn)多個(gè)同等級(jí)的運(yùn)算符時(shí),需要按照自右向左的方向運(yùn)算。比如表達(dá)式y(tǒng)=-i+,按照優(yōu)先級(jí)分析,-和+運(yùn)算符的優(yōu)先級(jí)相同,賦值運(yùn)算符優(yōu)先級(jí)最低,因此先進(jìn)行-和+運(yùn)算,又因?yàn)樗麄兊慕Y(jié)合方向都是自右向左,因此變量i應(yīng)該先進(jìn)行自加運(yùn)算再進(jìn)行負(fù)號(hào)

7、運(yùn)算。這樣該表達(dá)式就等價(jià)于y=-(i+),如果i的初值為3,則y的值就為-3。注意,這里使用的是后綴表示,所以應(yīng)該先使用i的值再自加,所以y的值不是-4。在另外一個(gè)表達(dá)式y(tǒng)=i+j中,如果i的初值為3,j的初值為2,該表達(dá)式是按照y=(i+)+j計(jì)算,還是按照y=i+(+j)計(jì)算呢?如果單純從優(yōu)先級(jí)和結(jié)合方向考慮,自加運(yùn)算符的優(yōu)先級(jí)會(huì)高于加法運(yùn)算符,應(yīng)該先進(jìn)行自加運(yùn)算,但是自加的對(duì)象就沒(méi)辦法確定了。實(shí)際上,dev c+編譯器會(huì)從左向右依次掃描表達(dá)式,盡可能多地把多個(gè)符號(hào)組合成一個(gè)運(yùn)算符,因此在掃描三個(gè)加號(hào)時(shí),會(huì)從左到右把前兩個(gè)加號(hào)看做自加運(yùn)算符,因此該表達(dá)式按照y=(i+)+j計(jì)算,由于自加運(yùn)

8、算符是后綴形式,所以先取i的值計(jì)算再自加,最后計(jì)算結(jié)果為i=4,j=2,y=5。4 在一個(gè)表達(dá)式中出現(xiàn)多個(gè)自加/自減運(yùn)算符的復(fù)雜情況如果在一個(gè)表達(dá)式中出現(xiàn)了多個(gè)自加/自減運(yùn)算符,則表達(dá)式的計(jì)算就會(huì)變得很復(fù)雜,還有可能出現(xiàn)計(jì)算結(jié)果和編譯器相關(guān)的情況。本文中的程序段,均在dev c+編譯環(huán)境下運(yùn)行。比如設(shè)變量初值為:int i=3;則有如下程序段:(1) k=(+i)+i+i; printf(“i=%d,k=%d”,i,k); (2) k=+i+(+i)+i; printf(“i=%d,k=%d”,i,k);(3) k=(+i)+i+ (+i); printf(“i=%d,k=%d”,i,k);(

9、4) k=(+i)+(+i)+(+i); printf(“i=%d,k=%d”,i,k);在第一個(gè)程序段中,由于dev c+編譯器會(huì)從左到右掃描表達(dá)式,并且合并盡可能多的字符作為一個(gè)運(yùn)算符,所以可以將表達(dá)式看做如下形式:k=(+i)+)+(i+)+i。首先進(jìn)行+i操作,則得到i的值為4,同時(shí)增加后的4值參與本表達(dá)式的運(yùn)算,再進(jìn)行后綴的自加運(yùn)算,則得到增加后的值為5,但是因?yàn)槭呛缶Y形式,所以參與運(yùn)算的依然是增加前的4,在后面的i+中,依然是使用增加前的值4參與運(yùn)算,但此時(shí)i的值已經(jīng)增加到了6,表達(dá)式中最后一個(gè)i的值,因?yàn)楸颈磉_(dá)式還沒(méi)有計(jì)算完成,因此依然取增加前的4值,所以最后k的值應(yīng)該等于12,

10、而i的值為6。在第二個(gè)程序段中,依照上面的原則,可以將表達(dá)式看做如下形式:k=+i+(+i)+)+i首先進(jìn)行第一個(gè)+i操作,得到i的值為4,再進(jìn)行第二個(gè)+i操作,得到i的值為5,繼續(xù)進(jìn)行后綴的自加操作,在本表達(dá)式中參與運(yùn)算的值就是5,在表達(dá)式計(jì)算結(jié)束以后,i的值才修改為6。在進(jìn)行兩個(gè)結(jié)果相加的時(shí)候,第一個(gè)i的值已經(jīng)被后面的i修改為5 ,所以得到兩個(gè)加數(shù)的和為10,最后一個(gè)i的取值也是前面得到的5。因此,本表達(dá)式的計(jì)算結(jié)果為k=15,i=6。在第三個(gè)程序段中,表達(dá)式可以看作為k=(+i)+)+i+(+i)。首先計(jì)算(+i),并且用自加后的4參與后綴的自加運(yùn)算,所以在表達(dá)式計(jì)算結(jié)束時(shí)才自加,這樣就

11、得到了兩個(gè)4相加的結(jié)果8,最后計(jì)算(+i),由于上一個(gè)后綴的自加運(yùn)算,加1的結(jié)果要在表達(dá)式計(jì)算結(jié)束后才進(jìn)行,所以這里的i值還是4,用4作為前綴自加的值,則(+i)的結(jié)果就為5,用前面的中間結(jié)果8和5相加,就得到了k=13的結(jié)果,而在表達(dá)式計(jì)算結(jié)束以后,進(jìn)行了最后一次自加操作,i的值變成6。在第四個(gè)表達(dá)式中,參照第二個(gè)表達(dá)式的計(jì)算過(guò)程,先進(jìn)行兩個(gè),得到兩個(gè)5相加,再進(jìn)行第三個(gè)(+i)操作,此時(shí)i的值變?yōu)?,參與本表達(dá)式運(yùn)算的值也為6,所以最后的計(jì)算結(jié)果為k=16,i=6。從以上四個(gè)表達(dá)式的計(jì)算過(guò)程可以發(fā)現(xiàn),在于dev c+環(huán)境下,一個(gè)表達(dá)式中出現(xiàn)多個(gè)自加/自減運(yùn)算符的時(shí)候,同一個(gè)表達(dá)式,由于括號(hào)的位置不同,或者操作數(shù)的位置不同,會(huì)引起計(jì)算結(jié)果的變化。c語(yǔ)言允許用戶(hù)在一條語(yǔ)句使用含多個(gè)賦值和自增/自減運(yùn)算符,這很大程度上給設(shè)計(jì)者提供了自由度,但是會(huì)給程序的通用性和易讀性帶來(lái)影響。在本文中,以dev c+作為運(yùn)行環(huán)境,編譯器是從左至右掃描表達(dá)式的,但是在其他編譯器中可能會(huì)出現(xiàn)從右至左掃描的情況,那么同一個(gè)程序的運(yùn)行結(jié)果就不同了。在這種情況下,我們應(yīng)該盡可能避免此類(lèi)情況的出現(xiàn),在一條語(yǔ)句中至多使用一個(gè)自增/自減運(yùn)算符,并且使用括號(hào)將它們和其他運(yùn)算符分隔,以免使得

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論