




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第十二章結(jié)構(gòu)體與共用體 說明 結(jié)構(gòu)體與共用體 第一講 主要 內(nèi)容? 重占? 八、 1 2 3 2 內(nèi)容 結(jié)構(gòu)體的概念及其基本操作 結(jié)構(gòu)體的引用方法 結(jié)構(gòu)體數(shù)組的使用 結(jié)構(gòu)體的概念及基本操作 結(jié)構(gòu)體的引用方法 難點? 問題 提出 1 結(jié)構(gòu)體的概念及基本操作一- 方面已經(jīng)介紹了基本數(shù)據(jù)類型二整型、浮點型:符型,也介紹了 一種構(gòu)造類型一一數(shù)組,數(shù)組中各元素是屬于同一種類型的。 例如:一個學(xué)生的學(xué)號、姓名、性別、年齡、成績、家庭地址等項, 各項的數(shù)據(jù)類型并不相同(如下圖) num n ame sex age score addr 例子: int a5; 10010 I Li Fan m 18 88 I
2、 Chengd 女0果將 num name sex、age、score、addr 分另U定義為互相獨立 的簡單變量,難以反映它們之間的內(nèi)在聯(lián)系,如何解決此類問題呢? 通過舉例說 明定義結(jié)構(gòu) 體的必要性。 2 / 9 一、結(jié)構(gòu)體類型引入 上例應(yīng)該合數(shù)據(jù)組織成一個組合項, 在一個組合項中包含若干個不 同類型數(shù)據(jù)項,C語言沒有提供這樣的數(shù)據(jù)結(jié)構(gòu),因此用戶必須在程序 和基本類型 變量進行比 較分析,進一 步說明必須 定義結(jié)構(gòu)體 類型。 中建立所需結(jié)構(gòu)體類型。 Struct stude nt int num; char n ame20; char sex; int age; float score; c
3、har addr30; ; Struct student 是一個類型名,Struct是一個關(guān)鍵字,標志著這 是一個結(jié)構(gòu)體類型。 二、聲明一個結(jié)構(gòu)體的形式 Struct結(jié)構(gòu)體名 成員表列; 說明? 其中,成員表列的格式為: 類型名成員名; 三、定義結(jié)構(gòu)體類型變量的方法 1. 先聲明結(jié)構(gòu)體類型在定義變量名 已定義了一個結(jié)構(gòu)體類型Struct stude nt,可以用它定義變量。 第十二章結(jié)構(gòu)體與共用體 內(nèi)容說明 比較? 說明? 舉例? 舉例? Struct stude nt int num; char addr30; ; Struct stude nt stude nt1 2.在聲明類型的同時定義
4、變量 Struct stude nt int num; char addr30; 3.直接定義結(jié)構(gòu)類型變量 Struct int num; ,student2 ; student1 ,student2 ; char addr30; student1 ,student2 ; 關(guān)于結(jié)構(gòu)體類型的說明: (1)類型與變量不同; (2 )成員可單獨使用,作用和地位相當(dāng)于普通變量; (3 )成員可以是一個結(jié)構(gòu)體變量; Struct date int mon th; int day; int year; Struct stude nt int num; struct date birthday ; char
5、 addr30; student1 ,student2 ; (4)成員名可以和程序中的變量名相同,二者不代表用一個對象。 四、結(jié)構(gòu)體變量的引用 結(jié)構(gòu)體變量名.成員名 1. 對結(jié)構(gòu)體變量中的成員分別進行輸入輸出 2. 成員本身是結(jié)構(gòu)體類型,只能對最低級的成員進行賦值等運算。 3. 對結(jié)構(gòu)體成員的運算和普通變量一樣進行各種運算。 4. 可以引用結(jié)構(gòu)體變量的地址,也可引用結(jié)構(gòu)體變量成員的地址。 五、結(jié)構(gòu)體變量的初始化 和其它變量一樣,對結(jié)構(gòu)體變量可以在定義時指定初始值。 例如 struct stude nt Io ng int num; char n ame201; 只能對變量 賦值、存取或 運算,
6、類型不 行。 先聲明一個 Struct date 類型,然后在 Struct student 類型 時,將成員 Birthday 定 義為Struct date類型。 如: Student.num 4 / 9 第十二章結(jié)構(gòu)體與共用體 說明 內(nèi)容 Char sex; Char addr20; a=89031,“ li lin ” , M , “123 beijing Road ” ; 9 / 9 引言? 六、結(jié)構(gòu)體數(shù)組 一個結(jié)構(gòu)體變量中可以存放一組數(shù)據(jù)。如果有10個學(xué)生的數(shù)據(jù)需 要參與運算,顯然應(yīng)該用數(shù)組,這就是結(jié)構(gòu)體數(shù)組。 舉例? 1.結(jié)構(gòu)體數(shù)組的定義 Struct stude nt int
7、num; 結(jié)構(gòu)體數(shù)組 和數(shù)值型數(shù) 組不同之處 在于每個數(shù) 組元素都是 一個結(jié)構(gòu)體 類型的數(shù)據(jù)。 定義了一個 student ,其 元素為 Struct student 類型 數(shù)據(jù),數(shù)組中 有10個元素。 char addr30; ; Struct stude nt stude nt10 2. 結(jié)構(gòu)體數(shù)組的初始化 其初始化和數(shù)組的初始化相似。 3. 結(jié)構(gòu)體數(shù)組的應(yīng)用舉例 例 對候選人得票的統(tǒng)計程序。設(shè)有三個候選人,每次輸入一個得 票的候選人的名字,要求最后輸出各人得票結(jié)果。 程序如下: #i nclude struct person char n ame20; int count; leader
8、3= “l(fā)i ” ,0, “zhang” ,0 , “fun ” ,0; main () int i,j;char leader_ name20; for(i=1;i=10;i+) scanf( “%s , leader_name); for(j=0;j3;j+) if(strc mp (leader_ name,leaderj. name)=0) leaderj.co un t+; for(i=0;i3;i+) printf( “5s:%d n”, ,leaderi.count); 小結(jié): 理解和掌握結(jié)構(gòu)體的概念和方法 掌握結(jié)構(gòu)體的基本操作 熟練掌握結(jié)構(gòu)體的引用方法
9、了解結(jié)構(gòu)體數(shù)組的使用 結(jié)構(gòu)體與共用體第二講 內(nèi)容 說明 主要 內(nèi)容? 重占? 八、 1. 指向結(jié)構(gòu)體類型數(shù)據(jù)的指針 2. 用指針處理鏈表 3. 共用體 1. 指向結(jié)構(gòu)體類型數(shù)據(jù)的指針 2. 用指針處理鏈表 1 HH 指向結(jié)構(gòu)體類型數(shù)據(jù)的指針;用指針處理鏈表 難點? 舉例? 結(jié)論? 說明? 引例? 一、如何使用指針變量指向結(jié)構(gòu)體類型數(shù)據(jù) 一個結(jié)構(gòu)體變量的指針就是該變量所占據(jù)的內(nèi)存段的起始地址。 以設(shè)個指針變量,用來指向一個結(jié)構(gòu)體變量。 例如:指向結(jié)構(gòu)體變量的指針的應(yīng)用 #i nclude mai n() struct stude nt lo ng nu m;char n ame20;char s
10、ex; float score; struct stude nt stu_1; struct stude nt *p; p= stu_1. nu m=89101; strcpy(stu_1.name,“l(fā)i lin ” ); stu_1.sex= M ; stu_1.score =89.5 printf( “ No.%ld stu_1. nu m,stu_1. name,stu_1.sex stu_1.score); printf( “ No.%ld (*p). name, (*p ).sex (*p )1.score); 兩個 (1) (2) (3) 通過舉例說 明定義結(jié)構(gòu) 體變量的指 針。
11、 printf 函數(shù)輸出結(jié)果相同。以下三種形式等價: 結(jié)構(gòu)體變量.成員名 (*p).成員名 p-成員名 二、指向結(jié)構(gòu)體數(shù)組的指針 可以使用指針或指針變量指向數(shù)組或數(shù)組元素。 元素也可以用指針或指針變量來指向。 例 指向結(jié)構(gòu)體數(shù)組指針的應(yīng)用 struct stude nt int nu m;char n ame20; char sex; int age; 內(nèi)容 n” ,(*p).num, 對結(jié)構(gòu)體數(shù)組及其 在主函數(shù)中 聲 明了 struct student 類 型,然后定義 struct student 類型 的變量stu_1 又定義了二 個指針變量P 它指向一個 struct student
12、類型 的數(shù)據(jù)。 說明 第十二章結(jié)構(gòu)體與共用體 , M ,18, ”,M,19 ,F,20; main () Struct stude nt *p; printf(“ No.n ame for(p=stu ;p num,p-name, p-sex, p-age); Struct stude nt stu3=10101,“ li lin ” 10102, ” zhang fun 10104, ” wang min” 說明 三、用指針處理鏈表 鏈表是一種常見的數(shù)據(jù)結(jié)構(gòu),是動態(tài)地進行存儲分配的一種結(jié)構(gòu)。 引言? 用數(shù)組存放數(shù)據(jù)時,必須事先定義固定的長度。比如有的班級有 100人,有的班級有 30人,如
13、果要用同一個數(shù)組先后存放不同班級的 學(xué)生數(shù)據(jù),則必須定義長度為100的數(shù)組。如果事先難以確定一個班的 最多人數(shù),則必須把數(shù)組定的足夠大,以便能存放任何班級的數(shù)據(jù)。顯 然這將會浪費內(nèi)存。 而鏈表是根據(jù)需要開辟存儲單元。 舉例? head 1249135614751021 左側(cè)是一個 簡單的鏈表 結(jié)構(gòu) 注釋? 鏈表有一個頭指針變量,圖中以 head表示,它存放一個地址。該 地址指向一個元素。鏈表中的每個元素稱為“結(jié)點”,每個節(jié)點都應(yīng)包 括兩部分:一為用戶需要的實際數(shù)據(jù),二為下一個結(jié)點的地址。 鏈表中各元素在內(nèi)存中不是連續(xù)存放的。要找某一個元素,必須找 到上一個元素,根據(jù)它提供的下一個元素的地址才能
14、找到下一個元素。 這種鏈表的數(shù)據(jù)結(jié)構(gòu),必須利用指針變量才能實現(xiàn)。用結(jié)構(gòu)體變量 作為鏈表中的結(jié)點是最合適的。 head指向第 一個元素,第 一個元素又 指向第二個 元素直 到最后一個 元素,該元素 不在指向其 它元素,它稱 為“表尾”。 舉例? 四、鏈表的建立和輸出 1.靜態(tài)鏈表 #define NULL 0 struct stude nt Io ng num; float score; struct stude nt *n ext; mai n() struct stude nt a,b,c,*head,* p; a. n um=99101;a.score=89.5; b. n um=9910
15、3;b.score=90; c. num=99107;c.score=85; 對結(jié)點num和 score成員賦 值。 內(nèi)容 6 / 9 第十二章結(jié)構(gòu)體與共用體 思考? 舉例? 舉例? head=a. next=b .n ext=c.n ext=NULL; p=head; Do printf(“%ld%5.1f n”,p-num,p-score); p=p-n ext; while( p!=NULL); 各個結(jié)點如何構(gòu)成鏈表的?沒有指針head行不行? p起到什么作 用?沒有它行不行? 2.動態(tài)鏈表 建立動態(tài)鏈表是指在程序執(zhí)行過程中從無到有建立起一個鏈表, 一個一個地開辟結(jié)點和輸入各結(jié)點數(shù)據(jù),并
16、建立起前后相鏈的關(guān)系。 例 寫一個函數(shù)建立一個有3名學(xué)生數(shù)據(jù)的單向動態(tài)鏈表 #define NULL 0 #defi ne LEN sizeof(struct stude nt) struct stude nt lo ng num; float score; struct stude nt *n ext; int n; struct stude nt *creat(void) struct stude nt *head; struct stude nt *p 1,* p2;n=0; p1= p2=(struct stude nt *)malloc(LEN); scanf( “l(fā)d,%f”, h
17、ead=NULL while( p1- nu m!=0) n=n+1; if(n=1)head=p1; else p2.n ext =p1; p2=p1; p 1=(struct stude nt *)malloc(LEN); scanf( “l(fā)d,%f”, p2- next=NULL; retur n( head); 將結(jié)點a,b,c 的起始地址 分別賦值。 此鏈表屬于 靜態(tài)鏈表。 開辟一個新 單元 3.輸出鏈表 將鏈表中的各結(jié)點的數(shù)據(jù)依次輸出。 例編寫一個輸出鏈表的函數(shù)print void prin t(struct stude nt *head) printf( “ p=head; if
18、(head!=NULL) do n ,n); 內(nèi)容說明 13 / 9 第十二章結(jié)構(gòu)體與共用體 printf( “ ld%5.1f n” ,p -num,p-score); p=p-n ext; while( p!=NULL); 16 / 9 五、 圖示? 對鏈表的刪除操作 已有一個鏈表,希望刪除其中某個結(jié)點 _B)E) num p仁 p1- next; if( num=p1 -num) if( p 1=head) head=p1-next else p2-n ext =p1-n ext; printf(“delete:n”,num); n=n-1; else printf( “ %ld not retur n( head); n”);return(head); n”,num); 六、對鏈表的插入操作 對鏈表的插入是指將一個結(jié)點插入到一個已有的鏈表中。 插入結(jié)點的函數(shù)如下: struct stude nt *in sert(struct stude nt *head,*stud) struct student *p0,*p1,*p2; p 1=head ;p0=stud; if(head!=NULL)head=pO; p0- next=NULL; else
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 做門面招牌合同范本
- 公司鋼材購銷合同范本
- 加裝電梯合伙合同范本
- 出租農(nóng)場果園合同范本
- 與銀行簽訂合同范本
- 分傭合同范例
- 個人軟件項目合同范本
- 個人演出雇用合同范本
- 加盟合同范本化妝
- 內(nèi)墻無機涂料合同范本
- 安徽2024年安徽醫(yī)科大學(xué)招聘管理崗和專業(yè)技術(shù)輔助崗(第二批)筆試歷年參考題庫解題思路附帶答案詳解
- 房建監(jiān)理實施細則
- 國家科學(xué)技術(shù)獎勵提名書
- 一年級下期開學(xué)第一課
- 舞臺燈光設(shè)計與光影藝術(shù)考核試卷
- 第10輯:句子表達效果(原句vs改句)解題指導(dǎo)-2023年高考語文一輪復(fù)習(xí)修辭手法與句子表達效果專練
- 2024年輔警招考時事政治考題及答案(100題)
- 2024年中考數(shù)學(xué)《二次函數(shù)的實際應(yīng)用》真題含解析版
- GB 30254-2024高壓三相籠型異步電動機能效限定值及能效等級
- 非物質(zhì)文化遺產(chǎn)拓印 課件
- 空氣動力學(xué)數(shù)值方法:有限元法(FEM):邊界條件處理與應(yīng)用
評論
0/150
提交評論