C語言課件(結(jié)構(gòu)體)_第1頁
C語言課件(結(jié)構(gòu)體)_第2頁
C語言課件(結(jié)構(gòu)體)_第3頁
C語言課件(結(jié)構(gòu)體)_第4頁
C語言課件(結(jié)構(gòu)體)_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、結(jié)構(gòu)體結(jié)構(gòu)體結(jié)構(gòu)體的概念結(jié)構(gòu)體的概念結(jié)構(gòu)體類型的定義結(jié)構(gòu)體類型的定義結(jié)構(gòu)體變量結(jié)構(gòu)體變量定義和聲明定義和聲明初始化初始化使用使用結(jié)構(gòu)體作函數(shù)的參數(shù)結(jié)構(gòu)體作函數(shù)的參數(shù)自定義類型自定義類型程序設(shè)計(jì)舉例程序設(shè)計(jì)舉例C C語言程序設(shè)計(jì)語言程序設(shè)計(jì)引例引例問題問題圖書包括書號、作者、出版商、出版日期等屬性。圖書包括書號、作者、出版商、出版日期等屬性。怎么定義數(shù)據(jù)結(jié)構(gòu)?怎么定義數(shù)據(jù)結(jié)構(gòu)?結(jié)構(gòu)體結(jié)構(gòu)體如何表示圖書?如何表示圖書?如何表示多本圖書?如何表示多本圖書?用多個(gè)獨(dú)立的數(shù)據(jù)。用多個(gè)獨(dú)立的數(shù)據(jù)。用多個(gè)并列數(shù)組。用多個(gè)并列數(shù)組。用單個(gè)數(shù)據(jù)。用單個(gè)數(shù)據(jù)。用一個(gè)數(shù)組。用一個(gè)數(shù)組。簡介簡介結(jié)構(gòu)體結(jié)構(gòu)體相關(guān)數(shù)據(jù)的

2、集合。相關(guān)數(shù)據(jù)的集合。數(shù)據(jù)的類型可以不相同。數(shù)據(jù)的類型可以不相同。用來定義保存在文件中的記錄。用來定義保存在文件中的記錄。與指針一起創(chuàng)建動態(tài)的數(shù)據(jù)結(jié)構(gòu):與指針一起創(chuàng)建動態(tài)的數(shù)據(jù)結(jié)構(gòu):鏈表鏈表隊(duì)列隊(duì)列棧棧樹樹結(jié)構(gòu)體結(jié)構(gòu)體結(jié)構(gòu)體類型的定義結(jié)構(gòu)體類型的定義結(jié)構(gòu)體是派生的數(shù)據(jù)類型結(jié)構(gòu)體是派生的數(shù)據(jù)類型使用其他類型的對象來構(gòu)造結(jié)構(gòu)體。使用其他類型的對象來構(gòu)造結(jié)構(gòu)體。結(jié)構(gòu)體定義舉例結(jié)構(gòu)體定義舉例struct:引入結(jié)構(gòu)體定義。:引入結(jié)構(gòu)體定義。card:結(jié)構(gòu)體的名稱,必須與:結(jié)構(gòu)體的名稱,必須與 struct 一起使用。一起使用。struct card 結(jié)構(gòu)體包含兩個(gè)結(jié)構(gòu)體包含兩個(gè) char * 類型的類型

3、的成員成員:facesuit結(jié)構(gòu)體結(jié)構(gòu)體/*表示紙牌表示紙牌*/struct card char *face; char *suit;為程序創(chuàng)建了一個(gè)新的數(shù)據(jù)類型為程序創(chuàng)建了一個(gè)新的數(shù)據(jù)類型struct card結(jié)構(gòu)體類型的定義結(jié)構(gòu)體類型的定義結(jié)構(gòu)體定義說明結(jié)構(gòu)體定義說明同一個(gè)結(jié)構(gòu)體內(nèi)不可以有同名的成員。同一個(gè)結(jié)構(gòu)體內(nèi)不可以有同名的成員。不同結(jié)構(gòu)體的成員名可以相同,不互相沖突。不同結(jié)構(gòu)體的成員名可以相同,不互相沖突。結(jié)構(gòu)體結(jié)構(gòu)體struct date int year,month,day; ;struct Book char title50,writer20,publisher50; int

