c語言第十二章(蘇小紅版)學(xué)習(xí)課程_第1頁
c語言第十二章(蘇小紅版)學(xué)習(xí)課程_第2頁
c語言第十二章(蘇小紅版)學(xué)習(xí)課程_第3頁
c語言第十二章(蘇小紅版)學(xué)習(xí)課程_第4頁
c語言第十二章(蘇小紅版)學(xué)習(xí)課程_第5頁
已閱讀5頁,還剩55頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、本章學(xué)習(xí)內(nèi)容 結(jié)構(gòu)體數(shù)據(jù)類型,共用體數(shù)據(jù)類型、枚舉數(shù)據(jù)類型、定義數(shù)據(jù)類型的別名 結(jié)構(gòu)體變量、結(jié)構(gòu)體數(shù)組、結(jié)構(gòu)體指針的定義和初始化 結(jié)構(gòu)體成員的引用、成員選擇運算符、指向運算符 向函數(shù)傳遞結(jié)構(gòu)體變量、結(jié)構(gòu)體數(shù)組、結(jié)構(gòu)體指針 動態(tài)數(shù)據(jù)結(jié)構(gòu)、動態(tài)鏈表第1頁/共60頁第一頁,編輯于星期五:十六點 十五分。 二進制數(shù)類型本不存在 內(nèi)存里存的內(nèi)容,你認為它是什么,它就是什么 在早期的機器指令及匯編語言中,數(shù)據(jù)對象均用二進制數(shù)表示,沒有類型的概念 一般的CPU只支持兩種類型 整數(shù)、浮點數(shù)第2頁/共60頁第二頁,編輯于星期五:十六點 十五分。 在高級語言引入了基本數(shù)據(jù)類型 整型、浮點型、字符型等 不同語言會定

2、義不同的基本類型 基本數(shù)據(jù)類型并不能方便地解決所有問題 有些語言(如PL/1)中試圖規(guī)定較多的類型,如數(shù)組、樹、棧等,但實踐證明不是個好辦法第3頁/共60頁第三頁,編輯于星期五:十六點 十五分。第4頁/共60頁第四頁,編輯于星期五:十六點 十五分。12.2 結(jié)構(gòu)體的定義為什么要定義結(jié)構(gòu)體類型 在程序里表示一個人(姓名、年齡、性別),怎么表示? 想表示多個人呢? 如何用計算機程序?qū)崿F(xiàn)下述表格的管理? 第5頁/共60頁第五頁,編輯于星期五:十六點 十五分。數(shù)組的解決方法第6頁/共60頁第六頁,編輯于星期五:十六點 十五分。數(shù)組的解決方法第7頁/共60頁第七頁,編輯于星期五:十六點 十五分。 數(shù)據(jù)的

3、內(nèi)存管理方式 數(shù)組的解決方法分配內(nèi)存不集中,尋址效率不高分配內(nèi)存不集中,尋址效率不高 對數(shù)組賦初值時,易發(fā)生錯位對數(shù)組賦初值時,易發(fā)生錯位 結(jié)構(gòu)顯得零散,不易管理結(jié)構(gòu)顯得零散,不易管理第8頁/共60頁第八頁,編輯于星期五:十六點 十五分。希望的內(nèi)存分配圖 第9頁/共60頁第九頁,編輯于星期五:十六點 十五分。結(jié)構(gòu)體類型的聲明聲明了一個結(jié)構(gòu)體類型聲明了一個結(jié)構(gòu)體類型構(gòu)成結(jié)構(gòu)體的變量稱為結(jié)構(gòu)構(gòu)成結(jié)構(gòu)體的變量稱為結(jié)構(gòu)體的成員體的成員(Structure Member)結(jié)構(gòu)體的名字稱為結(jié)構(gòu)體結(jié)構(gòu)體的名字稱為結(jié)構(gòu)體標簽標簽(Structure Tag)第10頁/共60頁第十頁,編輯于星期五:十六點 十五

4、分。結(jié)構(gòu)體類型的聲明結(jié)構(gòu)體模板結(jié)構(gòu)體模板(Structure Template)Dont forget the semicolon!第11頁/共60頁第十一頁,編輯于星期五:十六點 十五分。(1 1)先定義結(jié)構(gòu)體類型,再定義變量名)先定義結(jié)構(gòu)體類型,再定義變量名(2 2)在定義類型的同時定義變量(3 3)直接定義結(jié)構(gòu)體變量(不指定結(jié)構(gòu)體標簽)第12頁/共60頁第十二頁,編輯于星期五:十六點 十五分。用typedef定義數(shù)據(jù)類型struct student stu1, stu2;/*It works*/student stu1, stu2; /*Can this work?*/struct st

