C語(yǔ)言程序設(shè)計(jì)課件第9章 使用結(jié)構(gòu)體類(lèi)型處理組合數(shù)據(jù)_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件第9章 使用結(jié)構(gòu)體類(lèi)型處理組合數(shù)據(jù)_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件第9章 使用結(jié)構(gòu)體類(lèi)型處理組合數(shù)據(jù)_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件第9章 使用結(jié)構(gòu)體類(lèi)型處理組合數(shù)據(jù)_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)課件第9章 使用結(jié)構(gòu)體類(lèi)型處理組合數(shù)據(jù)_第5頁(yè)
已閱讀5頁(yè),還剩44頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、C語(yǔ)言提供了一些由系統(tǒng)已定義好的數(shù)據(jù)類(lèi)型,如:整型、實(shí)型、字符型、指針等類(lèi)型,C語(yǔ)言還允許用戶(hù)根據(jù)需要自己建立數(shù)據(jù)類(lèi)型,用它來(lái)定義變量。第9章 使用結(jié)構(gòu)體類(lèi)型處理組合數(shù)據(jù)-用戶(hù)自定義數(shù)據(jù)類(lèi)型P248編輯課件9.1 定義和使用結(jié)構(gòu)體變量9.2 結(jié)構(gòu)體數(shù)組9.3 結(jié)構(gòu)體指針9.4 用結(jié)構(gòu)體變量和結(jié)構(gòu)體變量的指針作函數(shù)參數(shù)9.5 用指針處理鏈表編輯課件9.1 定義和使用結(jié)構(gòu)體變量9.1.1 自己建立結(jié)構(gòu)體類(lèi)型9.1.2 定義結(jié)構(gòu)體類(lèi)型變量9.1.3 結(jié)構(gòu)體變量的初始化和引用P248編輯課件9.1.1 自己建立結(jié)構(gòu)體類(lèi)型P248用戶(hù)自己建立由不同類(lèi)型數(shù)據(jù)組成的組合型的數(shù)據(jù)結(jié)構(gòu),它稱(chēng)為結(jié)構(gòu)體例如,一個(gè)學(xué)

2、生的學(xué)號(hào)、姓名、性別、年齡、成績(jī)、家庭地址等項(xiàng),是屬于同一個(gè)學(xué)生的,因此組成一個(gè)組合數(shù)據(jù),如student_1的變量,反映它們之間的內(nèi)在聯(lián)系編輯課件struct student int num; char name20; char sex; int age; float score; char addr30; ;由程序設(shè)計(jì)者指定了一個(gè)結(jié)構(gòu)體類(lèi)型struct Student它包括num,name,sex,age,score,addr等不同類(lèi)型的成員編輯課件聲明一個(gè)結(jié)構(gòu)體類(lèi)型的一般形式為: struct 結(jié)構(gòu)體名 成員表列 ; 類(lèi)型名 成員名;編輯課件說(shuō)明:(1)結(jié)構(gòu)體類(lèi)型并非只有一種,而是可以設(shè)

3、計(jì)出許多種結(jié)構(gòu)體類(lèi)型,例如struct teacherstruct workerstruct date等結(jié)構(gòu)體類(lèi)型各自包含不同的成員編輯課件說(shuō)明:(2) 成員可以屬于另一個(gè)結(jié)構(gòu)體類(lèi)型。 struct date int month; int day; int year; ;struct student int num;char name20; char sex; int age; struct date birthday; char addr30; ;編輯課件說(shuō)明:(2) 成員可以屬于另一個(gè)結(jié)構(gòu)體類(lèi)型。 numnamesexagebirthdayaddrmonthdayyear編輯課件9.1.2