4、year,month;int year,month,day;結(jié)構(gòu)體類型的定義結(jié)構(gòu)體類型的定義結(jié)構(gòu)體定義說明結(jié)構(gòu)體定義說明結(jié)構(gòu)體的成員可以是基本類型和構(gòu)造類型(數(shù)組和其他結(jié)結(jié)構(gòu)體的成員可以是基本類型和構(gòu)造類型(數(shù)組和其他結(jié)構(gòu)體)。構(gòu)體)。結(jié)構(gòu)體結(jié)構(gòu)體struct date int year,month,day;struct StuRec int num; char name20; struct date birthday;結(jié)構(gòu)體類型的定義結(jié)構(gòu)體類型的定義結(jié)構(gòu)體定義說明結(jié)構(gòu)體定義說明結(jié)構(gòu)體不能包含自身的實(shí)例。結(jié)構(gòu)體不能包含自身的實(shí)例。但可以包含指向自身的指針。但可以包含指向自身的指針。結(jié)構(gòu)體結(jié)構(gòu)體

5、struct student char name20; char gender; float scores4; struct student next;/*error*/ struct student *nextPtr; /*correct*/;結(jié)構(gòu)體變量結(jié)構(gòu)體變量結(jié)構(gòu)體定義說明結(jié)構(gòu)體定義說明只是創(chuàng)建了新的數(shù)據(jù)類型,并不能保留內(nèi)存空間。只是創(chuàng)建了新的數(shù)據(jù)類型,并不能保留內(nèi)存空間。必須定義結(jié)構(gòu)體變量來獲得內(nèi)存空間。必須定義結(jié)構(gòu)體變量來獲得內(nèi)存空間。定義聲明結(jié)構(gòu)體變量定義聲明結(jié)構(gòu)體變量定義結(jié)構(gòu)體類型后,像聲明普通變量一樣聲明結(jié)構(gòu)體變量。定義結(jié)構(gòu)體類型后,像聲明普通變量一樣聲明結(jié)構(gòu)體變量。結(jié)構(gòu)體結(jié)構(gòu)

6、體struct date int year,month,day;struct date birth;yearmonthdayFF00FF02FF04birthbirth 的存儲形式的存儲形式結(jié)構(gòu)體變量結(jié)構(gòu)體變量定義聲明結(jié)構(gòu)體變量定義聲明結(jié)構(gòu)體變量在定義結(jié)構(gòu)體類型的同時(shí),聲明結(jié)構(gòu)體變量在定義結(jié)構(gòu)體類型的同時(shí),聲明結(jié)構(gòu)體變量直接(只)聲明結(jié)構(gòu)體變量直接(只)聲明結(jié)構(gòu)體變量結(jié)構(gòu)體結(jié)構(gòu)體struct date int year,month,day; birth, days4, *bPtr;struct int year,month,day; birth, days4, *bPtr;沒有結(jié)構(gòu)體名,沒有結(jié)

7、構(gòu)體名,無法再次使用。無法再次使用。結(jié)構(gòu)體的操作結(jié)構(gòu)體的操作在結(jié)構(gòu)體(變量)上可以執(zhí)行的操作在結(jié)構(gòu)體(變量)上可以執(zhí)行的操作將結(jié)構(gòu)體變量賦給相同類型的結(jié)構(gòu)體變量。將結(jié)構(gòu)體變量賦給相同類型的結(jié)構(gòu)體變量。得到結(jié)構(gòu)體變量的地址。得到結(jié)構(gòu)體變量的地址。訪問結(jié)構(gòu)體變量的成員。訪問結(jié)構(gòu)體變量的成員。使用使用 sizeof 確定結(jié)構(gòu)體變量的大小。確定結(jié)構(gòu)體變量的大小。結(jié)構(gòu)體結(jié)構(gòu)體結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體變量的初始化初始化結(jié)構(gòu)體變量初始化結(jié)構(gòu)體變量給全部成員賦初值。給全部成員賦初值。結(jié)構(gòu)體結(jié)構(gòu)體struct StuRec int num; char name20; struct date int year,m

8、onth,day; birthday; float score; student=101, “WangHai”, 1982, 5, 21, 80;num(2B)name(20B)birthday(6B)score(4B)yearmonthday101WangHai198252180.0結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體變量的初始化初始化結(jié)構(gòu)體變量初始化結(jié)構(gòu)體變量給部分成員賦初值。給部分成員賦初值。結(jié)構(gòu)體結(jié)構(gòu)體struct StuRec int num; char name20; struct date int year,month,day; birthday; float score; student=

