999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

淺談C語言中的自增自減運(yùn)算

2013-12-31 00:00:00周嵐
學(xué)園 2013年12期

【摘 要】C語言的內(nèi)部運(yùn)算符很豐富,其中最難理解的是在使用過程中最易得到模棱兩可結(jié)果的自增自減運(yùn)算符,特別是遇到多個(gè)自增自減運(yùn)算符連續(xù)出現(xiàn)在表達(dá)式中的時(shí)候,結(jié)果更是讓人無法估測(cè)。本文結(jié)合詞法分析中的“貪心法”對(duì)這兩個(gè)運(yùn)算符的使用做了詳細(xì)說明。

【關(guān)鍵詞】貪心法 自增自減 詞法分析

【中圖分類號(hào)】G642 【文獻(xiàn)標(biāo)識(shí)碼】A 【文章編號(hào)】1674-4810(2013)12-0080-02

C語言在計(jì)算機(jī)軟件開發(fā)中的作用日益重要,它以獨(dú)特的魅力征服了很多編程工作者,已成為世界上廣泛流行的、最有發(fā)展前途的計(jì)算機(jī)高級(jí)語言。它適用于編寫各種系統(tǒng)軟件,也適用于編寫各種應(yīng)用軟件。針對(duì)C語言的教學(xué),筆者談?wù)剬?duì)自增自減運(yùn)算符的幾點(diǎn)看法。

一 自增和自減運(yùn)算符的作用和特點(diǎn)

自增運(yùn)算符(++)和自減運(yùn)算符(――)都是單目運(yùn)算符,它們的作用分別是使操作數(shù)加1和減1,換句話說:x=x+1;同++x,x=x-1;同――x,自增和自減運(yùn)算符可用在操作數(shù)之前(前綴形式),也可放在操作數(shù)之后(后綴形式)。例如:“x=x+1;”可寫成“++x;”或“x++;”,“x=x-1;”可寫成“――x;”或“x――;”,但是表達(dá)式中這兩種用法是有區(qū)別的,首先自增運(yùn)算符和自減運(yùn)算符在操作數(shù)之前(前綴形式)“++x,――x”:先使變量x的值加1或減1,再使用變量x的值。其次自增運(yùn)算符或自減運(yùn)算符在操作數(shù)之后(后綴形式)“x++,x――”:先使用變量x的值,再使變量x的值加1或減1。

在教學(xué)中我們應(yīng)該注意以下幾點(diǎn):(1)使運(yùn)算對(duì)象的值在原來的基礎(chǔ)上加1或減1是自增運(yùn)算符和自減運(yùn)算符的特點(diǎn)。所以自增或自減運(yùn)算其實(shí)和賦值表達(dá)式的功能是一樣的。(2)運(yùn)算符兩邊的運(yùn)算對(duì)象的數(shù)據(jù)類型可以是整型的,也可以是實(shí)型的,但不能是常量或表達(dá)式。所以++5、(a+b)--等都是不合法的。(3)表達(dá)式若是由自增或自減運(yùn)算符構(gòu)成的,它的運(yùn)算符就可以出現(xiàn)在運(yùn)算對(duì)象的前面,也可以出現(xiàn)在運(yùn)算對(duì)象后面,也就是前綴和后綴形式都可以,對(duì)于運(yùn)算對(duì)象而言,結(jié)果是一樣的,但從表達(dá)式的角度看,結(jié)果就是不一樣的。(4)從優(yōu)先級(jí)上來看,運(yùn)算符“++”和“--”的結(jié)合方向是“從右到左”。假設(shè)有一表達(dá)式-a++,其中a的初始值為1,因?yàn)樵谶\(yùn)算符中,就相當(dāng)于-(a++)運(yùn)算,結(jié)果為-1,然后a自增為2。

二 自增和自減運(yùn)算符的結(jié)合性