5、u1, stu2; /*Can this work?*/STUDENT stu1, stu2; /*It works!*/關(guān)鍵字關(guān)鍵字typedef為一種為一種已存在的已存在的類型類型定義一個定義一個別名別名,并未定義新類型,并未定義新類型STUDENT與與struct student類類型是型是同義詞同義詞第13頁/共60頁第十三頁,編輯于星期五:十六點 十五分。等價于等價于等價于等價于第14頁/共60頁第十四頁,編輯于星期五:十六點 十五分。 嵌套的結(jié)構(gòu)體(Nested Structure)就是在一個結(jié)構(gòu)體內(nèi)包含了另一個結(jié)構(gòu)體作為其成員 嵌套的結(jié)構(gòu)體結(jié)構(gòu)體定義結(jié)構(gòu)體定義可以嵌套可以嵌套第1

6、5頁/共60頁第十五頁,編輯于星期五:十六點 十五分。 訪問結(jié)構(gòu)體變量的成員必須使用成員選擇運算符(也稱圓點運算符) 結(jié)構(gòu)體變量的引用第16頁/共60頁第十六頁,編輯于星期五:十六點 十五分。【例12.1】演示結(jié)構(gòu)體變量的賦值和引用方法結(jié)構(gòu)體變量的引用按結(jié)構(gòu)體的成員順序逐一對相應(yīng)成按結(jié)構(gòu)體的成員順序逐一對相應(yīng)成員進行賦值員進行賦值格式符格式符%02d中中2d前面的前導(dǎo)符前面的前導(dǎo)符0表示輸出數(shù)據(jù)時,若左邊有多余表示輸出數(shù)據(jù)時,若左邊有多余位,則補位,則補0第17頁/共60頁第十七頁,編輯于星期五:十六點 十五分。 【例12.1】若要從鍵盤輸入結(jié)構(gòu)體變量stu1的內(nèi)容,那么程序如何修改?兩個地址

7、有何不同?兩個地址有何不同?第18頁/共60頁第十八頁,編輯于星期五:十六點 十五分。 【例12.1】若要從鍵盤輸入結(jié)構(gòu)體變量stu1的內(nèi)容,那么程序如何修改?結(jié)構(gòu)體成員的地址與該成員在結(jié)構(gòu)體成員的地址與該成員在結(jié)構(gòu)體中所處的位置及其所占結(jié)構(gòu)體中所處的位置及其所占內(nèi)存的字節(jié)數(shù)相關(guān)內(nèi)存的字節(jié)數(shù)相關(guān)結(jié)構(gòu)體變量的地址結(jié)構(gòu)體變量的地址&stu2是該變是該變量所占內(nèi)存空間的首地址量所占內(nèi)存空間的首地址第19頁/共60頁第十九頁,編輯于星期五:十六點 十五分。結(jié)構(gòu)體所占內(nèi)存的字節(jié)數(shù) struct 類型用內(nèi)存字節(jié)數(shù) = ? 是所有成員變量的內(nèi)存總和嗎?第20頁/共60頁第二十頁,編輯于星期五:十六點

8、 十五分。結(jié)構(gòu)體所占內(nèi)存的字節(jié)數(shù)事實上,所有數(shù)據(jù)類型在內(nèi)存中都是從事實上,所有數(shù)據(jù)類型在內(nèi)存中都是從地址開始存放的地址開始存放的且結(jié)構(gòu)所占的實際空間一般是按照機器字長對齊的且結(jié)構(gòu)所占的實際空間一般是按照機器字長對齊的不同的編譯器、平臺,對齊方式會有變化不同的編譯器、平臺,對齊方式會有變化結(jié)構(gòu)體變量的成員的存儲結(jié)構(gòu)體變量的成員的存儲是與機器相關(guān)的是與機器相關(guān)的具有特定數(shù)據(jù)類型的具有特定數(shù)據(jù)類型的也是與機器相關(guān)的也是與機器相關(guān)的所以一個結(jié)構(gòu)體在內(nèi)存中的存儲格式也是與機器相關(guān)的所以一個結(jié)構(gòu)體在內(nèi)存中的存儲格式也是與機器相關(guān)的第21頁/共60頁第二十一頁,編輯于星期五:十六點 十五分。12.3結(jié)構(gòu)體數(shù)

9、組的定義和初始化第22頁/共60頁第二十二頁,編輯于星期五:十六點 十五分。12.3結(jié)構(gòu)體數(shù)組的定義和初始化建立了數(shù)據(jù)庫中的多條記錄,每條對應(yīng)一個學(xué)生信息建立了數(shù)據(jù)庫中的多條記錄,每條對應(yīng)一個學(xué)生信息第23頁/共60頁第二十三頁,編輯于星期五:十六點 十五分。 【例12.3】利用結(jié)構(gòu)體數(shù)組計算每個學(xué)生的平均分第24頁/共60頁第二十四頁,編輯于星期五:十六點 十五分。12.4結(jié)構(gòu)體指針的定義和初始化ptstu1 STUDENT stu1; STUDENT *pt; pt = &stu1;成員成員1成員成員2成員成員3成員成員4成成員員5等價于等價于第25頁/共60頁第二十五頁,編輯于星

