C基礎知識復習2.ppt_第1頁
C基礎知識復習2.ppt_第2頁
C基礎知識復習2.ppt_第3頁
C基礎知識復習2.ppt_第4頁
C基礎知識復習2.ppt_第5頁
已閱讀5頁,還剩26頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

數據結構 主講 魯法明fm lu 課程相關 計算機學科核心課程多編程 手寫 多調試 上機 學時 上課 課程設計上機 332實驗室 周五4 00 6 00 作業(yè) 手寫 上機調試 分析 多思考多比較 本章要點 補充 C基礎回顧 C程序概述基本語法 數據類型運算符控制結構函數 C指針與鏈表 include define typedefintScoreType 返回值類型函數名1 參數表 函數功能及返回值說明 變量定義與函數聲明執(zhí)行語句組 voidmain 函數次序不定 子函數聲明與變量定義執(zhí)行語句組 返回值類型函數名n 參數表 變量定義與函數聲明執(zhí)行語句組 1 C程序概述 函數 分為main函數 庫函數 自定義函數 函數包括函數頭和函數體兩部分 函數頭分返回值類型 函數名和參數列表 函數體包括聲明部分和執(zhí)行部分 聲明部分包括變量定義和函數的聲明 執(zhí)行部分包括各類語句 輸入輸出語句 賦值語句 結構控制語句和函數調用語句 語句以分號結束問 程序入口 出口 補充 換行縮進對齊注釋命名 含義 規(guī)范 變量 函數 符號常量 2 基本語法 數據類型 2 基本語法 運算符 2 基本語法 控制結構 2 基本語法 函數 參數傳遞 值傳遞 2 基本語法 函數 參數傳遞 引用傳遞 3 指針與鏈表 譚浩強 C程序設計 第3版 第十章指針 基本概念指針的定義及用法指針在數組訪問中的應用指針與動態(tài)存儲分配利用指針創(chuàng)建和操作鏈表 內存區(qū)的每一個字節(jié)有一個編號 該編號稱為內存單元的地址或指針 若在程序中定義一個變量 在運行時會為其分配若干內存單元 其中第一個存儲單元的編號稱為該變量的地址或指針 inti shortj k scanf d d short p shortj k p 地址指針變量的地址指針變量 某些變量專門用以存放別的變量的地址 稱這類變量為指針變量 該類變量的類型稱為指針類型 i 01234567 i j k i 012345678 j p k 00000000000000000000000000000011 00000000000000000000000000000001 p 定義格式 基類型 指針變量名如 shortj short p p 1 通過指針對變量進行讀寫時如何知道需要讀寫的字節(jié)數 在定義指針變量時必須指定基類型 且變量的類型和指針的基類型要一致 2 指針類型與整數類型不同 只能將變量的地址賦給一個指針變量 而不能將一個常數賦給一個指針變量 零除外 指針值為0意味著沒指向任何變量 指針變量的加1或減1實際移動sizeof 基類型 3 在定義變量時使用 表示所定義變量是指針類型 在普通語句中使用 表示 取內容或取指針變量所指向存儲單元的值 如inti 5 int p p 指針變量的定義與用法 i 234567 j p 00000000000000000000000000000010 p C語言中 一維數組對應一個連續(xù)存儲空間 數組名是值為首地址的指針常量 其基類型就是數組元素類型 指向首元素 可通過數組名用下標法訪問數組元素 也可將該指針常量值賦值給一個同類型的指針變量 進而借助該指針變量用指針法訪問數組元素 指針法訪問數組 如 inta 10 int p p a 也可用int p 說明 指針加1或減1則指針指向的單元移動并非1 而是根據基類型所占字節(jié)數移動 指針法速度比下標法快 回顧 C程序結構與代碼及命名規(guī)范自定義類型typedefstructStudent Student typedefintStatus typedefintElemType 循環(huán)結構i 69 while i 0 動態(tài)存儲分配函數 includevoid malloc unsignedsize 開辟成功返回空間首地址 基類型暫定為void 用時進行強制類型轉換 失敗返0 exitvoidfree void p 銷毀從p所指地址開始的一次性開辟的存儲空間 注意釋放的含義及p的值不變基類型為int的指針類型變量可以當作基類型int的動態(tài)數組名用typedefint DynamicArrayOfInt DynamicArrayOfInta typedefintStaticArrayOfInt 10 StaticArrayOfInta 指針與動態(tài)存儲分配 靜態(tài)數組 defineN10voidmain inta 10 a為指針常量for inti 0 i N i scanf d 動態(tài)數組 voidmain int a p 與左側a的異同 a與p異同intn scanf d 學生表的順序存儲及創(chuàng)建 輸出 增刪改查操作 include include malloc和realoc及free include 異常退出函數exit defineOK1 defineERROR0 defineOVERFLOW 1typedefstructStudent intstuID charname 20 Student typedefStudent StudentList 學生表類型 實為學生數組類型 動態(tài)typedefintStatus StatusInputStu Student s StatusStuListCreate StudentList L intn 創(chuàng)建含n個學生的表 成功返回OK 并用L帶回首址 創(chuàng)建失敗返回ERROR 思路 開辟數組 循環(huán)n次 每次輸入一個學生信息 注意邊界情況的處理 n非法 內存溢出 StatusOutputStu Students voidStuListPrint StudentListL intn 學生表含n個學生 輸出表信息 思路 循環(huán)n次 每次輸出一個學生信息 StatusStuListDelete StudentListL int 注意 數組首地址和表長應該封裝到一起 如何改進 作業(yè)1 成績表順序存儲及相關操作 仿課件例程 自定義類型Score為 結構體類型 學生名 課程名 分數 自定義類型ElemType為 Score自定義類型SqList為包含如下兩個成員的結構體類型 基類型為ElemType的動態(tài)數組elem intlength 實現(xiàn)如下針對SqList的函數 功能設計見下兩頁 InputScoOutputScoInputElemOutputElemListCreate SqListPrint SqListDelete Sq編寫主函數對上述函數進行測試a完整的可運行的程序 注意編碼規(guī)范和注釋b體會與學生表代碼結構的異同不管具體的ElemType是什么 只要元素之間形成一種表的結構 就可以用SqList來定義 用SqList的相關操作來實現(xiàn) 使代碼獨立性更強 可重用性更強 include include include defineOK1 defineERROR0 defineOVERFLOW 1typedefstructScore charstuName 20 charcourseName 20 floatscore Score typedefScoreElemType typedefstruct ElemType elem intlength SqList 學生表類型typedefintStatus StatusInputSco Score StatusListCreate Sq SqList L intn 創(chuàng)建含n個元素的順序表 成功返回OK 并用L帶回該表 創(chuàng)建失敗返回ERROR 思路 開辟數組 循環(huán)n次 每次輸入一個元素信息 注意邊界情況的處理 n非法 內存溢出voidListPrint L SqListL 輸出表信息 思路 循環(huán)n次 每次輸出一個元素信息 調用OutputElem和OutputSco哪個好 StatusSqListDelete SqListL inti ElemType s 刪除第i個位置的的元素并帶回 成功返回OK 失敗返回ERROR 思路 備份原表中第i個元素 第i 1至n個記錄依次前移 回顧 靜態(tài)數組與動態(tài)數組inta 10 int b typedefintStaticArrayOfInt 10 StaticArrayOfInta typedefint DynamicArrayOfInt DynamicArrayOfIntb 動態(tài)數組名與指針變量名shorti p a p 表的存儲和基本操作實現(xiàn)步驟 分析存儲方案 類型定義 操作定義 實現(xiàn)抽象的好處 孫承愛 程序設計基礎 基于C語言 鏈表 引言 數組元素依次存儲在一片連續(xù)的內存單元中 好處是可根據首地址 數組名 和下標隨機訪問數組元素 簡單易讀 壞處是有兩方面 其一 個數不確定時需定義一個最大長度 其二 向數組增加或刪除一個數據時 通常需要移動大量元素 鏈表 一種動態(tài)地進行存儲分配的數據結構 不需要事先確定最大長度 在插入或者刪除一個元素時也不會引起大量數據的移動 但壞處是只能順序訪問 操作相對麻煩要求 掌握鏈表的基本結構 結構定義與鏈表的創(chuàng)建與輸出 head 鏈表結構 結構 頭指針 首元 結點 尾 結點 中間結點 頭指針head指向鏈表第一個結點 每個結點包括兩部分 一部分是用戶需要用的實際數據 稱為數據域 另一部分是下一個結點的地址 稱為指針域 首結點與中間結點的指針域指向后繼結點 尾結點的指針域存放空地址 常寫為NULL 值為0的符號常量 需先定義 說明 1 鏈表中各節(jié)點在內存中存儲單元通常不連續(xù) 且大小無序 2 頭指針至關重要 可標識或者代表整個單鏈表 3 為操作方便 通常在 首元結點 前附設一個 頭結點 該結點數據域的值不用 指針指向首元結點 頭指針指向頭結點 4 聲明鏈表就是要聲明一個基類型為結點類型的頭指針 1249 元素類型定義typedefcharElemType 處理學生鏈表只改此句即可 鏈表定義 typedefstructLNode ElemTypedata 數據域structLNode next 指針域 LNode LinkList LNodenode1 node2 LinkListLa Lb structLNode 單鏈表結點結構定義chardata 數據域structLNode next 指針域 StrcutLNodenode1 node2 定義兩結點 靜態(tài)開辟結點空間structLNode L 定義一個指針 可作鏈表的頭指針用 typedefstructLNodeLNode typedefstructLNode LinkList LNodenode1 node2 LinkListLa Lb 鏈表定義 node1 La 鏈表的創(chuàng)建 創(chuàng)建帶頭結點的含指定個數元素的鏈表 StatusListCreate L LinkList 或用r r next 新結點指針值不賦空會如何 算法思路 開辟頭結點 設一指針指向表尾節(jié)點 之后循環(huán)n次 每次開辟一個新結點 輸入數據域值后拼接到表尾節(jié)點的后面 表尾節(jié)點后移 鏈表的輸出 voidListPrint L LinkListL 輸出帶頭結點的鏈表L各數據元素的值LNode curPtr if L L next printf 空表 curPtr L next while curPtr NULL OutputElem curPtr data curPtr curPtr next 思考 curPtr 算法思路 設指針curPtr指向首元節(jié)點 只要curPtr取值不空 指向的結點存在 輸出curPtr所指結點數據域的值 curPtr后移 鏈表結點的刪除 voidListDelete L LinkListL inti ElemType e 功能及返回值說明 注意帶頭結點 思路 首先定位到第i 1個結點 若發(fā)現(xiàn)不存在第i個節(jié)點則返回錯誤 否則 用e帶回第i個節(jié)點數據值 從鏈表中刪除第i個節(jié)點 作業(yè)2 仿照課件實現(xiàn)成績鏈表相關操作 自定義類型Book為 結構體類型 書號 書名 自定義類型ElemType為 Book 好處 自定義類型LinkList 數據域為ElemType類型的單鏈表實現(xiàn)如下函數ListCreate LListPrint LListDelete L編寫主函數對上述函數進行測試a完整的可運行的程序 注意編碼規(guī)范和注釋b體會與作業(yè)1程序的異同普通的數據表 序列 即可用數組來存儲 也可以用鏈表來存儲 具體依賴于需要進行的操作種類 代碼調試 常見錯誤與斷點調試 intgetMax x y intr if x y r x elser y return r voidmain scanf d d a b 讀入兩整數 分隔符 c getMax a b printf max c n c include inta b c 是否需要進行函數聲明intmax intx inty d 1 變量未定義或函數使用前未聲明 缺少頭文件2 丟分號和4 工作區(qū)問題 cpp與c intint include include include defineOK1 defineERROR0 defineOVERFLOW 1typedefstructStudent charstuName 20

溫馨提示

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

評論

0/150

提交評論