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