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

C語言中的自加自減運算

2013-12-31 00:00:00劉文君
都市家教·上半月 2013年11期

【摘 要】C語言中運算符十分豐富,自加運算和自減運算是c語言的教學中的重點和難點,但我們只要在教學中抓住運算的基本定義,通過經典題型分析和適度深入解析,就不難達到熟練應用之目的。

【關鍵詞】運算的定義;經典題型;深度解析

C語言作為一種計算機程序設計語言,它既具有高級語言的特點,又具有匯編語言的特征,編程功能十分強大。C語言定義了豐富的運算,多達40余種,這給c語言的學習帶來了一定的困難。++運算(自加運算)和--運算(自減運算)正是這些運算中極具特點而又非常重要的兩種運算,在教學中,歷來是教學的難點,而關于這方面的系統的講解資料又很難找到,本人在c語言教學中,對++和--運算就教學中碰到的問題,做了一些探索性的研究,現歸納總結,以期與同行共勉。

一、運算的定義

1. ++(自加運算)的定義

++(自加運算)是單目運算,且只能以變量為運算對象,如i++,++a等(i,a為已定義變量),它等效于i=i+1(a=a+1),但是,自加運算又有自己的特點——與其它運算的相關性,雖然對變量i來講,i++與++i沒有什么區別,但當i++和++i還參與其它運算時,i++和++i對整個運算結果的影響是不同的,例如有如下程序段:

int i=1 ,s ;

s=(i++)+1;

printf(“i=%d;s=%d\n”,i,s);

其運行結果是:i=2;s=2

若將程序中s=(i++)+1;換為s=(++i)+1;其它不變,其運行結果就會變為:i=2;s=3 ,此處我們可以看到: i++與++i的不同,并不影響i本身的結果,但卻對s的值產生了不同的影響,這是因為系統在處理++i時先對i進行了加1運算,即:i=i+1,然后才參與其它運算,而在執行i++時,現將i的值參與其它運算,然后才給自己加1,所以得到的s的值是不同的,這正是++(自加運算)與眾不同的地方。

2. --(自減運算)的定義

與自加運算類似,--(自減運算)也是單目運算,且只能以變量為運算對象,若i為已定義變量,i的自減運算分為--i和i-- ,兩者對i自身的作用是一樣的,即i=i-1 ,但當它們還參與其它運算時,--i先執行自減1運算,然后以i的值參與其它運算,i--則先以i值參與其它運算,然后對i進行自減1運算。

二、經典題型

下列程序執行后輸出結果是什么?

main()

