已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Ch8結構體與共用體 C語言快速培訓教案 2020 3 14 NEUQ計算機興趣小組專用教案 2 本章內容 結構體 結構structure 共用體 聯(lián)合union 類型的定義結構體變量 結構體數(shù)組結構體變量 結構體數(shù)組與指針 函數(shù)的關系用結構體實現(xiàn)動態(tài)數(shù)據(jù)結構鏈表的概念及操作原理 2020 3 14 NEUQ計算機興趣小組專用教案 3 從基本數(shù)據(jù)類型到抽象數(shù)據(jù)類型 二進制數(shù)在早期的機器指令及匯編語言中 數(shù)據(jù)對象均用二進制數(shù)表示 沒有類型的概念 基本數(shù)據(jù)類型在高級語言中引入了基本數(shù)據(jù)類型 整型 實型 字符型等基本數(shù)據(jù)類型不能方便的解決所有問題 有些語言 如PL 1 中試圖規(guī)定較多的類型 如數(shù)組 樹 棧等 但實踐證明不是個好辦法 用戶自己構造數(shù)據(jù)類型 復合數(shù)據(jù)類型表示復雜的數(shù)據(jù)對象 典型的代表就是 結構體 數(shù)組 指針也可算作此類 抽象數(shù)據(jù)類型 AbstractDataType 簡稱ADT 在復合數(shù)據(jù)類型基礎上增加了對數(shù)據(jù)的操作類 跨時代的進步例如汽車就是一種ADT 2020 3 14 NEUQ計算機興趣小組專用教案 4 思考一個問題 在程序里表示一個人 姓名 年齡 性別 怎么表示 想表示多個人呢 如何用計算機程序實現(xiàn)下述表格的管理 表8 1某學校學生成績管理表 2020 3 14 NEUQ計算機興趣小組專用教案 5 數(shù)組的解決方法 intstudentId 30 最多可以管理30個學生 每個學生的學號用數(shù)組的下標表示 charstudentName 10 30 charstudentSex 2 30 inttimeOfEnter 30 入學時間用int表示 intscoreComputer 30 計算機原理課的成績 intscoreEnglish 30 英語課的成績 intscoreMath 30 數(shù)學課的成績 intscoreMusic 30 音樂課的成績 2020 3 14 NEUQ計算機興趣小組專用教案 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計算機興趣小組專用教案 7 數(shù)組的解決方法 數(shù)據(jù)的內存管理方式 2020 3 14 NEUQ計算機興趣小組專用教案 8 數(shù)組的解決方法 分配內存不集中 尋址效率不高對數(shù)組進行賦初值時 容易發(fā)生錯位結構顯得比較零散 不容易管理 2020 3 14 NEUQ計算機興趣小組專用教案 9 希望的內存分配圖 2020 3 14 NEUQ計算機興趣小組專用教案 10 結構體的解決方法 structSTUDENT intstudentID 每個學生的序號 charstudentName 10 每個學生的姓名 charstudentSex 4 每個學生的性別 inttimeOfEnter 每個學生的入學時間 intscoreComputer 每個學生的計算機原理成績 intscoreEnglish 每個學生的英語成績 intscoreMath 每個學生的數(shù)學成績 intscoreMusic 每個學生的音樂成績 structSTUDENT是一個類型structSTUDENTstudents 4 students 0 studentNamestudents 0 Sex它們都是變量 一般稱為結構的成員變量 2020 3 14 NEUQ計算機興趣小組專用教案 11 用戶自定義的數(shù)據(jù)類型 結構體 把關系緊密且邏輯相關的多種不同類型的變量組織到統(tǒng)一的名字之下 也稱復合數(shù)據(jù)類型這種類型的變量占用相鄰的一段內存單元共用體 把情形互斥但又邏輯相關的多種不同類型的變量組織在一起這種類型的變量占用同一段內存單元 因此每一時刻只有一個數(shù)據(jù)起作用 2020 3 14 NEUQ計算機興趣小組專用教案 12 structstudent intnum charname 20 charsex intage floatscore charaddr 30 structuredefinition形成一個樣板 用于生成結構體變量 一般形式 struct結構體名 類型關鍵字成員名1 類型關鍵字成員名2 類型關鍵字成員名n 構成結構體的變量稱為結構體的成員 member 也稱元素 element 或域 filed 結構體的定義只定義了數(shù)據(jù)的形式 即聲明了一種復雜的數(shù)據(jù)類型 并未生成任何變量 結構體的定義 2020 3 14 NEUQ計算機興趣小組專用教案 13 先定義結構體類型再定義變量名 在定義類型的同時定義變量 直接定義結構體變量 不出現(xiàn)結構體名 structstudentstudent1 student2 structstudent intnum charname 20 charsex intage floatscore charaddr 30 student1 student2 struct intnum charname 20 charsex intage floatscore charaddr 30 student1 student2 結構體變量的定義 2020 3 14 NEUQ計算機興趣小組專用教案 14 結構體變量的定義 用typedef為已存在的類型定義新名字structstudent intnum charname 20 charsex intage floatscore charaddr 30 typedefstructstudentSTUD STUDstudent1 student2 用STUD代替structstudent類型 2020 3 14 NEUQ計算機興趣小組專用教案 15 結構體定義可以嵌套 structdate intmonth intday intyear typedefstructdateDATE structstudent intnum charname 20 charsex intage DATEbirthday charaddr 30 student1 student2 structstudent占用內存字節(jié)數(shù) double占用內存字節(jié)數(shù) 8 結構體變量的定義 2020 3 14 NEUQ計算機興趣小組專用教案 16 結構 Structure 的內存占用 一個結構變量的成員變量在內存中是相鄰的整個結構變量的將占用多少內存呢 是所有成員變量的內存總和嗎 事實上 所有數(shù)據(jù)類型在內存中都是從偶數(shù)地址開始存放的 且結構所占的實際空間一般是按照機器字長對齊的不同的編譯器 不同的平臺 對齊方式會有變化 不過一般的編譯器都可以設定按照多大對齊我們可以用sizeof來獲得結構的大小 2020 3 14 NEUQ計算機興趣小組專用教案 17 結構體指針 structpoint intx inty structpointpt 定義結構體變量 structpoint ppt 定義結構體指針 ppt 指向運算符 第二種更常用 2020 3 14 NEUQ計算機興趣小組專用教案 18 定義 structSTUDENT intstudentID charstudentName 10 charstudentSex 4 structdatetimeOfEnter intscoreComputer intscoreEnglish intscoreMath intscoreMusic structSTUDENTstu 30 結構體數(shù)組 2020 3 14 NEUQ計算機興趣小組專用教案 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 初始化 結構體數(shù)組 2020 3 14 NEUQ計算機興趣小組專用教案 20 結構體數(shù)組的指針 structSTUDENT pt pt stu stu 0 stu 1 stu 2 pt pt stu 3 2020 3 14 NEUQ計算機興趣小組專用教案 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 利用指向結構體數(shù)組的指針計算學生各科的平均成績 2020 3 14 NEUQ計算機興趣小組專用教案 22 例8 2 main structSTUDENT pt floatsum 4 0 0 average 4 0 0 inti char name scoreofComputer scoreofEnglish scoreofMath scoreofMusic pt stu pt指向結構體數(shù)組的第一個元素 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計算機興趣小組專用教案 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設計一個結構體表示一張牌 由兩個成分組成 花色 牌面 structCARD charsuit 10 charface 10 structCARDcard 52 順序存放撲克牌 intresult 52 存放洗牌發(fā)牌結果 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計算機興趣小組專用教案 24 例8 1 洗牌和發(fā)牌模擬 發(fā)牌過程將52張牌按照隨機的順序存放算法步驟 產(chǎn)生0 51的隨機數(shù) 將其放于result i 內 i i 1如果i 51 則重復第2步 否則 結束循環(huán)輸出結果存在一個致命的問題 在重復第2步時 產(chǎn)生的隨機數(shù)可能與以前產(chǎn)生的隨機數(shù)相同 相同意味著52張牌中出現(xiàn)2張以上相同的牌 2020 3 14 NEUQ計算機興趣小組專用教案 25 例8 1 洗牌和發(fā)牌模擬 解決方法增加一步 判斷新產(chǎn)生的隨機數(shù)以前是否出現(xiàn)過如果出現(xiàn)過 則放棄 如果以前未出現(xiàn)過 則保留算法步驟 產(chǎn)生0 51的隨機數(shù)m 將其放于result i 內 判斷result i 在以前 result 0 result i 1 是否出現(xiàn)過 如果出現(xiàn)過 則回到第2步 如果沒出現(xiàn)過 則i i 1如果i 51 則重復第2 3步 否則 結束循環(huán)輸出結果 2020 3 14 NEUQ計算機興趣小組專用教案 26 例8 1 洗牌和發(fā)牌模擬 算法缺陷 隨著隨機數(shù)數(shù)量的增加 新的隨機數(shù)與已經(jīng)產(chǎn)生的隨機數(shù)相同的可能性越來越大 有可能出現(xiàn)算法延遲問題高效算法將按照花色與牌面的順序存放的牌 card i 隨機打亂每次循環(huán) 程序選擇一個0 51的隨機數(shù)j 然后將數(shù)組中當前的CARD結構card i 與隨機選出的j所在的數(shù)組元素card j 結構進行交換 2020 3 14 NEUQ計算機興趣小組專用教案 27 例8 1 洗牌和發(fā)牌模擬 P313 用結構體數(shù)組做函數(shù)參數(shù) 函數(shù)功能 將52張牌按黑桃 紅桃 草花 方塊花色順序 面值按A K的順序排列函數(shù)參數(shù) 結構體數(shù)組wCard 表示不同花色和面值的52張牌指針變量wFace 表示指向面值字符串數(shù)組face 的指針指針變量wSuit 表示指向花色字符串數(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計算機興趣小組專用教案 28 用結構體指針做函數(shù)參數(shù) 函數(shù)功能 將52張牌的順序打亂 函數(shù)參數(shù) 結構體數(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計算機興趣小組專用教案 29 用結構體指針做函數(shù)參數(shù) 函數(shù)功能 輸出發(fā)牌結果函數(shù)參數(shù) 結構體數(shù)組變量wCard 表示有52張牌函數(shù)返回值 無 voidDeal structCARD wCard inti for i 0 i 52 i 輸出發(fā)牌結果 printf 10s 10s n wCard i suit wCard i face 例8 1 洗牌和發(fā)牌模擬 P313 2020 3 14 NEUQ計算機興趣小組專用教案 30 結構體與函數(shù) 向函數(shù)傳遞結構體的單個成員單向值傳遞 函數(shù)內對結構內容的修改不影響原結構向函數(shù)傳遞結構體的完整結構單向值傳遞 函數(shù)內對結構內容的修改不影響原結構 開銷大向函數(shù)傳遞結構體的首地址用結構體數(shù)組或者結構體指針做函數(shù)參數(shù)除提高效率外 還可以修改結構體指針所指向的結構體的內容 2020 3 14 NEUQ計算機興趣小組專用教案 31 思考 下面的結構什么意思 structtemp intdata structtemppt TC下的錯誤提示 Undefinedstructure temp StructuresizetoolargeVC下的錯誤提示 pt usesundefinedstruct temp 下面的的呢 structtemp intdata structtemp pt 2020 3 14 NEUQ計算機興趣小組專用教案 32 動態(tài)數(shù)據(jù)結構 結構體聲明時不能包含自我 但可以包含指向本結構體類型的指針變量鏈表 Linkedtable structLink intdata structLink next 2020 3 14 NEUQ計算機興趣小組專用教案 33 位字段 想表達人的姓名 出生年 月 日 都定義什么類型的成員變量 structperson charname 12 intyear charmonth charday 這樣有很多的空間浪費 比如month只可能取值1 12 4bits足夠 2020 3 14 34 位字段 structperson charname 12 unsignedintyear 12 unsignedintmonth 4 unsignedintday 5 調整成員順序可以讓結構更緊湊每個位段都可以當作一個無符號整型數(shù)使用表達范圍當然受限 而且當然不能取地址 2020 3 14 NEUQ計算機興趣小組專用教案 35 共用體 或稱為聯(lián)合 Union unionnumber shortx charch floaty 基本上和struct一樣x ch和y處于同
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度電子信息產(chǎn)品OEM組裝與質量控制合同2篇
- 二零二五年度高性能電動機研發(fā)生產(chǎn)銷售合同3篇
- 2025房地產(chǎn)預售買賣合同2
- 二零二五年文化藝術節(jié)VI設計合同
- 二零二五年度員工績效考核及獎金發(fā)放合同3篇
- 2025關于體育館租賃合同模板
- 隧道施工安全協(xié)議
- 二零二五年度知識產(chǎn)權合同管理主要措施與創(chuàng)新成果保護3篇
- 鋼結構勞務承包合同協(xié)議書范本
- 2025關于咨詢服務合同書
- 園區(qū)招商引資方案提成方案
- 《爆破振動測試技術》課件
- 醫(yī)療機構規(guī)章制度目錄
- 中國地圖素材課件
- 中藥學知識歸納總結
- 彎道超車就趁寒假!-寒假指引主題班會課件
- 腸梗阻小講課
- 電子表格表格會計記賬憑證模板
- 某酒店散客預訂單
- GB/T 43269-2023信息安全技術網(wǎng)絡安全應急能力評估準則
- 天壇西班牙語導游詞
評論
0/150
提交評論