4、 定義結(jié)構(gòu)體類(lèi)型變量P250前面只是建立了一個(gè)結(jié)構(gòu)體類(lèi)型,它相當(dāng)于一個(gè)模型,并沒(méi)有定義變量,其中并無(wú)具體數(shù)據(jù),系統(tǒng)對(duì)之也不分配存儲(chǔ)單元。相當(dāng)于設(shè)計(jì)好了圖紙,但并未建成具體的房屋。為了能在程序中使用結(jié)構(gòu)體類(lèi)型的數(shù)據(jù),應(yīng)當(dāng)定義結(jié)構(gòu)體類(lèi)型的變量,并在其中存放具體的數(shù)據(jù)。編輯課件1. 先聲明結(jié)構(gòu)體類(lèi)型,再定義該類(lèi)型變量聲明結(jié)構(gòu)體類(lèi)型struct student,可以用它來(lái)定義變量 struct student student1,student2;結(jié)構(gòu)體類(lèi)型名結(jié)構(gòu)體變量名 編輯課件1. 先聲明結(jié)構(gòu)體類(lèi)型,再定義該類(lèi)型變量聲明結(jié)構(gòu)體類(lèi)型struct student,可以用它來(lái)定義變量 struct stu

5、dent student1,student2;10001Zhang XinM1990.5Shanghaistudent110002Wang LiF2098Beijingstudent2編輯課件2.在聲明類(lèi)型的同時(shí)定義變量struct student int num; char name20; char sex; int age; float score; char addr30; student1,student2;編輯課件3. 不指定類(lèi)型名而直接定義結(jié)構(gòu)體類(lèi)型變量其一般形式為: struct 成員表列 變量名表列; 指定了一個(gè)無(wú)名的結(jié)構(gòu)體類(lèi)型 。編輯課件說(shuō)明:(1) 結(jié)構(gòu)體類(lèi)型與結(jié)構(gòu)體變量是

6、不同的概念,不要混同。只能對(duì)變量賦值、存取或運(yùn)算,而不能對(duì)一個(gè)類(lèi)型賦值、存取或運(yùn)算。在編譯時(shí),對(duì)類(lèi)型是不分配空間的,只對(duì)變量分配空間。編輯課件(2) 結(jié)構(gòu)體類(lèi)型中的成員名可以與程序中的變量名相同,但二者不代表同一對(duì)象。(3) 對(duì)結(jié)構(gòu)體變量中的成員(即“域”),可以單獨(dú)使用,它的作用與地位相當(dāng)于普通變量。編輯課件9.1.3 結(jié)構(gòu)體變量的初始化和引用 例9.1 把一個(gè)學(xué)生的信息放在一個(gè)結(jié)構(gòu)體變量中,然后輸出這個(gè)學(xué)生的信息。解題思路:先在程序中自己建立一個(gè)結(jié)構(gòu)體類(lèi)型,包括有關(guān)學(xué)生信息的各成員然后用它來(lái)定義結(jié)構(gòu)體變量,同時(shí)賦以初值最后輸出該結(jié)構(gòu)體變量的各成員P91編輯課件#include void m

7、ain()struct student int num; char name20; char sex; char addr20; student1=10101,“Li Lin”,M, “123 Beijing Road”; printf(NO.:%dnname:%sn sex:%cnaddress:%sn, student1.num, , student1.sex, student1.addr);編輯課件#include void main()struct student int num; char name20; char sex; char addr20; stu

8、dent1=10101,“Li Lin”,M, “123 Beijing Road”; printf(NO.:%dnname:%sn sex:%cnaddress:%sn, student1.num, , student1.sex, student1.addr);編輯課件#include void main()struct student int num; char name20; char sex; char addr20; student1=10101,“Li Lin”,M, “123 Beijing Road”; student1.num=10010; 對(duì)pri

9、ntf(“%sn”,student1); 不對(duì)編輯課件#include void main()struct student int num; char name20; char sex; char addr20; student1=10101,“Li Lin”,M, “123 Beijing Road”; struct date birthday; student1.num=10010; 對(duì)student1.birthday.month=11; 對(duì)編輯課件#include void main()struct student int num; char name20; char sex; cha