9、101, “WangHai”;num(2B)name(20B)birthday(6B)score(4B)yearmonthday101WangHai0000.0結(jié)構(gòu)體變量的成員結(jié)構(gòu)體變量的成員訪問結(jié)構(gòu)體成員的兩種方式訪問結(jié)構(gòu)體成員的兩種方式結(jié)構(gòu)體成員運(yùn)算符:結(jié)構(gòu)體成員運(yùn)算符:.用于結(jié)構(gòu)體變量用于結(jié)構(gòu)體變量結(jié)構(gòu)體指針運(yùn)算符:結(jié)構(gòu)體指針運(yùn)算符:-用于指向結(jié)構(gòu)體的指針用于指向結(jié)構(gòu)體的指針等價(jià)于等價(jià)于 (*cardPtr).face結(jié)構(gòu)體結(jié)構(gòu)體struct card myCard;printf(“%s”, myCard.face);struct card *cardPtr;printf(“%s”, c

10、ardPtr-face);struct card char *face; char *suit;案例分析:結(jié)構(gòu)體變量的成員案例分析:結(jié)構(gòu)體變量的成員問題:訪問結(jié)構(gòu)體變量的成員。問題:訪問結(jié)構(gòu)體變量的成員。實(shí)現(xiàn)實(shí)現(xiàn)(cw1301.c)結(jié)構(gòu)體結(jié)構(gòu)體#include struct card char *face; char *suit;void main() struct card a, *aPtr; a.face = Ace; a.suit = Spades; aPtr = &a;與數(shù)組的不同:與數(shù)組的不同:結(jié)構(gòu)變量名不是指針結(jié)構(gòu)變量名不是指針案例分析:結(jié)構(gòu)體變量的成員案例分析:結(jié)構(gòu)體變量

11、的成員問題問題訪問結(jié)構(gòu)體變量的成員。訪問結(jié)構(gòu)體變量的成員。結(jié)構(gòu)體結(jié)構(gòu)體 printf(%s%s%sn%s%s%sn%s%s%sn, a.face, of , a.suit, aPtr-face, of , aPtr-suit, (*aPtr).face, of , (*aPtr).suit);Ace of SpadesAce of SpadesAce of Spades注意:注意:結(jié)構(gòu)不能作為整體輸入輸出。結(jié)構(gòu)不能作為整體輸入輸出。必須逐個(gè)成員輸入輸出。必須逐個(gè)成員輸入輸出。結(jié)構(gòu)體作為函數(shù)的參數(shù)結(jié)構(gòu)體作為函數(shù)的參數(shù)把結(jié)構(gòu)體的單個(gè)成員傳遞給函數(shù)把結(jié)構(gòu)體的單個(gè)成員傳遞給函數(shù)值傳遞。值傳遞。被調(diào)用函

12、數(shù)不能修改調(diào)用函數(shù)中的結(jié)構(gòu)體成員。被調(diào)用函數(shù)不能修改調(diào)用函數(shù)中的結(jié)構(gòu)體成員。把整個(gè)結(jié)構(gòu)體傳遞給函數(shù)把整個(gè)結(jié)構(gòu)體傳遞給函數(shù)值傳遞。值傳遞。被調(diào)用函數(shù)不能修改調(diào)用函數(shù)中的結(jié)構(gòu)體。被調(diào)用函數(shù)不能修改調(diào)用函數(shù)中的結(jié)構(gòu)體。把結(jié)構(gòu)體指針傳遞給函數(shù)把結(jié)構(gòu)體指針傳遞給函數(shù)模擬引用傳遞。模擬引用傳遞。被調(diào)用函數(shù)能修改調(diào)用函數(shù)中的結(jié)構(gòu)體。被調(diào)用函數(shù)能修改調(diào)用函數(shù)中的結(jié)構(gòu)體。結(jié)構(gòu)體結(jié)構(gòu)體案例分析:結(jié)構(gòu)體作為函數(shù)的參數(shù)案例分析:結(jié)構(gòu)體作為函數(shù)的參數(shù)問題:編寫函數(shù)實(shí)現(xiàn)結(jié)構(gòu)體的復(fù)制。問題:編寫函數(shù)實(shí)現(xiàn)結(jié)構(gòu)體的復(fù)制。實(shí)現(xiàn)實(shí)現(xiàn)(cw1302.c)結(jié)構(gòu)體結(jié)構(gòu)體#include struct date int year, mon