10、期五:十六點 十五分。12.4結(jié)構(gòu)體指針的定義和初始化ptstu1成員成員1成員成員2成員成員3成員成員4成成員員5第26頁/共60頁第二十六頁,編輯于星期五:十六點 十五分。12.4結(jié)構(gòu)體指針的定義和初始化ptstu1成員成員1成員成員2成員成員3成員成員4成成員員5第27頁/共60頁第二十七頁,編輯于星期五:十六點 十五分。12.4結(jié)構(gòu)體指針的定義和初始化 STUDENT stu30; STUDENT *pt; pt = stu; 等價于等價于等價于等價于ptstu30stu0stu1stu2stu3stu4stu5.stu29第28頁/共60頁第二十八頁,編輯于星期五:十六點 十五分。p

11、tstu30stu0stu1stu2stu3stu4stu5.stu29第29頁/共60頁第二十九頁,編輯于星期五:十六點 十五分。12.5向函數(shù)傳遞結(jié)構(gòu)體 向函數(shù)傳遞結(jié)構(gòu)體的單個成員 復(fù)制單個成員的內(nèi)容 函數(shù)內(nèi)對結(jié)構(gòu)內(nèi)容的修改不影響原結(jié)構(gòu) 向函數(shù)傳遞結(jié)構(gòu)體的完整結(jié)構(gòu) 向函數(shù)傳遞結(jié)構(gòu)體的首地址第30頁/共60頁第三十頁,編輯于星期五:十六點 十五分。struct date int year; int month; int day;void Func(struct date p) p.year = 2000; p.month = 5; p.day = 22;第31頁/共60頁第三十一頁,編輯于星

12、期五:十六點 十五分。struct date int year; int month; int day;void Func(struct date ) year = 2000; month = 5; day = 22;指針作函數(shù)形參指針作函數(shù)形參實參必須為地址值實參必須為地址值第32頁/共60頁第三十二頁,編輯于星期五:十六點 十五分。struct date int year; int month; int day; Func(struct date ) year = 2000; month = 5; day = 22; 第33頁/共60頁第三十三頁,編輯于星期五:十六點 十五分。12.5向函

13、數(shù)傳遞結(jié)構(gòu)體 向函數(shù)傳遞結(jié)構(gòu)體的完整結(jié)構(gòu) 復(fù)制整個結(jié)構(gòu)體成員的內(nèi)容,多個值 函數(shù)內(nèi)對結(jié)構(gòu)內(nèi)容的修改不影響原結(jié)構(gòu) 內(nèi)容傳遞更直觀,但開銷大 向函數(shù)傳遞結(jié)構(gòu)體的首地址 用結(jié)構(gòu)體數(shù)組/結(jié)構(gòu)體指針作函數(shù)參數(shù) 僅復(fù)制結(jié)構(gòu)體的首地址,一個值 修改結(jié)構(gòu)體指針所指向的結(jié)構(gòu)體的內(nèi)容 指針傳遞效率高第34頁/共60頁第三十四頁,編輯于星期五:十六點 十五分。12.5向函數(shù)傳遞結(jié)構(gòu)體 【例12.7】修改例12.3程序,用結(jié)構(gòu)體數(shù)組作函數(shù)參數(shù)編程并輸出計算學(xué)生的平均分 第35頁/共60頁第三十五頁,編輯于星期五:十六點 十五分。12.5向函數(shù)傳遞結(jié)構(gòu)體 【例12.7】修改例12.3程序,用結(jié)構(gòu)體數(shù)組作函數(shù)參數(shù)編程并輸

14、出計算學(xué)生的平均分 第36頁/共60頁第三十六頁,編輯于星期五:十六點 十五分。12.5向函數(shù)傳遞結(jié)構(gòu)體 【例12.7】修改例12.3程序,用結(jié)構(gòu)體數(shù)組作函數(shù)參數(shù)編程并輸出計算學(xué)生的平均分 第37頁/共60頁第三十七頁,編輯于星期五:十六點 十五分。12.5向函數(shù)傳遞結(jié)構(gòu)體 【例12.7】修改例12.3程序,用結(jié)構(gòu)體數(shù)組作函數(shù)參數(shù),編程并輸出計算學(xué)生的平均分 第38頁/共60頁第三十八頁,編輯于星期五:十六點 十五分。用戶自定義的數(shù)據(jù)類型 結(jié)構(gòu)體(Struct) 把關(guān)系緊密且邏輯相關(guān)的多種不同類型的變量,組織到統(tǒng)一的名字之下 占用相鄰的一段內(nèi)存單元 共用體,也稱聯(lián)合(Union) 把情形互斥但