{int a=100;

printf(“a++=%d;”,a++); */①/*

printf(“++a=%d;”,++a); */②/*

printf(“a--=%d;”,a--); */③/*

}

當程序執行到①時,輸出表達式a++,由于自加符++后置,故先輸出a的值100,然后a自加1,即執行完①后輸出“a++=100”,a的值是101。

當程序執行到②時,輸出表達式++a,由于自加符++前置,故a先自加1變為102,然后輸出a的值102,即執行完②后輸出“++a=102”,a的值是102。

當程序執行到③時,輸出表達式a--,由于自加符--后置,故先輸出a的值102,然后a自減1,即執行完③后輸出“a--=102”,a的值是101。

綜上所述,程序輸出結果為:

a++=100;++a=102;a--=102

小結:該題目只要深刻領會++(--)運算在運算符前置和后置時,對其參與的其它運算(操作)的處理時機是不同的,前置時先進行自加1(自減1)運算,再進行其它運算(操作),后置時先參與其它運算(操作),再進行自加1(自減1)運算。

三、深度解析

1. 分析下列程序執行后的輸出結果

#include

main( ){

int i =1,j=2, p=0,q=0 ;

printf(“%d,%d,%d,%d”, p+i , j++ , q+j ,-- i ); */⑤/*

}

很多同學分析:在程序執行到⑤時 p+i輸出1(0+1=1) ;j++輸出2(j=2),j=2+1=3 ;q+j輸出3(0+3=3);--i輸出0(1-1=0) 。得到的結果是:1 ,2 ,3 ,0 。然而上機運行的結果卻是:0 ,2 ,2 ,0 ,這是為什么呢?原來,turboC在printf()函數中,處理表達式列表的順序是從右到左進行的,如果在表達式列表中不包含自加(自減)運算,從哪邊開始處理數據都不會影響運算結果,但是,如果表達式列表中包含了自加(自減)運算,這個“處理數據的順序”就會影響到數據的運算結果。正確的做法是先處理—i,輸出0(1-1=0);其次是q+j,輸出2(0+2=2);再次是j++,輸出2(j=2,執行j++后j=3);最后是p+i,輸出0(0+0=0),處理完畢后按原來順序輸出結果:0,2,2,0 。

結論:turboC在printf(“字符串”,表達式列表)函數中,處理表達式列表的順序是從右到左進行的,如果在表達式列表中包含自加(自減)運算,運算起來就要十分細心。

2.分析如下程序輸出結果:

#include

main( ){

int i=5,j=5,p,q;

p=(i--)+( ++ i)+(i++); */ ⑥/*

q=(++j)+( j++); */ ⑦/*

printf(“%d,%d,%d,%d”,p,q,i,j);

}

嚴格的講,程序中⑥、⑦中的表達式是不符合C語言語法規范的。盡管如此,但在實際當中,我們仍會經常碰到類似的題目,而且這些題目在機器上運行也會有特定的結果,因此在這里我仍然想探討一下其解法。

筆者經過反復推敲,找到了一種解決這類問題的辦法,并在實際應用中與機器執行的結果符合的很好。

我的思路是:將⑥或⑦中右側表達式的運算分為3類:前置(自加或自減)運算、后置(自加或自減)運算和加(減)法運算,首先要進行的是前置運算,其次執行加(減)法運算,最后執行后置運算。如(i--)+( ++ i)+(i++),其中中間的自加運算為前置運算,其前后的自減運算和自加運算都是后置運算,首先進行前置運算,即++i,執行后i=5+1=6;然后執行加法運算,即3個i相加;結果為6+6+6=18,最后執行后置運算,即i=6+1-1=6 。所以題目中p=18,i=6。同理(++j)+( j++)中++j為前置運算,j++為后置運算,先進行前置運算j=5+1=6;然后執行加法運算,即2個j相加6+6=12;最后進行后置運算j=6+1=7 。所以題目中q=12,j=7,程序最后運行結果為:18,12,6,7 。以上方法可擴展到任何含有自加(自減)運算的運算表達式中。

四、結論

當一個表達式中含有多個自加(自減)運算時,可將運算分為前置運算、后置運算和其它運算,按照先執行前置運算,然后執行其它運算,最后執行后置運算的法則,可得到正確的運算結果。

對C語言的教學而言,能讓學生理解到以上的深度,我認為教學的任務就完成了,至于更深層次的研究就是他們以后的事了,希望本文能給廣大C語言教學工作者帶來便利!

參考文獻:

[1] Dennis M. Ritchie等. The C programming Language [M].U.S:Prentice Hall,1988

[2]周查金等. C語言程序設計.北京:高等教育出版社,2000.5

主站蜘蛛池模板: 亚洲最大福利视频网| 1024国产在线| 国产性猛交XXXX免费看| 国产午夜精品一区二区三区软件| 亚洲精品午夜无码电影网| 国产成人欧美| 欲色天天综合网| 成人免费黄色小视频| 欧美不卡二区| 成年人免费国产视频| 亚洲天堂网在线播放| 伊人婷婷色香五月综合缴缴情| 亚洲无线视频| 2020精品极品国产色在线观看| 亚洲高清中文字幕| 国产亚洲精品97AA片在线播放| 玖玖精品在线| 成年人视频一区二区| 国产成人亚洲欧美激情| 三级视频中文字幕| 欧美一级视频免费| 72种姿势欧美久久久大黄蕉| 毛片免费观看视频| 欧美色伊人| 久久77777| 伊人精品视频免费在线| 99久久精彩视频| 亚洲福利片无码最新在线播放| 天天摸天天操免费播放小视频| 黄片在线永久| 国产精品专区第1页| 一级毛片a女人刺激视频免费| 婷婷综合色| 中文字幕第4页| 亚洲欧洲一区二区三区| 久久无码av一区二区三区| 色视频国产| 另类重口100页在线播放| 狠狠色成人综合首页| 国产精品太粉嫩高中在线观看| 中文字幕av一区二区三区欲色| 色天天综合| 午夜福利网址| 国产真实二区一区在线亚洲| 婷婷久久综合九色综合88| 国产精品分类视频分类一区| 国产对白刺激真实精品91| 91视频区| www.91在线播放| 国产成人一区| 99尹人香蕉国产免费天天拍| 五月婷婷综合网| 波多野结衣二区| 97久久超碰极品视觉盛宴| 全部毛片免费看| 一级毛片视频免费| 啪啪啪亚洲无码| a天堂视频| 一本大道无码日韩精品影视| lhav亚洲精品| 欧美亚洲另类在线观看| 亚洲日韩精品欧美中文字幕| 538国产在线| 日本a∨在线观看| 亚洲日韩高清在线亚洲专区| 国产美女精品一区二区| 亚洲av日韩av制服丝袜| 国产91色在线| 大陆国产精品视频| 亚洲国产AV无码综合原创| 凹凸精品免费精品视频| 日韩中文精品亚洲第三区| 欧美国产视频| 美女扒开下面流白浆在线试听 | 亚洲欧美成人综合| 国产日韩精品欧美一区灰| 久久黄色毛片| 91美女在线| www成人国产在线观看网站| 不卡视频国产| 9啪在线视频| 精品国产免费观看|