13、th, day;void show(char *, struct date);void copy(struct date, struct date);void clone(struct date, struct date *);void main() struct date d1, d2, d3, d4; d1.year = 2004; d1.month = 5; d1.day = 1; show(d1, d1);案例分析:結(jié)構(gòu)體作為函數(shù)的參數(shù)案例分析:結(jié)構(gòu)體作為函數(shù)的參數(shù)源代碼源代碼(續(xù))(續(xù))結(jié)構(gòu)體結(jié)構(gòu)體 d2 = d1; show(d2, d2); copy(d1, d3); show(

14、d3, d3); clone(d1, &d4); show(d4, d4);void show(char *name, struct date d) printf(%s: %d-%d-%dn, name, d.year, d.month, d.day);案例分析:結(jié)構(gòu)體作為函數(shù)的參數(shù)案例分析:結(jié)構(gòu)體作為函數(shù)的參數(shù)源代碼源代碼(續(xù))(續(xù))結(jié)構(gòu)體結(jié)構(gòu)體void copy(struct date s, struct date d) d = s;void clone(struct date s, struct date *dPtr) *dPtr = s;d1: 2004-5-1d2: 2004

15、-5-1d3: 0-0-24d4: 2004-5-1在函數(shù)中使用結(jié)構(gòu)體在函數(shù)中使用結(jié)構(gòu)體把整個(gè)結(jié)構(gòu)體作為單個(gè)數(shù)據(jù)返回把整個(gè)結(jié)構(gòu)體作為單個(gè)數(shù)據(jù)返回因?yàn)榻Y(jié)構(gòu)體變量之間可以賦值。因?yàn)榻Y(jié)構(gòu)體變量之間可以賦值。按值傳遞把數(shù)組傳遞給函數(shù)按值傳遞把數(shù)組傳遞給函數(shù)把數(shù)組作為結(jié)構(gòu)體的成員,然后把結(jié)構(gòu)體傳遞給函數(shù)。把數(shù)組作為結(jié)構(gòu)體的成員,然后把結(jié)構(gòu)體傳遞給函數(shù)。被調(diào)用函數(shù)不能修改調(diào)用函數(shù)中的數(shù)組。被調(diào)用函數(shù)不能修改調(diào)用函數(shù)中的數(shù)組。結(jié)構(gòu)體結(jié)構(gòu)體自定義類型自定義類型typedef為已經(jīng)定義的數(shù)據(jù)類型創(chuàng)建一個(gè)別名。為已經(jīng)定義的數(shù)據(jù)類型創(chuàng)建一個(gè)別名。舉例舉例創(chuàng)建了一個(gè)新的類型名創(chuàng)建了一個(gè)新的類型名 Date ,它是,它

16、是 struct date 的別名。的別名。注意:并沒有創(chuàng)建新的類型。注意:并沒有創(chuàng)建新的類型??梢院喕绦虼a,提高程序的可移植性??梢院喕绦虼a,提高程序的可移植性。結(jié)構(gòu)體結(jié)構(gòu)體typedef struct date Date;void show(char *, Date d);void copy(Date s, Date d);typedef int Integer;結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組數(shù)組的元素是結(jié)構(gòu)體變量。數(shù)組的元素是結(jié)構(gòu)體變量。常用結(jié)構(gòu)體來表示記錄,那么結(jié)構(gòu)體數(shù)組就可以表示一組常用結(jié)構(gòu)體來表示記錄,那么結(jié)構(gòu)體數(shù)組就可以表示一組記錄。記錄。案例分析案例分析全班全班 N 個(gè)學(xué)生,每個(gè)學(xué)生有學(xué)號、姓名、四門課的成績。個(gè)學(xué)生,每個(gè)學(xué)生有學(xué)號、姓名、四門課的成績。結(jié)構(gòu)體結(jié)構(gòu)體學(xué)號學(xué)號姓名姓名成績成績1成績成績2成績成績3成績成績4101WangHai80787681102ZhaoFei68667175

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論