10、r addr20; student1=10101,“Li Lin”,M, “123 Beijing Road”; student2.num=student1.num; 對(duì)sum=student1.num+student2.num; 對(duì)student1.num+; 對(duì),student2; 編輯課件9.2 結(jié)構(gòu)體數(shù)組P255編輯課件說(shuō)明:(1)定義結(jié)構(gòu)體數(shù)組一般形式是 struct 結(jié)構(gòu)體名 成員表列 數(shù)組名數(shù)組長(zhǎng)度; 先聲明一個(gè)結(jié)構(gòu)體類(lèi)型,然后再用此類(lèi)型定義結(jié)構(gòu)體數(shù)組: 結(jié)構(gòu)體類(lèi)型 數(shù)組名數(shù)組長(zhǎng)度; 如: struct person leader3; 編輯課件說(shuō)明:(2)對(duì)結(jié)構(gòu)體數(shù)組初始化的形式

11、是在定義數(shù)組的后面加上:=初值表列; 如:struct person leader3= Li,0,Zhang,0,“Sun,0; 編輯課件9.3 結(jié)構(gòu)體指針P258指向結(jié)構(gòu)體對(duì)象的指針變量既可以指向結(jié)構(gòu)體變量,也可以用來(lái)指向結(jié)構(gòu)體數(shù)組中的元素。但是,指針變量的基類(lèi)型必須與結(jié)構(gòu)體變量的類(lèi)型相同。例如: struct student *pt; 編輯課件 例9.5 通過(guò)指向結(jié)構(gòu)體變量的指針變量輸出結(jié)構(gòu)體變量中成員的信息。解題思路:在已有的基礎(chǔ)上,本題要解決兩個(gè)問(wèn)題:怎樣對(duì)結(jié)構(gòu)體變量成員賦值;怎樣通過(guò)指向結(jié)構(gòu)體變量的指針訪問(wèn)結(jié)構(gòu)體變量中成員。編輯課件#include #include void mai

12、n() struct student long num; char name20; char sex; float score; ;編輯課件說(shuō)明:為了使用方便和直觀,允許把(*p).num用p-num來(lái)代替(*p).name等價(jià)于p-name如果p指向一個(gè)結(jié)構(gòu)體變量stu,以下等價(jià): stu.成員名(如stu.num) (*p).成員名(如(*p).num) p-成員名(如p-num)編輯課件9.4 用結(jié)構(gòu)體變量和結(jié)構(gòu)體變量的指針作函數(shù)參數(shù)P262將一個(gè)結(jié)構(gòu)體變量的值傳遞給另一個(gè)函數(shù),有3個(gè)方法。編輯課件(1) 用結(jié)構(gòu)體變量的成員作參數(shù)。 例如,用stu1.num或作函數(shù)實(shí)參

13、,將實(shí)參值傳給形參。用法和用普通變量作實(shí)參是一樣的,屬于“值傳遞”方式。應(yīng)當(dāng)注意實(shí)參與形參的類(lèi)型保持一致。編輯課件(2) 用結(jié)構(gòu)體變量作實(shí)參。用結(jié)構(gòu)體變量作實(shí)參時(shí),將結(jié)構(gòu)體變量所占的內(nèi)存單元的內(nèi)容全部按順序傳遞給形參,形參也必須是同類(lèi)型的結(jié)構(gòu)體變量在函數(shù)調(diào)用期間形參也要占用內(nèi)存單元。這種傳遞方式在空間和時(shí)間上開(kāi)銷(xiāo)較大在被調(diào)用函數(shù)期間改變形參(也是結(jié)構(gòu)體變量)的值,不能返回主調(diào)函數(shù)一般較少用這種方法編輯課件(3)用指向結(jié)構(gòu)體變量(或數(shù)組元素)的指針作實(shí)參,將結(jié)構(gòu)體變量(或數(shù)組元素)的地址傳給形參。編輯課件9.5 用指針處理鏈表9.5.1 什么是線性鏈表9.5.2 建立簡(jiǎn)單的靜態(tài)鏈表9.5.3 建