15、邏輯相關(guān)的多種不同類型的變量,組織到統(tǒng)一的名字之下 占用同一段內(nèi)存單元,每一時刻只有一個數(shù)據(jù)起作用第39頁/共60頁第三十九頁,編輯于星期五:十六點 十五分。12.6共用體0 x0037b00第40頁/共60頁第四十頁,編輯于星期五:十六點 十五分。12.6共用體 sizeof(union number)取決于的那個成員變量0 x0037b00同一內(nèi)存單元在每一瞬時只能存放其中一種類型的成員起作用的成員是的成員,不能作為函數(shù)參數(shù)不能進行比較操作,只能對第一個成員初始化第41頁/共60頁第四十一頁,編輯于星期五:十六點 十五分。第42頁/共60頁第四十二頁,編輯于星期五:十六點 十五分。第43頁

16、/共60頁第四十三頁,編輯于星期五:十六點 十五分。12.7 枚舉數(shù)據(jù)類型 枚舉(Enumeration)數(shù)據(jù)類型 描述的是一組整型值的集合 用于當某些量僅由有限個數(shù)據(jù)值組成時 enum weeks SUN, MON, TUE, WED, THU, FRI, SAT; enum weeks today; enum response no, yes, none; enum response answer; today = TUE; answer = yes; enum response no = -1, yes = 1, none = 0; 其值為其值為2 2其值為其值為1 1第44頁/共60頁

17、第四十四頁,編輯于星期五:十六點 十五分。 下面的結(jié)構(gòu)是什么意思? struct temp int data; struct temp pt; CB下的錯誤提示: field pt has incomplete type VC下的錯誤提示: pt uses undefined struct temp 下面的結(jié)構(gòu)是什么意思呢? struct temp int data; struct temp *pt;結(jié)構(gòu)體聲明時不能包含本結(jié)結(jié)構(gòu)體聲明時不能包含本結(jié)構(gòu)體類型成員,構(gòu)體類型成員,系統(tǒng)將無法系統(tǒng)將無法為這樣的結(jié)構(gòu)體類型分配內(nèi)為這樣的結(jié)構(gòu)體類型分配內(nèi)存存 可包含指向本結(jié)構(gòu)體可包含指向本結(jié)構(gòu)體類型的指針

18、變量類型的指針變量第45頁/共60頁第四十五頁,編輯于星期五:十六點 十五分。12.8 動態(tài)數(shù)據(jù)結(jié)構(gòu) 單向鏈表struct Link int data; struct Link *next;datanextheaddatanextdatanextdataNULL第46頁/共60頁第四十六頁,編輯于星期五:十六點 十五分。鏈表的定義datanextheaddatanextdatanextdataNULL兩部分信息組成兩部分信息組成一個節(jié)點一個節(jié)點第47頁/共60頁第四十七頁,編輯于星期五:十六點 十五分。datanextheaddatanextdatanextdataNULL數(shù)據(jù)域:存儲數(shù)據(jù)元數(shù)

19、據(jù)域:存儲數(shù)據(jù)元素信息素信息指針域:存儲直接指針域:存儲直接后繼的節(jié)點信息后繼的節(jié)點信息n個節(jié)點鏈接成一個鏈表(因為只包含一個指針域,故又個節(jié)點鏈接成一個鏈表(因為只包含一個指針域,故又稱線性鏈表或單向鏈表)稱線性鏈表或單向鏈表)第48頁/共60頁第四十八頁,編輯于星期五:十六點 十五分。鏈表的建立 向鏈表中添加一個新節(jié)點data = Anodedata = Bnodedata = Cnodehead第49頁/共60頁第四十九頁,編輯于星期五:十六點 十五分。鏈表的建立 若原鏈表為空表(head = NULL) ,則將新建節(jié)點p置為頭節(jié)點 headdatanext p(2) pr = ppr(

20、3) pr-next = NULL第50頁/共60頁第五十頁,編輯于星期五:十六點 十五分。datanextp鏈表的建立 若原鏈表為非空,則將新建節(jié)點p添加到表尾 (2) pr = pheaddataprpr(3) pr-next = NULLnext第51頁/共60頁第五十一頁,編輯于星期五:十六點 十五分。鏈表的刪除操作 若原鏈表為空表,則退出程序 若待刪除節(jié)點p是頭節(jié)點,則將head指向當前節(jié)點的下一個節(jié)點即可刪除當前節(jié)點 datanextheaddatanext p第52頁/共60頁第五十二頁,編輯于星期五:十六點 十五分。鏈表的刪除操作 若待刪除節(jié)點不是頭節(jié)點,則將前一節(jié)點的指針域指向當前節(jié)點的下一節(jié)點即可刪除當

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論