自增和自減運(yùn)算符都是“從右到左”的結(jié)合方向,如果說a=3,那么計(jì)算:-a++,實(shí)際上就相當(dāng)于計(jì)算-(a++)這個(gè)表達(dá)式,這時(shí)自增運(yùn)算符“++”為后綴形式,(a++)的值為3,而-(a++)的值為-3,然后a的值自增為4。像這種簡(jiǎn)單的自增自減運(yùn)算,我們按運(yùn)算符的優(yōu)先級(jí)和結(jié)合性處理還是比較容易解決的。若是遇到多個(gè)自增自減運(yùn)算符連續(xù)出現(xiàn)在表達(dá)式中的時(shí)候,結(jié)果就可能模棱兩可,有時(shí)更是讓人無法估測(cè)。下面讓我們來看一個(gè)復(fù)雜一些的例子:

例1:a+++++b的含義是什么?

我們?yōu)榱蓑?yàn)證它的含義,編寫了一個(gè)小程序:

int main()

{

int a = 0;

int b = 0;

int c = 0;

c = a+++++b;

printf (\" a+++++b The result is %d\",c);

return 0;

}

左值就是可以在“=”左邊,能被賦予值的東西;右值則是在“=”右邊,可以賦值給別人的東西。所以左值必須是有內(nèi)存空間的東西;而右值則既可以是變量,也可以是常量和某種表達(dá)式,只要能提供一個(gè)值即可。但這個(gè)程序是不能通過編譯的,也就是說,盡管我們可以正確地理解這個(gè)表達(dá)式,但在編譯過程中會(huì)產(chǎn)生錯(cuò)誤。為什么a+++++b會(huì)編譯錯(cuò)誤呢?

第一,編譯器在讀入此語言時(shí),遇到連續(xù)多個(gè)+,如+++++,自動(dòng)識(shí)別位((++)++)+,即會(huì)++比+更優(yōu)先識(shí)別。

第二,++運(yùn)算需要左值的。a+++++b等價(jià)于((a++)++)+b。a++沒問題,但問題就在于a++卻不能作為左值,即不能被賦予值,因?yàn)閍++是先返回a的值進(jìn)行運(yùn)算,然后再對(duì)a的引用加1。然而a的值(value-a)是不能作為左值的。所示((a++)++)錯(cuò)誤。++a為什么可以作為左值呢?原因在于++a是對(duì)a的引用加1,然后返回a的引用。a的引用當(dāng)然可以作為左值,被賦值了。

C語言中的某些符號(hào),例如:/、*和=,只有一個(gè)字符長(zhǎng),稱為單字符符號(hào)。而C語言的其他符號(hào),例如:+=和==,以及標(biāo)識(shí)符,包括了多個(gè)字符,稱為多字符符號(hào)。當(dāng)C編譯器讀入一個(gè)字符/后又跟了一個(gè)字符*,那么編譯器就必須做出判斷:是將其作為兩個(gè)分別的符號(hào)對(duì)待,還是合起來作為一個(gè)符號(hào)對(duì)待。C語言對(duì)這個(gè)問題的解決方案可以歸納為一個(gè)很簡(jiǎn)單的規(guī)則:每一個(gè)符號(hào)應(yīng)該包含盡可能多的字符。也就是說,編譯器將程序分解成符號(hào)的方法是,從左到右一個(gè)字符一個(gè)字符地讀入,如果該字符可以組成一個(gè)符號(hào),那么再讀入下一個(gè)字符,判斷已經(jīng)讀入的兩個(gè)字符組成的字符串是否可能是一個(gè)符號(hào)的組成部分;如果可能,繼續(xù)讀入下一個(gè)字符。重復(fù)上面的判斷,直到讀入的字符組成的字符串已不再可能組成一個(gè)有意義的符號(hào)。這個(gè)處理策略就被稱為“貪心法”或者“大嘴法”。對(duì)這種方法更專業(yè)的描述是:“如果(編譯器的)輸入流截止某個(gè)字符之前都已經(jīng)分解為一個(gè)個(gè)符號(hào),那么下一個(gè)符號(hào)將包括從該字符之后可能組成一個(gè)符號(hào)的最長(zhǎng)字符串。”

需要注意的是,除了字符串與字符常量外,符號(hào)的中間不能有空白,比如,空格符、制表符、換行符。