14、立動(dòng)態(tài)鏈表P265編輯課件9.5.1 什么是線性鏈表P265鏈表是一種常見(jiàn)的重要的數(shù)據(jù)結(jié)構(gòu)它是動(dòng)態(tài)地進(jìn)行存儲(chǔ)分配的一種結(jié)構(gòu)head12491249A135613561475B1475C10211021D0頭指針各結(jié)點(diǎn)地址不連續(xù)各結(jié)點(diǎn)含有兩個(gè)部分表尾編輯課件鏈表是一種常見(jiàn)的重要的數(shù)據(jù)結(jié)構(gòu)它是動(dòng)態(tài)地進(jìn)行存儲(chǔ)分配的一種結(jié)構(gòu)鏈表必須利用指針變量才能實(shí)現(xiàn)編輯課件struct student int num; float score; struct student *next; a,b,c;1010189.510103901010785a結(jié)點(diǎn)b結(jié)點(diǎn)c結(jié)點(diǎn)a.next=&b;b.next=&c;numsco

15、renext編輯課件9.5.2 建立簡(jiǎn)單的靜態(tài)鏈表P266 例9.8 建立一個(gè)如圖所示的簡(jiǎn)單鏈表,它由3個(gè)學(xué)生數(shù)據(jù)的結(jié)點(diǎn)組成,要求輸出各結(jié)點(diǎn)中的數(shù)據(jù)。1010189.510103901010785a結(jié)點(diǎn)b結(jié)點(diǎn)c結(jié)點(diǎn)numscorenext編輯課件解題思路:1010189.510103901010785a結(jié)點(diǎn)b結(jié)點(diǎn)c結(jié)點(diǎn)numscorenextheadhead=&a;a.next=&b;b.next=&c;NULLc.next=NULL;編輯課件#include struct student int num; float score; struct student *next;編輯課件void

16、main() struct student a,b,c,*head,*p; a. num=10101; a.score=89.5; b. num=10103; b.score=90; c. num=10107; c.score=85; head=&a; a.next=&b; b.next=&c; c.next=NULL; p=head; do printf(“%ld%5.1fn”,p-num,p-score); p=p-next; while(p!=NULL); 編輯課件 p=head; do printf(“%ld%5.1fn”,p-num,p-score); p=p-next; while

17、(p!=NULL); 1010189.510103901010785a結(jié)點(diǎn)b結(jié)點(diǎn)c結(jié)點(diǎn)numscorenextheadNULLp相當(dāng)于p=&b;編輯課件 p=head; do printf(“%ld%5.1fn”,p-num,p-score); p=p-next; while(p!=NULL); 1010189.510103901010785a結(jié)點(diǎn)b結(jié)點(diǎn)c結(jié)點(diǎn)numscorenextheadNULLp相當(dāng)于p=&b;編輯課件 p=head; do printf(“%ld%5.1fn”,p-num,p-score); p=p-next; while(p!=NULL); 1010189.51010

18、3901010785a結(jié)點(diǎn)b結(jié)點(diǎn)c結(jié)點(diǎn)numscorenextheadNULLp相當(dāng)于p=&c;編輯課件 p=head; do printf(“%ld%5.1fn”,p-num,p-score); p=p-next; while(p!=NULL); 1010189.510103901010785a結(jié)點(diǎn)b結(jié)點(diǎn)c結(jié)點(diǎn)numscorenextheadNULLp相當(dāng)于p=&c;編輯課件 p=head; do printf(“%ld%5.1fn”,p-num,p-score); p=p-next; while(p!=NULL); 1010189.510103901010785a結(jié)點(diǎn)b結(jié)點(diǎn)c結(jié)點(diǎn)numscorenextheadNULLp相當(dāng)于p=NULL;靜態(tài)鏈表編輯課件9.5.3 建立動(dòng)態(tài)鏈表P267所謂建立動(dòng)態(tài)鏈

溫馨提示

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

評(píng)論

0/150

提交評(píng)論