C語(yǔ)言程序設(shè)計(jì)第八章_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)第八章_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)第八章_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)第八章_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)第八章_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

會(huì)計(jì)學(xué)1C語(yǔ)言程序設(shè)計(jì)第八章定義新類(lèi)型的步驟:

(1)首先按通常定義變量的方法寫(xiě)出定義的主體;如:

double*f;(2)將變量名換成新類(lèi)型名;

double*PDOUBLE;(3)在最前面加上關(guān)鍵字typedef;typedefdouble*PDOUBLE;(4)可以用新類(lèi)型定義變量了;

PDOUBLEf1,f2;討論自定義數(shù)據(jù)類(lèi)型的作用8.1類(lèi)型定義第1頁(yè)/共26頁(yè)結(jié)構(gòu)可以將若干個(gè)不同類(lèi)型的數(shù)據(jù)組合成一個(gè)復(fù)合數(shù)據(jù)對(duì)象。組成結(jié)構(gòu)的數(shù)據(jù)項(xiàng)稱(chēng)結(jié)構(gòu)的成分或成員。結(jié)構(gòu)類(lèi)型成員的數(shù)量必須固定,但該結(jié)構(gòu)中各個(gè)成員的類(lèi)型可以不同。8.2.1結(jié)構(gòu)類(lèi)型說(shuō)明、結(jié)構(gòu)變量定義

結(jié)構(gòu)類(lèi)型說(shuō)明

struct結(jié)構(gòu)名{成員說(shuō)明序列};

結(jié)構(gòu)名是結(jié)構(gòu)類(lèi)型說(shuō)明的標(biāo)志,如果所定義的結(jié)構(gòu)類(lèi)型,在程序中很少使用,可以省略結(jié)構(gòu)名,在說(shuō)明類(lèi)型的同時(shí)定義結(jié)構(gòu)變量;如果所定義的結(jié)構(gòu)類(lèi)型,在程序中要多次使用,應(yīng)該使用結(jié)構(gòu)名說(shuō)明結(jié)構(gòu)類(lèi)型,以后在程序需要該結(jié)構(gòu)類(lèi)型的地方,用“struct結(jié)構(gòu)名”的形式代表整個(gè)說(shuō)明。相當(dāng)于一個(gè)類(lèi)型名。

8.2結(jié)構(gòu)第2頁(yè)/共26頁(yè)例日期可以用包含三個(gè)成員的結(jié)構(gòu)來(lái)描述:

structdate{intyear,month,day;};學(xué)生信息的結(jié)構(gòu)類(lèi)型可說(shuō)明如下:structstudent{charname[15];charsex;structdatebirthday;floatscore[4];};其中structdate是一個(gè)已說(shuō)明過(guò)的結(jié)構(gòu)類(lèi)型名。8.2結(jié)構(gòu)第3頁(yè)/共26頁(yè)結(jié)構(gòu)變量定義

結(jié)構(gòu)變量定義有4種方法:

(1)直接定義結(jié)構(gòu)類(lèi)型變量,將一個(gè)結(jié)構(gòu)說(shuō)明當(dāng)成類(lèi)型描述,在它后面列出變量標(biāo)識(shí)符。這種表示方法沒(méi)有結(jié)構(gòu)名,定義形式如下:struct{成員說(shuō)明序列}結(jié)構(gòu)變量表;例:struct{charname[10];intage;intclass;}stu1,stu2[5],*stu3;8.2結(jié)構(gòu)第4頁(yè)/共26頁(yè)結(jié)構(gòu)變量定義

結(jié)構(gòu)變量定義有4種方法:

(2)聲明類(lèi)型同時(shí),定義結(jié)構(gòu)變量struct結(jié)構(gòu)名

{成員說(shuō)明序列}結(jié)構(gòu)變量表;例:structpoint{doublex,y,z;}p1,p2,*p3;說(shuō)明結(jié)構(gòu)類(lèi)型point,并定義三個(gè)變量。

8.2結(jié)構(gòu)第5頁(yè)/共26頁(yè)結(jié)構(gòu)變量定義

結(jié)構(gòu)變量定義有4種方法:

(3)使用已聲明的結(jié)構(gòu)類(lèi)型,定義結(jié)構(gòu)變量struct結(jié)構(gòu)類(lèi)型名