C語言編譯器就是用貪心算法對(duì)它進(jìn)行分解的,按照貪心算法分解a+++++b為:((a++)++)+b,因?yàn)閍++的結(jié)果為左值,而左值不能再進(jìn)行運(yùn)算,故a+++++b編譯不能通過,除非寫成a+++ ++b,在++b前面有個(gè)空格,這時(shí)候根據(jù)貪心算法分解為:(a++)+(++b),這么處理,編譯就可以通過了。

剛接觸C語言的人,往往會(huì)被C語言靈活的運(yùn)算符搞得暈頭轉(zhuǎn)向,特別是處理自增自減運(yùn)算的時(shí)候,甚至程序?yàn)楹螘?huì)得出結(jié)果都不理解,所以,多分析、多練習(xí)是關(guān)鍵。對(duì)于自增和自減運(yùn)算符來說,主要掌握運(yùn)算符的特點(diǎn),如它的結(jié)合性、優(yōu)先級(jí),當(dāng)然對(duì)C語言的編譯過程中的詞法分析也應(yīng)有一定的了解,只要把握相關(guān)的規(guī)則,不管多復(fù)雜的問題也能解決。

〔責(zé)任編輯:龐遠(yuǎn)燕〕

主站蜘蛛池模板: 黄色一级视频欧美| 青青草原国产免费av观看| 日本免费高清一区| 成人噜噜噜视频在线观看| 中文字幕在线观看日本| 国产精品无码影视久久久久久久| 国产高清色视频免费看的网址| 国产91视频免费观看| 激情综合五月网| 国产91精品最新在线播放| 国产综合无码一区二区色蜜蜜| 日韩AV无码一区| 国产精品一区二区不卡的视频 | 最新日韩AV网址在线观看| 67194成是人免费无码| 欧美高清视频一区二区三区| 国产99在线观看| 日韩麻豆小视频| 国产精品无码一二三视频| 日本人妻一区二区三区不卡影院| 亚洲中文字幕在线精品一区| 国产精品香蕉在线观看不卡| 日本三级欧美三级| 久久国产拍爱| 1769国产精品视频免费观看| 内射人妻无套中出无码| 99草精品视频| 91视频青青草| 69精品在线观看| 1024你懂的国产精品| 国产成人AV男人的天堂| 国产乱人伦偷精品视频AAA| 国产成人在线无码免费视频| 亚洲三级色| 亚洲欧美日本国产综合在线| 狠狠v日韩v欧美v| 亚洲一区免费看| 免费国产好深啊好涨好硬视频| 亚洲综合色在线| 国产女人在线视频| 欧美亚洲中文精品三区| 国产精品欧美日本韩免费一区二区三区不卡 | 国产精品亚欧美一区二区| 午夜三级在线| 色偷偷综合网| 国产小视频网站| 国产精品亚洲日韩AⅤ在线观看| 内射人妻无码色AV天堂| 91在线免费公开视频| 色亚洲成人| 国产高清无码第一十页在线观看| 国产精品毛片在线直播完整版| 色婷婷天天综合在线| 国产精品太粉嫩高中在线观看| 婷婷五月在线视频| 白浆免费视频国产精品视频| 日韩精品无码免费一区二区三区| 国产污视频在线观看| 亚洲,国产,日韩,综合一区 | 91在线播放国产| 欧美一级视频免费| 久久婷婷色综合老司机| 久久频这里精品99香蕉久网址| 97亚洲色综久久精品| 一级毛片高清| 激情综合网激情综合| 色综合中文综合网| 九色91在线视频| 老色鬼久久亚洲AV综合| 99无码中文字幕视频| 亚洲综合在线网| 亚洲精品午夜无码电影网| 无码专区在线观看| 欧美日韩一区二区在线播放| 久久精品亚洲热综合一区二区| 国模在线视频一区二区三区| 国产自在线播放| 无码人中文字幕| 在线色综合| 亚洲色图欧美在线| 免费av一区二区三区在线| 亚瑟天堂久久一区二区影院|