c蘇州大學(xué)出版社第二章數(shù)據(jù)類型、運(yùn)算符和表達(dá)式.ppt
第二章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式,授課:東南大學(xué)鄭雪清E_mail:snow6789,VC+語言程序設(shè)計(jì),第2章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式,學(xué)習(xí)內(nèi)容和基本操作:VC的數(shù)據(jù)類型基本運(yùn)算符表達(dá)式語句、空語句及自增、自減運(yùn)算符考試大綱要求:常量表示法;各種類型的變量說明及其初始化;運(yùn)算符和表達(dá)式。,重點(diǎn)與難點(diǎn):數(shù)據(jù)類型運(yùn)算符表達(dá)式時(shí)間和安排:,2.1VC+的數(shù)據(jù)類型一個(gè)程序應(yīng)包括兩個(gè)方面的內(nèi)容:數(shù)據(jù)的描述。操作步驟,即動(dòng)作的描述。數(shù)據(jù)是操作的對(duì)象,操作結(jié)果會(huì)改變數(shù)據(jù)的狀況。程序設(shè)計(jì)必須認(rèn)真考慮和設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)和操作步驟(即算法)。著名計(jì)算機(jī)科學(xué)家沃思(NiklklausWirth)提出一個(gè)公式:數(shù)據(jù)結(jié)構(gòu)十算法=程序,程序算法十?dāng)?shù)據(jù)結(jié)構(gòu)十程序設(shè)計(jì)方法十語言工具和環(huán)境程序中的四個(gè)方面是程序設(shè)計(jì)人員所應(yīng)具備的知識(shí)。在本書中不可能全面介紹這些內(nèi)容,它們都屬于有關(guān)的專門課程范疇。本書主要介紹VC+語言本身。VC+語言提供的數(shù)據(jù)結(jié)構(gòu)是以數(shù)據(jù)類型形式出現(xiàn)的,VC+的數(shù)據(jù)類型如下:,本節(jié)介紹組成C程序的基本單位(C詞法記號(hào):關(guān)鍵字、標(biāo)識(shí)符、標(biāo)點(diǎn)符號(hào)分隔符,運(yùn)算符,空白符及基本數(shù)據(jù)類型)。,字符型整型基本數(shù)據(jù)類型實(shí)型(單精度)實(shí)型(雙精度)無值型數(shù)據(jù)類型數(shù)組類型指針類型導(dǎo)出數(shù)據(jù)類型結(jié)構(gòu)體類型共用體類型枚舉類型類,2.1.1關(guān)鍵字(保留字)C系統(tǒng)預(yù)定義的、由小寫英文字母組成的單詞、詞頭或詞組。在C語言中,已有特殊含義和用途。在程序中不得將它們另作它用。預(yù)處理命令中,雖不算C關(guān)鍵字,但最好把它們看作為C的關(guān)鍵字,不要使用它們作為其他用途,如(include、define等)。VC的關(guān)鍵字:P1011:表21(43)和20個(gè)雙下劃線新關(guān)鍵字。,2.1.2標(biāo)識(shí)符以字母或下劃線開始的字母、數(shù)字以及下劃線組成的字符序列稱為標(biāo)識(shí)符。標(biāo)識(shí)符的第一個(gè)字符必須是字母或下劃線。以大寫字母、小寫字母或下劃線(_)開始。可以由大小寫字母、下劃線(_)或數(shù)字0-9組成。大寫字母和小寫字母代表不同的標(biāo)識(shí)符。不能是C+關(guān)鍵字。例如:Rectangle,Draw_line,_No1都是合法的標(biāo)識(shí)符,,不合法的標(biāo)識(shí)符:No.1,a3.5/不能使用小數(shù)點(diǎn)。this/這是關(guān)鍵字,不能用作標(biāo)識(shí)符$ab/不能使用符號(hào)$6ab/不能以數(shù)字開頭說明:標(biāo)識(shí)符的有效長度:1-247個(gè)字符標(biāo)識(shí)符的命名方法:,2.1.3標(biāo)點(diǎn)符號(hào)9個(gè):#、(、)、,、:、;、2.1.4分隔符運(yùn)算符、空格、標(biāo)點(diǎn)符號(hào)、回車鍵和Tab鍵,用得最多的是空格鍵。,布爾常量(邏輯常量bool)只有兩個(gè):false(假或0)和true(真或1)字符型(char)可以有signed,unsigned整型(int)可以有short,long,signed,unsigned實(shí)型(float)雙精度型(double)可以有l(wèi)ong,基本數(shù)據(jù)類型:,2.1.5C+的基本數(shù)據(jù)類型字符型(char)占用1個(gè)字節(jié)數(shù);取值范圍:char128127、signedchar128127、unsignedchar0255;在VC中無修飾詞的char,編譯程序認(rèn)為是有符號(hào)的;char型從本質(zhì)上說也是整數(shù)類型,長度為1個(gè)字節(jié),通常用來存放字符的ASCII碼。,整型(int)短整型(shortint):占用2個(gè)字節(jié)數(shù);取值范圍:shortint、3276832767signedshortint、3276832767unsignedshortint;065535。,整型(int):占用4個(gè)字節(jié)數(shù);取值范圍:Int231(2311)signedint231(2311)unsignedint0(2321)長整型(longint)占用4個(gè)字節(jié)數(shù);取值范圍:longInt231(2311)signedlongint231(2311)unsignedlongint0(2321),注意:用signed、unsigned、long、short來修飾int時(shí),關(guān)鍵詞int可以省略,在VC中無修飾詞的int和char,編譯程序認(rèn)為是有符號(hào)的。二進(jìn)制形式存儲(chǔ)中,其最高位為符號(hào)位,“1”表示負(fù);“0”表示正。,實(shí)型(float)占用4個(gè)字節(jié)數(shù);取值范圍:3.410383.41038;無修飾詞。雙精度型(double)占用8個(gè)字節(jié)數(shù);取值范圍:double1.7103081.710308longdouble1.7103081.710308。,無值型(void)占用字節(jié)數(shù)為:0;取值范圍為:無值。例:類型修飾符unsigned修飾類型是錯(cuò)誤的A.charB.intC.longintD.float答:D,2.1.6常量字面常量在程序中不要任何說明就可直接使用的常量。整型常量十進(jìn)制整數(shù):若干個(gè)09的數(shù)字;八進(jìn)制整數(shù):0(數(shù)字0開頭)若干個(gè)07的數(shù)字;十六進(jìn)制整數(shù):0 x若干個(gè)09的數(shù)字及AF的字母(大小寫均可);長整型與無符號(hào)整型常數(shù):以后綴字母L(或l)表示長整型數(shù);以后綴字母U(或u)表示無符號(hào)整型數(shù);后綴字母L和U同時(shí)組合(大小寫無關(guān)、順序無關(guān))表示無符號(hào)長整型數(shù);沒有后綴字母時(shí),編譯系統(tǒng)根據(jù)常數(shù)的大小自動(dòng)進(jìn)行識(shí)別。,例:下列十六進(jìn)制的整型常數(shù)表示中,是錯(cuò)誤的A.0 xafB.0 x1bC.2fxD.0 xae答:C實(shí)型常量一般形式(定點(diǎn)表示):它由一個(gè)符號(hào)(正號(hào)可以省略)后接若干個(gè)十進(jìn)制數(shù)字09和一個(gè)小數(shù)點(diǎn)組成。,指數(shù)形式(浮點(diǎn)表示,科學(xué)表示法):它由一個(gè)十進(jìn)制整數(shù)或定點(diǎn)數(shù)后接一個(gè)字母e(大、小寫均可)和一個(gè)13位的十進(jìn)制整數(shù)所組成,字母e之前的部分稱為該浮點(diǎn)數(shù)的尾數(shù),之后的部分稱為該浮點(diǎn)數(shù)的指數(shù),該浮點(diǎn)數(shù)的值就是它的尾數(shù)乘以10的指數(shù)冪。注意:在字母e之前必須有數(shù)字。例:下列double型常量表示中,是錯(cuò)誤的A.E15B.35C.3E5D.3E-5答:A,字符型常量一般形式:用單引號(hào)括起來的單個(gè)字符。轉(zhuǎn)義序列:就是以轉(zhuǎn)義符“”開始,后跟一個(gè)字符或一個(gè)整型常量(字符的ASCII編碼值)的辦法來表示一個(gè)字符。詳見:P15,表25,段中的描述;P401,附錄AASCII碼表注意:單引號(hào)、反斜杠必須使用其它方法表示,雙引號(hào)括起來的字符不是字符型常量,例1.在C語言中,合法的字符型常量是_A.tB."A"C.65D.A答案:A例2.在C語言中,合法的字符型常量是_A.84B.x43C.abD."0"答案:B(假設(shè)A的答案是74會(huì)怎樣?),“轉(zhuǎn)義字符”,意思是將反斜杠()后面的字符轉(zhuǎn)變成另外的意義。如n中的“n”不代表字母n而作為“換行”符。例#includevoidmain()cout<<"abct"<<"gden"cout<<"ht"<<"jkn"程序的運(yùn)行結(jié)果:abcgdehjk,例3.在c+語言中,char型數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式是_A.ASCII碼B.補(bǔ)碼C.反碼D.原碼(4)字符串常量:用雙引號(hào)括起來的若干個(gè)字符。存放形式是:按串中字符的排列次序順序存放,每個(gè)字符占一個(gè)字節(jié),并在末尾添加0作為結(jié)束標(biāo)記。區(qū)別a和“a”。(5)布爾常量(邏輯常量)只有兩個(gè):false(假)和true(真),2.標(biāo)識(shí)符常量例/*example*/#include#definePI3.1415926/使用編譯預(yù)處理指令constfloatPII=3.1415926/使用C+常量說明符voidmain()floats,r,i;r=10.;i=2.*PI*r;s=PII*r*r;cout<<"i="<<i<<n;cout<<"s="<<s<<n;,程序中用#define命令行定義PI代表常量3.1415926,此后凡在此文件中出現(xiàn)的PI都代表3.1415926,可以和常量一樣進(jìn)行運(yùn)算.這種用一個(gè)標(biāo)識(shí)符代表一個(gè)常量的,稱為標(biāo)識(shí)符常量,即標(biāo)識(shí)符形式的常量,注意標(biāo)識(shí)符常量不同于變量,它的值不能改變,也不能再被賦值。如再被賦值語句賦值是錯(cuò)誤的。習(xí)慣上,標(biāo)識(shí)符常量名用大寫,變量用小寫,以示區(qū)別。標(biāo)識(shí)符常量必須先定義后使用.,2.1.7變量(P16)其值可以改變的量稱為變量。一個(gè)變量應(yīng)該有一個(gè)名字,在內(nèi)存中占據(jù)一定的存儲(chǔ)單元。在該存儲(chǔ)單元中存放變量的值。請(qǐng)注意區(qū)分變量名和變量值這兩個(gè)不同的概念。注意,大寫字母和小寫字母被認(rèn)為是兩個(gè)不同的字符。因此,和是兩個(gè)不同的變量名。習(xí)慣上,變量名用小寫字母表示,以增加可讀性。,在給變量名和其它標(biāo)識(shí)符命名時(shí),應(yīng)注意做到“見名知意”。有兩種種命名方法:標(biāo)準(zhǔn)命名法和英文單詞或漢語拼音法。在V+中,要求對(duì)所有用到的變量作強(qiáng)制定義,也就是“先定義,后使用”,否則,在編譯時(shí)會(huì)指出有關(guān)“出錯(cuò)信息”。在VC+中,已有特殊含義和用途的英文單詞稱為關(guān)鍵字(也稱保留字)(見P10.表2-1、表2-2),關(guān)鍵字不能作為變量名或標(biāo)識(shí)符使用。,(1)變量說明語句,.,;分別為:Char、short、int、long、float、double例如:charc0,c1;inti,j;longlen;floateps,f0,f15;doubleweight;,(2)變量初始化變量初始化就是給變量賦初值;有兩種形式:先定義,再賦初值例如:intsum,fac;sum=0;fac=1;定義時(shí)賦值例如:charc=A;intcount=0注意:inta=3;inta(3);是等價(jià)的。常量和變量是計(jì)算機(jī)語言中數(shù)據(jù)的兩種基本形式,初始化不是在編譯階段完成的(只有在第六章中介紹的靜態(tài)存儲(chǔ)變量和外部變量的初始化是在編譯階段完成的),而是在程序運(yùn)行時(shí)執(zhí)行本函數(shù)時(shí)賦以初值的。相當(dāng)于有一個(gè)賦值語句,例如inta=3;相當(dāng)于:inta;/指定a為整型變量a=3;/賦值語句,將3賦予a又如inta,b,c=5;相當(dāng)于:inta,b,c;/指定a、b、c為整型變量c5;/將5賦給c,例子字符型數(shù)據(jù)(一),字符常量單引號(hào)括起來的一個(gè)字符,如:a,D,?,$字符變量用來存放字符常量例:charc1,c2;c1=a;c2=A;字符數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式以ASCII碼存儲(chǔ),占1字節(jié),用7個(gè)二進(jìn)制位,Page32,字符數(shù)據(jù)的使用方法字符數(shù)據(jù)和整型數(shù)據(jù)之間可以運(yùn)算。字符數(shù)據(jù)與整型數(shù)據(jù)可以互相賦值。字符串常量例:"CHINA""a"a所以:charc;c="a",Page33,例子字符型數(shù)據(jù)(二),例子布爾型數(shù)據(jù),布爾型變量的說明:例:boolflag;布爾型數(shù)據(jù)的取值:只有false和true兩個(gè)值,例子變量初始化,例:inta=3;doublef=3.56;charc=a;intc(5);,Page35,程序例子常量與變量,#includeusingnamespacestd;intmain(void)constintPRICE=30;intnum,total;floatv,r,h;num=10;total=num*PRICE;cout<<total<<endl;r=2.5;h=3.2;v=3.14159*r*r*h;cout<<v<=!=)3邏輯運(yùn)算符(!|)4位運(yùn)算符(>inti;i=(int)x;cout<<"x"<<x<<n;cout<<"i"<<i<=,=,!+。關(guān)系運(yùn)算符用來比較兩個(gè)操作數(shù)的數(shù)值大小,其運(yùn)行結(jié)果為一整數(shù),關(guān)系成立時(shí)(為真時(shí)),結(jié)果為整數(shù)1,否則為0(為假時(shí))。例如:floata=2.5,b=10.7,x;inti;x=20.5;i=a<=x<=b;結(jié)果i為1。六個(gè)關(guān)系運(yùn)算符的優(yōu)先級(jí)是不一樣的,前四個(gè)高于后兩個(gè)。關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符,但高于賦值運(yùn)算符。由于對(duì)實(shí)數(shù)進(jìn)行運(yùn)算時(shí),計(jì)算機(jī)會(huì)產(chǎn)生誤差,因此,在判斷兩個(gè)實(shí)數(shù)是否相等時(shí),不應(yīng)直接用“=”進(jìn)行比較,應(yīng)為:fabs(x-y)<=1e-6fabs()是C+的一個(gè)庫函數(shù)。,四、邏輯運(yùn)算符和邏輯表達(dá)式在C+中,邏輯運(yùn)算符有三種:!(邏輯非),則:!x為1,!y為0。,(2)邏輯與僅當(dāng)兩個(gè)操作數(shù)的值都為非0時(shí),其與運(yùn)算的結(jié)果才為真(值為1);否則為假(值為0)。如:對(duì)于上述的x和y,xunsignedshortinti,j;intx,y;a=376;b=176;i=a;x=a;j=b;y=b;cout<<"a="<<a<<t<<"b="<<b<<n;cout<<"i="<<i<<t<<"j="<<j<<n;cout<<"x="<<x<<t<<"y="<<y<<n;,(4)將unsignedint型數(shù)據(jù)賦給longint,不存在擴(kuò)展問題,只需將高位補(bǔ)即可。將一個(gè)unsignedint型數(shù)據(jù)賦給一個(gè)占字節(jié)數(shù)相同的整型變量(例如unsignedintint,unsignedlonglong,unsignedshortshort)將unsigned型變量的內(nèi)容原樣送到非unsigned型變量中,但如果數(shù)據(jù)范圍超過相應(yīng)整型的范圍,則會(huì)出現(xiàn)數(shù)據(jù)錯(cuò)誤。如:unsignedinta=65535(216-1);intb;b=a;,unsigneda1111111111111111intb1111111111111111將a整個(gè)送到b中,由于b是int型,第1位是符號(hào)位,成了負(fù)數(shù)。(-1的補(bǔ)碼).可以用cout<<"b=”<<b<<"n";來驗(yàn)證一下(5)將非unsigned型數(shù)據(jù)賦給長度相同的unsigned型變量,也是原樣照賦(連原有的符號(hào)位也作為數(shù)值一起傳送)。如:,#includevoidmain()unsigneda;intb=-1;a=b;cout<<"a="<<a<=,=,=,|=C采用這種復(fù)合運(yùn)算符,一是為了簡化程序,使程序精練,二是為了提高編譯效率,有利于編譯,能產(chǎn)生質(zhì)量較高的目標(biāo)代碼。)。,八、逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式C+語言提供一種特殊的運(yùn)算符逗號(hào)運(yùn)算符。用它將兩個(gè)表達(dá)式連接起來。如3+5,6+8稱為逗號(hào)表達(dá)式。逗號(hào)表達(dá)式的一般形式為:表達(dá)式1,表達(dá)式2逗號(hào)表達(dá)式的求解過程是:先求解表達(dá)式1,再求解表達(dá)式2。整個(gè)逗號(hào)表達(dá)式的值是表達(dá)式2的值。例如,上面的逗號(hào)表達(dá)式"3+5,6+8"的值為14。又如,逗號(hào)表達(dá)式,a=3*5,a*4先求解a=3*5,得a的值為15,然后求解a*4得60,整個(gè)逗號(hào)表達(dá)式的值為60。一個(gè)逗號(hào)表達(dá)式又可以與另一個(gè)表達(dá)式組成一個(gè)新的逗號(hào)表達(dá)式,如:(a3*5,a*4),a5先使a的值等于15,再進(jìn)行a*4(但a值未變),再進(jìn)行a5得20,即整個(gè)表達(dá)式的值為20。,逗號(hào)表達(dá)式的一般形式可以擴(kuò)展為:表達(dá)式1,表達(dá)式2,表達(dá)式3,表達(dá)式n它的值為表達(dá)式n的值。逗號(hào)運(yùn)算符是所有運(yùn)算符中級(jí)別最低的。因此,下面兩個(gè)表達(dá)式的作用是不同的:x(a3,6*3)x=a=3,6*a第個(gè)是一個(gè)賦值表達(dá)式,將一個(gè)逗號(hào)表達(dá)式的值賦給x,x的值等于18。第個(gè)是逗號(hào)表達(dá)式,它包括一個(gè)賦值表達(dá)式和一個(gè)算術(shù)表達(dá)式,x的值為3。,其實(shí),逗號(hào)表達(dá)式無非是把若干個(gè)表達(dá)式"串聯(lián)"起來。在許多情況下,使用逗號(hào)表達(dá)式的目的只是想分別得到各個(gè)表達(dá)式的值,而井非一定需要得到和使用整個(gè)逗號(hào)表達(dá)式的值,逗號(hào)表達(dá)式最常用于循環(huán)語句(for語句)中。逗號(hào)運(yùn)算符又稱為"順序求值運(yùn)算符"。請(qǐng)注意并不是任何地方出現(xiàn)的逗號(hào)都是作為逗號(hào)運(yùn)算符。例如函數(shù)參數(shù)也是用逗號(hào)來間隔的。,2.14sizeof()運(yùn)算符sizeof()運(yùn)算符是一元運(yùn)算,用于計(jì)算某一操作數(shù)類型的字節(jié)數(shù)。如:sizeof(int)/其值為2或4sizeof(float)/其值為4,2.2.2各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算整型、單精度型、雙精度型數(shù)據(jù)可以混合運(yùn)算。前已述及,字符型數(shù)據(jù)可以與整型通用,因此,整型、實(shí)型(包括單、雙精度)、字符型數(shù)據(jù)間可以混合運(yùn)算。例如10+a+1.5-8765.1234*b是合法的。在進(jìn)行運(yùn)算時(shí),不同類型的數(shù)據(jù)要先轉(zhuǎn)換成同一類型,然后進(jìn)行運(yùn)算。,圖中橫向向左的箭頭表示必定的轉(zhuǎn)換,如字符數(shù)據(jù)必定先轉(zhuǎn)換為整數(shù),short型轉(zhuǎn)為int型,float型數(shù)據(jù)在運(yùn)算時(shí)一律轉(zhuǎn)換成雙精度型,以提高運(yùn)算精度(即使是兩個(gè)float型數(shù)據(jù)在加化成double型,然后再相加)。,doublefloatlongunsignedintchar,short,縱向的箭頭表示當(dāng)運(yùn)算對(duì)象為不同類型時(shí)轉(zhuǎn)換的方向。例如int型與doub1e型數(shù)據(jù)進(jìn)行運(yùn)算,先將int型的數(shù)據(jù)轉(zhuǎn)換成圖double型,然后在兩個(gè)同類型(double型)數(shù)據(jù)進(jìn)行運(yùn)算,結(jié)果為double型。注意箭頭方向只表示數(shù)據(jù)類型級(jí)別的高低,由低向高轉(zhuǎn)換,不要理解為int型先轉(zhuǎn)成unsigned型,再轉(zhuǎn)成1ong型,再轉(zhuǎn)成double型。如果一個(gè)Int型數(shù)據(jù)與一個(gè)double型數(shù)據(jù)運(yùn)算,是直接將int型轉(zhuǎn)成double型。同理,一個(gè)int型與一個(gè)Long型數(shù)據(jù)運(yùn)算,先將int型轉(zhuǎn)換成1ong型。,換言之,如果有一個(gè)數(shù)據(jù)是float型或double型,則另一數(shù)據(jù)要先轉(zhuǎn)為double型,結(jié)果為double型。如果二個(gè)數(shù)據(jù)中最高級(jí)別為1ong型,則另一數(shù)據(jù)先轉(zhuǎn)為1ong型,結(jié)果為1ong型。其它依此類推。假設(shè)已指定i為整型變量,f為float變量,d為double型變量,e為1ong型,有下面式子:10十a(chǎn)i*f-d/e運(yùn)算次序?yàn)椋哼M(jìn)行10a的運(yùn)算,先將a轉(zhuǎn)換成整數(shù)97,運(yùn)算結(jié)果為107。進(jìn)行i*f的運(yùn)算。先將i與f都轉(zhuǎn)成double型,運(yùn)算結(jié)果為double型。整數(shù)107與i*f的積相加。先將整數(shù)107轉(zhuǎn)換成雙精度數(shù)(小數(shù)點(diǎn)后加若干個(gè)0,即10700000),結(jié)果為double型。將變量e化成double型,d/e結(jié)果為double型。將10十a(chǎn)i*f的結(jié)果與d/e相減的結(jié)果為double型。上述的類型轉(zhuǎn)換是由系統(tǒng)自動(dòng)進(jìn)行的。,2.2.3邏輯表達(dá)式優(yōu)化的副作用,在C+中,在求邏輯表達(dá)式的過程中,一旦能確定邏輯表達(dá)式的值時(shí),就不必再逐步求值了。這就是邏輯表達(dá)式的優(yōu)化。例如:假設(shè)inta=0,b=4,c=5;acout<<+i;輸出“4”。若改為cout<<i+;則輸出“3”。,注意:(1)自增運(yùn)算符(+),自減運(yùn)算符(-),只能用于變量,而不能用于常量或表達(dá)式,如5+或(a+b)+都是不合法的。(2)+和-的結(jié)合方向是“自右至左”。見附錄。前面已提到,算術(shù)運(yùn)算符的結(jié)合方向?yàn)椤白宰蠖摇?,這是大家所熟知的。如果有-i+,i的左面是負(fù)號(hào)運(yùn)算符,右面是自加運(yùn)算符。如果i的原值等于3,若按左結(jié)合性,相當(dāng)于(-i)+,而(-i)+是不合法的。對(duì)表達(dá)式不能進(jìn)行自加自減運(yùn)算。自增(減)運(yùn)算符常用于循環(huán)語句中使循環(huán)變量自動(dòng)加1。也用于指針變量,使指針指向下一個(gè)地址。這些將在以后的章節(jié)中介紹。,自增(減)運(yùn)算符有關(guān)表達(dá)式使用中的問題說明C運(yùn)算符和表達(dá)式使用靈活,利用這一點(diǎn)可以巧妙地處理許多在其它語言中難以處理的問題。但另一方面,有時(shí)會(huì)出現(xiàn)一些令人容易搞混的問題,因此務(wù)必要小心謹(jǐn)慎。1在表達(dá)式中包含自加或自減運(yùn)算時(shí),很容易出錯(cuò)。i+或i-什么時(shí)候進(jìn)行自加或自減呢?如果有以下賦值語句,若i原值等于3,ki+;顯然先將i的原值賦給以k(k的值等于3),然后i進(jìn)行自加,執(zhí)行完此語句后,i的值等于4。如果有以下表達(dá)式:,k=(i+)+(i+)+(i+)表達(dá)式的值是多少呢?有人認(rèn)為相當(dāng)于3+4+5,即12。事實(shí)上它等于9。即先把i的原值(3)取出來,作為表達(dá)式中i的值;因此先進(jìn)行三個(gè)i相加,得9。然后再實(shí)現(xiàn)自加,i的值變?yōu)?。而k(+i)+(+i)+(+i)有人以為從左到右使i增值,相當(dāng)于k=456,得15。事實(shí)上k=16。原因是:+i的自加是在表達(dá)式求解一開始時(shí)最先進(jìn)行的是前兩位加法,即對(duì)表達(dá)式掃描時(shí),先對(duì)i進(jìn)行兩次自加,i得5,再進(jìn)行相加得10,然后進(jìn)行k=556的運(yùn)算,故得16。如果是k(+i)+(+i)+(+i)+(+i)?,2C語言中有的運(yùn)算符為一個(gè)字符,有的運(yùn)算符由兩個(gè)字符組成,在表達(dá)式中如何組合呢?如i+j,是理解為(i+)+j呢?還是i+(+j)?C編譯在處理時(shí)盡可能多地(自左而右)將若干個(gè)字符組成一個(gè)運(yùn)算符(在處理標(biāo)識(shí)符、關(guān)鍵字時(shí)也按同一原則處理),如i+j,將解釋為(i+)+j,而不是i+(+j)。如有興趣可驗(yàn)證:intx=3,y=4,z;z=x+y;z是7還是8?或者x是4還是3,y是4還是5?,C+語言表達(dá)能力強(qiáng),其中一個(gè)重要方面就在于它的表達(dá)式類型豐富,運(yùn)算符功能強(qiáng),因而C使用靈活,適應(yīng)性強(qiáng)。在后面幾章中將會(huì)看到這一點(diǎn)。作業(yè)P30-31第3,7,10,14題,