結(jié)構(gòu)變量表;例:使用上面的例子中說(shuō)明的structpoint。structpointp1,p2[5],*p3;(4)定義結(jié)構(gòu)類(lèi)型,再定義結(jié)構(gòu)變量

typedefstruct{成員說(shuō)明序列}結(jié)構(gòu)類(lèi)型名;結(jié)構(gòu)類(lèi)型名結(jié)構(gòu)變量表;

8.2結(jié)構(gòu)第6頁(yè)/共26頁(yè)結(jié)構(gòu)的實(shí)現(xiàn)C語(yǔ)言為結(jié)構(gòu)對(duì)象分配足夠大的存儲(chǔ)空間,順序地放入各個(gè)成員,但具體的存儲(chǔ)位置,由一組對(duì)齊規(guī)則來(lái)調(diào)整,結(jié)構(gòu)里的成員未必一個(gè)緊接著一個(gè)存放,它們之間可能有空位。結(jié)構(gòu)類(lèi)型和結(jié)構(gòu)變量的空間計(jì)算:sizeof討論結(jié)構(gòu)存儲(chǔ)中使用對(duì)齊原則的原因8.2結(jié)構(gòu)第7頁(yè)/共26頁(yè)8.2.2結(jié)構(gòu)變量的初始化和使用結(jié)構(gòu)變量的初始化可以在定義的同時(shí)初始化,使用{}將變量的成員的初始化值組合起來(lái)。如

structpoint{doublex,y;}p1={1.5,4,6},p[3]={{1.5,2.5},{3.4,2.4},{8.6,9.0}};初始化描述中的初始值將順序提供給結(jié)構(gòu)變量的各基本成員,初始化表達(dá)式只能是可靜態(tài)求值的表達(dá)式。給出的初始化數(shù)據(jù)與結(jié)構(gòu)成員類(lèi)型一致,個(gè)數(shù)不得多于成員數(shù)量,如果提供的數(shù)據(jù)項(xiàng)不夠,與數(shù)組的規(guī)定一樣,其余成員自動(dòng)用0初始化。如果定義時(shí)沒(méi)有提供初始值,系統(tǒng)對(duì)結(jié)構(gòu)變量的處理方式與其它變量一樣。外部和全局變量,用0初始化,自動(dòng)變量不進(jìn)行初始化,各成員的狀態(tài)不確定。

8.2結(jié)構(gòu)第8頁(yè)/共26頁(yè)8.2.2結(jié)構(gòu)變量的初始化和使用結(jié)構(gòu)變量操作1.整體賦值:同樣類(lèi)型的結(jié)構(gòu)變量,可整體進(jìn)行相互賦值。2.結(jié)構(gòu)成員引用成員運(yùn)算符:兩個(gè)運(yùn)算符“.”和“->”,點(diǎn)號(hào)“.”優(yōu)先級(jí):與圓括號(hào)、下標(biāo)運(yùn)算符相同,在C的運(yùn)算符中優(yōu)先級(jí)最高結(jié)合方式:自左向右結(jié)構(gòu)中簡(jiǎn)單變量成員的引用形式有下面三種:(1)結(jié)構(gòu)變量名.成員名

(名字引用)(2)結(jié)構(gòu)指針->成員名

(指針引用)(3)(*結(jié)構(gòu)指針).成員名

(將指針轉(zhuǎn)化為名字應(yīng)用)8.2結(jié)構(gòu)第9頁(yè)/共26頁(yè)8.2.2結(jié)構(gòu)變量的初始化和使用結(jié)構(gòu)變量操作3.對(duì)結(jié)構(gòu)成員進(jìn)行操作結(jié)構(gòu)變量中的每一個(gè)成員都屬于某個(gè)具體的類(lèi)型,可以象普通變量一樣,對(duì)它進(jìn)行同類(lèi)變量所允許的任何操作。

例:

scanf(“%s”,);strcpy(,”Zhangyang”);scanf(“%c”,&stu1.sex);stu1.sex=’M’;stu1.birthdat.year=1963;scanf(“%d”,&stu1.birthday.year);8.2結(jié)構(gòu)第10頁(yè)/共26頁(yè)8.2.3結(jié)構(gòu)與函數(shù)(1)向函數(shù)傳遞結(jié)構(gòu)變量的成員C語(yǔ)言函數(shù)實(shí)參、形參傳遞數(shù)據(jù)只有值傳遞,結(jié)構(gòu)變量的成員可以是簡(jiǎn)單變量、數(shù)組或指針變量等,作為成員變量,可以參與其類(lèi)型允許的任何操作,這個(gè)原則也適用于參數(shù)傳遞結(jié)構(gòu)變量中的每一個(gè)成員都屬于某個(gè)具體的類(lèi)型,可以象普通變量一樣,對(duì)它進(jìn)行同類(lèi)變量所允許的任何操作。(2)向函數(shù)傳遞結(jié)構(gòu)變量

把結(jié)構(gòu)變量作為一個(gè)整體傳遞給函數(shù),要求函數(shù)的形參也屬于相同的結(jié)構(gòu)類(lèi)型。這時(shí)傳遞的是實(shí)參結(jié)構(gòu)變量的值,系統(tǒng)將為相同結(jié)構(gòu)類(lèi)型的形參開(kāi)辟相應(yīng)的存儲(chǔ)單元,并將實(shí)參中各成員的值賦給對(duì)應(yīng)的形參成員。

討論結(jié)構(gòu)變量作為函數(shù)參數(shù)的利弊。8.2結(jié)構(gòu)第11頁(yè)/共26頁(yè)8.2.3結(jié)構(gòu)與函數(shù)(3)傳遞結(jié)構(gòu)的地址

結(jié)構(gòu)指針做函數(shù)實(shí)參,對(duì)應(yīng)形參應(yīng)該是一個(gè)基類(lèi)型相同的結(jié)構(gòu)指針。討論結(jié)構(gòu)地址作為函數(shù)參數(shù)的好處8.2.4結(jié)構(gòu)指針與鏈表鏈表的特點(diǎn)是將數(shù)據(jù)存儲(chǔ)在位置任意的結(jié)構(gòu)存儲(chǔ)塊中,用結(jié)構(gòu)指針將這些存儲(chǔ)塊連接在一起,從第一個(gè)存儲(chǔ)塊順著指針可以訪(fǎng)問(wèn)到所有的數(shù)據(jù)。鏈表中的每一個(gè)存儲(chǔ)塊叫一個(gè)結(jié)點(diǎn)。實(shí)現(xiàn)鏈表需要使用結(jié)構(gòu)指針和動(dòng)態(tài)存儲(chǔ)管理機(jī)制。8.2結(jié)構(gòu)第12頁(yè)/共26頁(yè)8.2.4結(jié)構(gòu)指針與鏈表鏈表示意:8.2結(jié)構(gòu)鏈表實(shí)現(xiàn)結(jié)點(diǎn)類(lèi)型構(gòu)造的討論:指向本結(jié)點(diǎn)類(lèi)型的指針是實(shí)現(xiàn)鏈表的基礎(chǔ)structnode{intdata;structnode*next;

};

第13頁(yè)/共26頁(yè)聯(lián)合也是C語(yǔ)言的一種構(gòu)造機(jī)制,一個(gè)聯(lián)合通常由幾個(gè)類(lèi)型不同的成員組成,這些成員共享同一個(gè)位置開(kāi)始的存儲(chǔ)區(qū)。每一個(gè)時(shí)刻,聯(lián)合只能保持它的某一個(gè)成員的值。

8.3.1聯(lián)合類(lèi)型說(shuō)明、聯(lián)合變量定義形式:union{成員說(shuō)明}變量表;

union聯(lián)合名{成員說(shuō)明}變量表;

例:uniondata{inti;floatf;charstr[5];}d1,d2;說(shuō)明聯(lián)合data,同時(shí)定義了兩個(gè)聯(lián)合變量d1和d2。8.3聯(lián)合第14頁(yè)/共26頁(yè)聯(lián)合既可以出現(xiàn)在結(jié)構(gòu)內(nèi),它的成員也可以是結(jié)構(gòu)。例:

struct{charname[10];union{introomnum;

char*addr;

}info;

}x[5];8.3.2聯(lián)合變量的初始化和使用聯(lián)合變量初始化聯(lián)合變量定義時(shí)也可以初始化,但初始化值只能給第一個(gè)成員。如:uniondatad1=10;說(shuō)明聯(lián)合data,同時(shí)定義了兩個(gè)聯(lián)合變量d1和d2。8.3聯(lián)合第15頁(yè)/共26頁(yè)聯(lián)合變量的使用1.聯(lián)合成員引用三種形式:聯(lián)合變量名.成員名

指針變量名->成員名

(*指針變量名).成員名聯(lián)合的成員變量同樣可參與所屬類(lèi)型允許的所有操作。聯(lián)合成員的賦操作取到的值總是最近一次存入的成員變量的值。2.聯(lián)合變量整體賦值賦值結(jié)果是兩個(gè)存儲(chǔ)區(qū)內(nèi)容相同。8.3聯(lián)合第16頁(yè)/共26頁(yè)聯(lián)合變量的使用3.和函數(shù)有關(guān)的聯(lián)合和結(jié)構(gòu)一樣,不僅聯(lián)合成員可以象簡(jiǎn)單變量一樣參與函數(shù)操作,聯(lián)合變量和聯(lián)合指針可以做函數(shù)形參、返回值和調(diào)用實(shí)參。

聯(lián)合變量的存儲(chǔ)聯(lián)合變量存儲(chǔ)區(qū)大小,由聯(lián)合成員中要求最大存儲(chǔ)空間的成員的空間要求決定。聯(lián)合變量使用原則:保持使用和最近一次賦值意義上的一致,也就是說(shuō),程序中,原來(lái)在聯(lián)合存儲(chǔ)空間中以什么方式存入數(shù)據(jù),就應(yīng)該按照這種方式要求的使用方法去使用存入的數(shù)據(jù)。這種一致性靠寫(xiě)程序的人來(lái)實(shí)現(xiàn)。8.3聯(lián)合第17頁(yè)/共26頁(yè)枚舉是C語(yǔ)言中用于定義一組命名常量的機(jī)制。如果一個(gè)變量只有可能的幾種值,可以定義為枚舉類(lèi)型。枚舉是指將變量的值一一列舉出來(lái),變量的值只限于列舉出來(lái)的值的范圍。枚舉說(shuō)明:

enum枚舉類(lèi)型名{枚舉常量表};枚舉常量表中枚舉常量是用戶(hù)定義的標(biāo)識(shí)符,它們的值從0開(kāi)始從左向右遞增。說(shuō)明中可以用賦值號(hào)改變枚舉常量的值,隨后的枚舉常量的值順序遞增,直到下一個(gè)指定特定值的枚舉常量為止。作為枚舉常量的標(biāo)識(shí)符不能再做常量、變量的名字。枚舉變量的定義形式為:enum枚舉類(lèi)型名

枚舉變量1,枚舉變量2...;也可以在說(shuō)明枚舉類(lèi)型的同時(shí)定義枚舉變量。討論程序設(shè)計(jì)中為什么使用枚舉。8.4枚舉第18頁(yè)/共26頁(yè)對(duì)二進(jìn)制位的操作功能。可以用位運(yùn)算符實(shí)現(xiàn)二進(jìn)制直接操作。常用的位運(yùn)算有四個(gè):位“否定”:一個(gè)運(yùn)算對(duì)象,對(duì)象值為1時(shí)得到0值,對(duì)象值為0時(shí)得到1值。位“與”:兩個(gè)運(yùn)算對(duì)象的值都為1時(shí)得到結(jié)果1,其它情況結(jié)果為0。位“或”:兩個(gè)運(yùn)算對(duì)象的值都為0時(shí)得到結(jié)果0,其它情況結(jié)果為1。位“異或”: 兩個(gè)運(yùn)算對(duì)象的值不相同時(shí)得到結(jié)果1,否則結(jié)果為0。

8.5位運(yùn)算和位段第19頁(yè)/共26頁(yè)8.5.1位運(yùn)算

C語(yǔ)言中位運(yùn)算符有:按位求反

~

按位與

& ③左移

<< ②

按位異或

^

④右移

>>

按位或

|

(圓圈中的數(shù)字表示運(yùn)算符的優(yōu)先級(jí))擴(kuò)展運(yùn)算符包括:<<=、>>=、&=、^=、|=。位運(yùn)算的實(shí)質(zhì)是對(duì)字節(jié)或字中的實(shí)際位進(jìn)行檢測(cè)、設(shè)置或移位,它只適用于字符型和整數(shù)型變量以及它們的變體,對(duì)其它數(shù)據(jù)類(lèi)型不適用。移位運(yùn)算:右移:

變量名>>移位的位數(shù)

左移:

變量名<<移位的位數(shù)

討論位運(yùn)算符和邏輯運(yùn)算符的不同。8.5位運(yùn)算和位段第20頁(yè)/共26頁(yè)8.5.1位運(yùn)算---位運(yùn)算實(shí)例:(1)~0110將八進(jìn)制數(shù)110按位取反,結(jié)果為:0267(八進(jìn)制數(shù))~0100100010110111(2)“左移”運(yùn)算(<<):左端移出部分舍棄,右端補(bǔ)0chara=4,b;b=a<<2;

用二進(jìn)制數(shù)表示:

a : 00000100(a=4)b=a<<2 : 00010000(b=16=4*2*2)左移時(shí),若左端移出部分沒(méi)有1,則每左移1位,相當(dāng)于移位對(duì)象乘以2??捎么朔椒ù娉朔ǎ涌爝\(yùn)算速度。若左端移出包含1,這一特性不成立。如:chara=68,b;b=a<<2;用二進(jìn)制數(shù)表示:

a : 01000100(a=68)b=a<<2 : 00010000(b=16)8.5位運(yùn)算和位段第21頁(yè)/共26頁(yè)8.5.1位運(yùn)算---位運(yùn)算實(shí)例:(3)“右移”運(yùn)算(>>):右端移出部分舍棄,左端移入二進(jìn)制保持原來(lái)數(shù)的性質(zhì),如果原來(lái)是正數(shù)或無(wú)符號(hào)數(shù),移入補(bǔ)0,否則移入補(bǔ)1。inta=-071000,b;b=a>>2;用二進(jìn)制數(shù)表示的過(guò)程如下:

a的原碼: 1111001000000000(a=-071000)a的補(bǔ)碼: 1000111000000000(

機(jī)內(nèi)形式)b=a>>2:

1110001110000000(b機(jī)內(nèi)形式,補(bǔ)碼)b的原碼: 1001110010000000b的八進(jìn)制數(shù):

-016200若右端移出部分沒(méi)有1,則每右移1位,相當(dāng)于移位對(duì)象除以2。(4)按位“與”(&):和0與的位得0,和1與的位保持不變。可用和0與的方法,將某一位清0,可用和1與的方法取某一位的值。如:12&10的計(jì)算過(guò)程:

00001100

& 00001010 000010008.5位運(yùn)算和位段第22頁(yè)/共26頁(yè)8.5.1位運(yùn)算---位運(yùn)算實(shí)例:(5)按位“或”(|):和1或的位得1,和0或的位保持不變。可用和1或的方法,將某一位置1,可用和0或的方法取某一位的值。如:12|10的計(jì)算過(guò)程:

00001100

| 00001010 00001110(6)按位“異或”(^):運(yùn)算位上數(shù)相同得0,數(shù)不同得1。可用和1異或的方法,對(duì)某一位求反,可用和0異或的方法保持某一位不變。如:12^10的計(jì)算過(guò)程:

00001100

^ 00001010 00000110位運(yùn)算對(duì)象長(zhǎng)度不同時(shí),將右端對(duì)齊,左端根據(jù)數(shù)的性質(zhì)決定補(bǔ)0或1。保持?jǐn)?shù)據(jù)值的性質(zhì)不變。8.5位運(yùn)算和位段第23頁(yè)/共26頁(yè)8.5.2位結(jié)構(gòu)

位結(jié)構(gòu)是一種特殊的結(jié)構(gòu),其中以位為單位的成員稱(chēng)為“位段”或“位域”。位結(jié)構(gòu)定義的一般形式為:struct位結(jié)構(gòu)名{數(shù)據(jù)類(lèi)型

變量名:整型常數(shù);

數(shù)據(jù)類(lèi)型

變量名:整型常數(shù);}位結(jié)構(gòu)變量;數(shù)據(jù)類(lèi)型必須是unsigned。整型常數(shù)必須是非負(fù)的整數(shù),范圍是0~

溫馨提示

  • 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)論