




已閱讀5頁,還剩35頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Ch8結(jié)構(gòu)體與共用體 C語言快速培訓(xùn)教案 2020 3 14 NEUQ計(jì)算機(jī)興趣小組專用教案 2 本章內(nèi)容 結(jié)構(gòu)體 結(jié)構(gòu)structure 共用體 聯(lián)合union 類型的定義結(jié)構(gòu)體變量 結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體變量 結(jié)構(gòu)體數(shù)組與指針 函數(shù)的關(guān)系用結(jié)構(gòu)體實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)鏈表的概念及操作原理 2020 3 14 NEUQ計(jì)算機(jī)興趣小組專用教案 3 從基本數(shù)據(jù)類型到抽象數(shù)據(jù)類型 二進(jìn)制數(shù)在早期的機(jī)器指令及匯編語言中 數(shù)據(jù)對(duì)象均用二進(jìn)制數(shù)表示 沒有類型的概念 基本數(shù)據(jù)類型在高級(jí)語言中引入了基本數(shù)據(jù)類型 整型 實(shí)型 字符型等基本數(shù)據(jù)類型不能方便的解決所有問題 有些語言 如PL 1 中試圖規(guī)定較多的類型 如數(shù)組 樹 棧等 但實(shí)踐證明不是個(gè)好辦法 用戶自己構(gòu)造數(shù)據(jù)類型 復(fù)合數(shù)據(jù)類型表示復(fù)雜的數(shù)據(jù)對(duì)象 典型的代表就是 結(jié)構(gòu)體 數(shù)組 指針也可算作此類 抽象數(shù)據(jù)類型 AbstractDataType 簡稱ADT 在復(fù)合數(shù)據(jù)類型基礎(chǔ)上增加了對(duì)數(shù)據(jù)的操作類 跨時(shí)代的進(jìn)步例如汽車就是一種ADT 2020 3 14 NEUQ計(jì)算機(jī)興趣小組專用教案 4 思考一個(gè)問題 在程序里表示一個(gè)人 姓名 年齡 性別 怎么表示 想表示多個(gè)人呢 如何用計(jì)算機(jī)程序?qū)崿F(xiàn)下述表格的管理 表8 1某學(xué)校學(xué)生成績管理表 2020 3 14 NEUQ計(jì)算機(jī)興趣小組專用教案 5 數(shù)組的解決方法 intstudentId 30 最多可以管理30個(gè)學(xué)生 每個(gè)學(xué)生的學(xué)號(hào)用數(shù)組的下標(biāo)表示 charstudentName 10 30 charstudentSex 2 30 inttimeOfEnter 30 入學(xué)時(shí)間用int表示 intscoreComputer 30 計(jì)算機(jī)原理課的成績 intscoreEnglish 30 英語課的成績 intscoreMath 30 數(shù)學(xué)課的成績 intscoreMusic 30 音樂課的成績 2020 3 14 NEUQ計(jì)算機(jī)興趣小組專用教案 6 數(shù)組的解決方法 intstudentId 30 1 2 3 4 5 6 charstudentName 10 30 令狐沖 林平之 岳靈珊 任瑩瑩 charstudentSex 2 30 男 男 女 女 inttimeOfEnter 30 1999 1999 1999 1999 intscoreComputer 30 90 78 89 78 intscoreEnglish 30 83 92 72 95 intscoreMath 30 72 88 98 87 intscoreMusic 30 82 78 66 90 2020 3 14 NEUQ計(jì)算機(jī)興趣小組專用教案 7 數(shù)組的解決方法 數(shù)據(jù)的內(nèi)存管理方式 2020 3 14 NEUQ計(jì)算機(jī)興趣小組專用教案 8 數(shù)組的解決方法 分配內(nèi)存不集中 尋址效率不高對(duì)數(shù)組進(jìn)行賦初值時(shí) 容易發(fā)生錯(cuò)位結(jié)構(gòu)顯得比較零散 不容易管理 2020 3 14 NEUQ計(jì)算機(jī)興趣小組專用教案 9 希望的內(nèi)存分配圖 2020 3 14 NEUQ計(jì)算機(jī)興趣小組專用教案 10 結(jié)構(gòu)體的解決方法 structSTUDENT intstudentID 每個(gè)學(xué)生的序號(hào) charstudentName 10 每個(gè)學(xué)生的姓名 charstudentSex 4 每個(gè)學(xué)生的性別 inttimeOfEnter 每個(gè)學(xué)生的入學(xué)時(shí)間 intscoreComputer 每個(gè)學(xué)生的計(jì)算機(jī)原理成績 intscoreEnglish 每個(gè)學(xué)生的英語成績 intscoreMath 每個(gè)學(xué)生的數(shù)學(xué)成績 intscoreMusic 每個(gè)學(xué)生的音樂成績 structSTUDENT是一個(gè)類型structSTUDENTstudents 4 students 0 studentNamestudents 0 Sex它們都是變量 一般稱為結(jié)構(gòu)的成員變量 2020 3 14 NEUQ計(jì)算機(jī)興趣小組專用教案 11 用戶自定義的數(shù)據(jù)類型 結(jié)構(gòu)體 把關(guān)系緊密且邏輯相關(guān)的多種不同類型的變量組織到統(tǒng)一的名字之下 也稱復(fù)合數(shù)據(jù)類型這種類型的變量占用相鄰的一段內(nèi)存單元共用體 把情形互斥但又邏輯相關(guān)的多種不同類型的變量組織在一起這種類型的變量占用同一段內(nèi)存單元 因此每一時(shí)刻只有一個(gè)數(shù)據(jù)起作用 2020 3 14 NEUQ計(jì)算機(jī)興趣小組專用教案 12 structstudent intnum charname 20 charsex intage floatscore charaddr 30 structuredefinition形成一個(gè)樣板 用于生成結(jié)構(gòu)體變量 一般形式 struct結(jié)構(gòu)體名 類型關(guān)鍵字成員名1 類型關(guān)鍵字成員名2 類型關(guān)鍵字成員名n 構(gòu)成結(jié)構(gòu)體的變量稱為結(jié)構(gòu)體的成員 member 也稱元素 element 或域 filed 結(jié)構(gòu)體的定義只定義了數(shù)據(jù)的形式 即聲明了一種復(fù)雜的數(shù)據(jù)類型 并未生成任何變量 結(jié)構(gòu)體的定義 2020 3 14 NEUQ計(jì)算機(jī)興趣小組專用教案 13 先定義結(jié)構(gòu)體類型再定義變量名 在定義類型的同時(shí)定義變量 直接定義結(jié)構(gòu)體變量 不出現(xiàn)結(jié)構(gòu)體名 structstudentstudent1 student2 structstudent intnum charname 20 charsex intage floatscore charaddr 30 student1 student2 struct intnum charname 20 charsex intage floatscore charaddr 30 student1 student2 結(jié)構(gòu)體變量的定義 2020 3 14 NEUQ計(jì)算機(jī)興趣小組專用教案 14 結(jié)構(gòu)體變量的定義 用typedef為已存在的類型定義新名字structstudent intnum charname 20 charsex intage floatscore charaddr 30 typedefstructstudentSTUD STUDstudent1 student2 用STUD代替structstudent類型 2020 3 14 NEUQ計(jì)算機(jī)興趣小組專用教案 15 結(jié)構(gòu)體定義可以嵌套 structdate intmonth intday intyear typedefstructdateDATE structstudent intnum charname 20 charsex intage DATEbirthday charaddr 30 student1 student2 structstudent占用內(nèi)存字節(jié)數(shù) double占用內(nèi)存字節(jié)數(shù) 8 結(jié)構(gòu)體變量的定義 2020 3 14 NEUQ計(jì)算機(jī)興趣小組專用教案 16 結(jié)構(gòu) Structure 的內(nèi)存占用 一個(gè)結(jié)構(gòu)變量的成員變量在內(nèi)存中是相鄰的整個(gè)結(jié)構(gòu)變量的將占用多少內(nèi)存呢 是所有成員變量的內(nèi)存總和嗎 事實(shí)上 所有數(shù)據(jù)類型在內(nèi)存中都是從偶數(shù)地址開始存放的 且結(jié)構(gòu)所占的實(shí)際空間一般是按照機(jī)器字長對(duì)齊的不同的編譯器 不同的平臺(tái) 對(duì)齊方式會(huì)有變化 不過一般的編譯器都可以設(shè)定按照多大對(duì)齊我們可以用sizeof來獲得結(jié)構(gòu)的大小 2020 3 14 NEUQ計(jì)算機(jī)興趣小組專用教案 17 結(jié)構(gòu)體指針 structpoint intx inty structpointpt 定義結(jié)構(gòu)體變量 structpoint ppt 定義結(jié)構(gòu)體指針 ppt 指向運(yùn)算符 第二種更常用 2020 3 14 NEUQ計(jì)算機(jī)興趣小組專用教案 18 定義 structSTUDENT intstudentID charstudentName 10 charstudentSex 4 structdatetimeOfEnter intscoreComputer intscoreEnglish intscoreMath intscoreMusic structSTUDENTstu 30 結(jié)構(gòu)體數(shù)組 2020 3 14 NEUQ計(jì)算機(jī)興趣小組專用教案 19 structSTUDENT intstudentID charstudentName 10 charstudentSex 4 structdatetimeOfEnter intscoreComputer intscoreEnglish intscoreMath intscoreMusic structSTUDENTstu 30 1 令狐沖 男 1999 12 20 90 83 72 82 2 林平之 男 1999 07 06 78 92 88 78 3 岳靈珊 女 1999 07 06 89 72 98 66 4 任瑩瑩 女 1999 07 06 78 95 87 90 初始化 結(jié)構(gòu)體數(shù)組 2020 3 14 NEUQ計(jì)算機(jī)興趣小組專用教案 20 結(jié)構(gòu)體數(shù)組的指針 structSTUDENT pt pt stu stu 0 stu 1 stu 2 pt pt stu 3 2020 3 14 NEUQ計(jì)算機(jī)興趣小組專用教案 21 for pt stu ptscoreComputer sum 1 sum 1 pt scoreEnglish sum 2 sum 2 pt scoreMath sum 3 sum 3 pt scoreMusic for i 0 i 4 i average i sum i 4 printf 20s 4 2f n name i average i 例8 2 利用指向結(jié)構(gòu)體數(shù)組的指針計(jì)算學(xué)生各科的平均成績 2020 3 14 NEUQ計(jì)算機(jī)興趣小組專用教案 22 例8 2 main structSTUDENT pt floatsum 4 0 0 average 4 0 0 inti char name scoreofComputer scoreofEnglish scoreofMath scoreofMusic pt stu pt指向結(jié)構(gòu)體數(shù)組的第一個(gè)元素 for pt stu ptscoreComputer sum 1 sum 1 pt scoreEnglish sum 2 sum 2 pt scoreMath sum 3 sum 3 pt scoreMusic for i 0 i 4 i average i sum i 4 printf 20s 4 2f n name i average i 2020 3 14 NEUQ計(jì)算機(jī)興趣小組專用教案 23 例8 1 洗牌和發(fā)牌模擬 一付撲克有52張牌 分為4種花色 Suit 黑桃 Spades 紅桃 Hearts 草花 Clubs 方塊 Diamonds 每種花色有13張牌面 Face A 2 3 4 5 6 7 8 9 10 Jack Queen King設(shè)計(jì)一個(gè)結(jié)構(gòu)體表示一張牌 由兩個(gè)成分組成 花色 牌面 structCARD charsuit 10 charface 10 structCARDcard 52 順序存放撲克牌 intresult 52 存放洗牌發(fā)牌結(jié)果 char suit Spades Hearts Clubs Diamonds char face A 2 3 4 5 6 7 8 9 10 jack Queen King 2020 3 14 NEUQ計(jì)算機(jī)興趣小組專用教案 24 例8 1 洗牌和發(fā)牌模擬 發(fā)牌過程將52張牌按照隨機(jī)的順序存放算法步驟 產(chǎn)生0 51的隨機(jī)數(shù) 將其放于result i 內(nèi) i i 1如果i 51 則重復(fù)第2步 否則 結(jié)束循環(huán)輸出結(jié)果存在一個(gè)致命的問題 在重復(fù)第2步時(shí) 產(chǎn)生的隨機(jī)數(shù)可能與以前產(chǎn)生的隨機(jī)數(shù)相同 相同意味著52張牌中出現(xiàn)2張以上相同的牌 2020 3 14 NEUQ計(jì)算機(jī)興趣小組專用教案 25 例8 1 洗牌和發(fā)牌模擬 解決方法增加一步 判斷新產(chǎn)生的隨機(jī)數(shù)以前是否出現(xiàn)過如果出現(xiàn)過 則放棄 如果以前未出現(xiàn)過 則保留算法步驟 產(chǎn)生0 51的隨機(jī)數(shù)m 將其放于result i 內(nèi) 判斷result i 在以前 result 0 result i 1 是否出現(xiàn)過 如果出現(xiàn)過 則回到第2步 如果沒出現(xiàn)過 則i i 1如果i 51 則重復(fù)第2 3步 否則 結(jié)束循環(huán)輸出結(jié)果 2020 3 14 NEUQ計(jì)算機(jī)興趣小組專用教案 26 例8 1 洗牌和發(fā)牌模擬 算法缺陷 隨著隨機(jī)數(shù)數(shù)量的增加 新的隨機(jī)數(shù)與已經(jīng)產(chǎn)生的隨機(jī)數(shù)相同的可能性越來越大 有可能出現(xiàn)算法延遲問題高效算法將按照花色與牌面的順序存放的牌 card i 隨機(jī)打亂每次循環(huán) 程序選擇一個(gè)0 51的隨機(jī)數(shù)j 然后將數(shù)組中當(dāng)前的CARD結(jié)構(gòu)card i 與隨機(jī)選出的j所在的數(shù)組元素card j 結(jié)構(gòu)進(jìn)行交換 2020 3 14 NEUQ計(jì)算機(jī)興趣小組專用教案 27 例8 1 洗牌和發(fā)牌模擬 P313 用結(jié)構(gòu)體數(shù)組做函數(shù)參數(shù) 函數(shù)功能 將52張牌按黑桃 紅桃 草花 方塊花色順序 面值按A K的順序排列函數(shù)參數(shù) 結(jié)構(gòu)體數(shù)組wCard 表示不同花色和面值的52張牌指針變量wFace 表示指向面值字符串?dāng)?shù)組face 的指針指針變量wSuit 表示指向花色字符串?dāng)?shù)組suit 的指針函數(shù)返回值 無 voidFillCard structCARDwCard char wFace char wSuit inti for i 0 i 52 i strcpy wCard i suit wSuit i 13 strcpy wCard i face wFace i 13 2020 3 14 NEUQ計(jì)算機(jī)興趣小組專用教案 28 用結(jié)構(gòu)體指針做函數(shù)參數(shù) 函數(shù)功能 將52張牌的順序打亂 函數(shù)參數(shù) 結(jié)構(gòu)體數(shù)組變量wCard 表示52張牌函數(shù)返回值 無 voidShuffle structCARD wCard inti j structcardtemp for i 0 i 52 i j rand 52 j random 52 TC的庫函數(shù) temp wCard i wCard i wCard j wCard j temp 洗牌過程 例8 1 洗牌和發(fā)牌模擬 P313 2020 3 14 NEUQ計(jì)算機(jī)興趣小組專用教案 29 用結(jié)構(gòu)體指針做函數(shù)參數(shù) 函數(shù)功能 輸出發(fā)牌結(jié)果函數(shù)參數(shù) 結(jié)構(gòu)體數(shù)組變量wCard 表示有52張牌函數(shù)返回值 無 voidDeal structCARD wCard inti for i 0 i 52 i 輸出發(fā)牌結(jié)果 printf 10s 10s n wCard i suit wCard i face 例8 1 洗牌和發(fā)牌模擬 P313 2020 3 14 NEUQ計(jì)算機(jī)興趣小組專用教案 30 結(jié)構(gòu)體與函數(shù) 向函數(shù)傳遞結(jié)構(gòu)體的單個(gè)成員單向值傳遞 函數(shù)內(nèi)對(duì)結(jié)構(gòu)內(nèi)容的修改不影響原結(jié)構(gòu)向函數(shù)傳遞結(jié)構(gòu)體的完整結(jié)構(gòu)單向值傳遞 函數(shù)內(nèi)對(duì)結(jié)構(gòu)內(nèi)容的修改不影響原結(jié)構(gòu) 開銷大向函數(shù)傳遞結(jié)構(gòu)體的首地址用結(jié)構(gòu)體數(shù)組或者結(jié)構(gòu)體指針做函數(shù)參數(shù)除提高效率外 還可以修改結(jié)構(gòu)體指針?biāo)赶虻慕Y(jié)構(gòu)體的內(nèi)容 2020 3 14 NEUQ計(jì)算機(jī)興趣小組專用教案 31 思考 下面的結(jié)構(gòu)什么意思 structtemp intdata structtemppt TC下的錯(cuò)誤提示 Undefinedstructure temp StructuresizetoolargeVC下的錯(cuò)誤提示 pt usesundefinedstruct temp 下面的的呢 structtemp intdata structtemp pt 2020 3 14 NEUQ計(jì)算機(jī)興趣小組專用教案 32 動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu) 結(jié)構(gòu)體聲明時(shí)不能包含自我 但可以包含指向本結(jié)構(gòu)體類型的指針變量鏈表 Linkedtable structLink intdata structLink next 2020 3 14 NEUQ計(jì)算機(jī)興趣小組專用教案 33 位字段 想表達(dá)人的姓名 出生年 月 日 都定義什么類型的成員變量 structperson charname 12 intyear charmonth charday 這樣有很多的空間浪費(fèi) 比如month只可能取值1 12 4bits足夠 2020 3 14 34 位字段 structperson charname 12 unsignedintyear 12 unsignedintmonth 4 unsignedintday 5 調(diào)整成員順序可以讓結(jié)構(gòu)更緊湊每個(gè)位段都可以當(dāng)作一個(gè)無符號(hào)整型數(shù)使用表達(dá)范圍當(dāng)然受限 而且當(dāng)然不能取地址 2020 3 14 NEUQ計(jì)算機(jī)興趣小組專用教案 35 共用體 或稱為聯(lián)合 Union unionnumber shortx charch floaty 基本上和struct一樣x ch和y處于同
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 配合過戶補(bǔ)償協(xié)議書范本
- 《課堂的智慧交鋒》課件
- 五四青年團(tuán)日活動(dòng)策劃方案
- 物業(yè)代繳協(xié)議書
- 軟件無償借用合同協(xié)議
- 道路黑化工程合同協(xié)議
- 農(nóng)村生態(tài)環(huán)境保護(hù)與農(nóng)業(yè)發(fā)展協(xié)同協(xié)議
- 車隊(duì)用工協(xié)議書范本
- 瀝青環(huán)保協(xié)議書
- 無權(quán)處分協(xié)議書
- 維修手冊(cè)震旦218現(xiàn)場
- 畫法幾何與陰影透視復(fù)習(xí)題(DOC)
- 螺旋密封的設(shè)計(jì)及在流體機(jī)械中的應(yīng)用
- 青島市失業(yè)人員登記表
- 《中國好聲音》全國校園海選招商方案(冠名)
- 單片機(jī)端口擴(kuò)展的方法
- 安全隱患自查自糾及整改臺(tái)賬
- 廣西安全文明施工費(fèi)使用管理細(xì)則桂建質(zhì)新版
- 存貨質(zhì)押貸款業(yè)務(wù)管理規(guī)定
- 撒哈拉以南非洲
- 公路路面基層施工技術(shù)規(guī)范JTJ034-93條文說明
評(píng)論
0/150
提交評(píng)論