




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、習(xí)題課(三) Chap 9 結(jié)構(gòu),9.1 構(gòu)建手機(jī)通訊錄 9.2 結(jié)構(gòu)變量 9.3 結(jié)構(gòu)數(shù)組 9.4 結(jié)構(gòu)指針,1,本章要點(diǎn),什么是結(jié)構(gòu)?結(jié)構(gòu)與數(shù)組有什么差別? 有幾種結(jié)構(gòu)的定義形式,它們之間有什么不同? 什么是結(jié)構(gòu)的嵌套? 什么是結(jié)構(gòu)變量和結(jié)構(gòu)成員變量,如何引用結(jié)構(gòu)成員變量? 結(jié)構(gòu)變量如何作為函數(shù)參數(shù)使用? 什么是結(jié)構(gòu)數(shù)組,如何定義和使用結(jié)構(gòu)數(shù)組? 什么是結(jié)構(gòu)指針,它如何實(shí)現(xiàn)對(duì)結(jié)構(gòu)分量的操作? 結(jié)構(gòu)指針是如何作為函數(shù)的參數(shù)的?,2,9.1 構(gòu)建手機(jī)通訊錄,9.1.1 程序解析 9.1.2 結(jié)構(gòu)的概念與定義 9.1.3 結(jié)構(gòu)的嵌套定義,3,9.1.2 結(jié)構(gòu)的概念與定義,使用結(jié)構(gòu)來表示通訊錄信息
2、: struct friends_list char name10; /*姓名*/ int age; /*年齡*/ char telephone13; /*聯(lián)系電話*/ ; 結(jié)構(gòu):構(gòu)造數(shù)據(jù)類型,把有內(nèi)在聯(lián)系的不同類型的數(shù)據(jù)統(tǒng)一成一個(gè)整體,使它們相互關(guān)聯(lián),結(jié)構(gòu)是一種類型 結(jié)構(gòu)變量又是成員變量的集合,可以單獨(dú)使用其成員 結(jié)構(gòu)變量friend:對(duì)應(yīng)一個(gè)聯(lián)系人 struct friends_list friend; 結(jié)構(gòu)數(shù)組friends:每個(gè)元素就是一個(gè)結(jié)構(gòu)變量,對(duì)應(yīng)一個(gè)聯(lián)系人 struct friends_list friends50;,4,結(jié)構(gòu)的定義,結(jié)構(gòu)類型定義的一般形式為: struct 結(jié)
3、構(gòu)名 類型名 結(jié)構(gòu)成員名1; 類型名 結(jié)構(gòu)成員名2; 類型名 結(jié)構(gòu)成員名n; ;,結(jié)構(gòu)的定義以分號(hào)結(jié)束,被看作一條語句,關(guān)鍵字struct和它后面的結(jié)構(gòu)名一起組成一個(gè)新的數(shù)據(jù)類型名,5,結(jié)構(gòu)定義示例,定義平面坐標(biāo)結(jié)構(gòu): struct point double x; double y; ; 雖然x、y的類型相同,也可以用數(shù)組的方式表示,但采用結(jié)構(gòu)體描述整體性更強(qiáng),增加了程序的可讀性,使程序更清晰。,6,9.1.3 結(jié)構(gòu)的嵌套定義,在實(shí)際生活中,一個(gè)較大的實(shí)體可能由多個(gè)成員構(gòu)成,而這些成員中有些又有可能是由一些更小的成員構(gòu)成的實(shí)體。 在手機(jī)通訊錄中,增加“通信地址”,7,結(jié)構(gòu)的嵌套定義,struc
4、t address char city10; char street20; int code; int zip; ;,struct nest_friendslist char name10; int age; struct address addr; char telephone13; ;,在定義嵌套的結(jié)構(gòu)類型時(shí),必須先定義成員的結(jié)構(gòu)類型,再定義主結(jié)構(gòu)類型。,8,9.2 結(jié)構(gòu)變量,9.2.1 結(jié)構(gòu)變量的定義和初始化 9.2.2 結(jié)構(gòu)變量的使用,9,9.2.1結(jié)構(gòu)變量的定義和初始化,三種定義結(jié)構(gòu)變量的方式: 1.單獨(dú)定義 先定義結(jié)構(gòu)類型,再定義具有這種結(jié)構(gòu)類型的變量 struct friends
5、_list char name10; /* 姓名 */ int age; /* 年齡 */ char telephone13; /* 聯(lián)系電話 */ ; struct friends_list friend1, friend2;,10,結(jié)構(gòu)變量的定義,2. 混合定義 在定義結(jié)構(gòu)體類型的同時(shí)定義結(jié)構(gòu)體變量 struct friends_list char name10; int age; char telephone13; friend1, friend2; 3. 無類型名定義 在定義結(jié)構(gòu)體變量時(shí)省略結(jié)構(gòu)體名 struct char name10; int age; char telephone
6、13; friend1, friend2;,11,結(jié)構(gòu)變量的初始化,struct friends_list friend1 = Zhang, 26,;,name age telephone ,12,9.2.2 結(jié)構(gòu)變量的訪問,1. 結(jié)構(gòu)變量成員的訪問 結(jié)構(gòu)變量名 .結(jié)構(gòu)成員名 friend1.age = 26; strcpy(, Zhang San); nest_friend.addr.zip,13,例9-2 計(jì)算實(shí)發(fā)工資,在一個(gè)職工工資管理系統(tǒng)中,工資項(xiàng)目包括編號(hào)、姓名、基本工資、獎(jiǎng)金、保險(xiǎn)、實(shí)發(fā)工資。 輸入一個(gè)正整數(shù)n,再輸入n個(gè)職工的
7、前5項(xiàng)信息,計(jì)算并輸出每位職工的實(shí)發(fā)工資。 實(shí)發(fā)工資 = 基本工資+獎(jiǎng)金保險(xiǎn)。,14,例9-2 源程序,#include struct employee int num; char name20; float jbgz, jj, bx, sfgz; ; int main(void) int i, n; struct employee e; printf(請(qǐng)輸入職工人數(shù)n: ); scanf(%d, ,請(qǐng)輸入職工人數(shù)n: 1 請(qǐng)輸入第1個(gè)職工的信息:102 Zhong 2200.5 800 85.2 編號(hào):102 姓名:Zhong 實(shí)發(fā)工資:2915.30,15,結(jié)構(gòu)變量的使用整體賦值,2. 結(jié)
8、構(gòu)變量的整體賦值 具有相同類型的結(jié)構(gòu)變量可以直接賦值。 將賦值符號(hào)右邊結(jié)構(gòu)變量的每一個(gè)成員的值都賦給了左邊結(jié)構(gòu)變量中相應(yīng)的成員。 struct friends_list char name10; int age; char telephone13; friend1 = Zhang,26, , friend2; friend2 = friend1;,16,結(jié)構(gòu)變量的使用函數(shù)參數(shù),3. 結(jié)構(gòu)變量作為函數(shù)參數(shù) 當(dāng)程序的規(guī)模較大,功能較多時(shí),需要以函數(shù)的形式進(jìn)行功能模塊的劃分和實(shí)現(xiàn); 如果在函數(shù)間傳遞結(jié)構(gòu)數(shù)據(jù),則需用結(jié)構(gòu)變量作為函數(shù)的參數(shù)或返回值。,17,例9-3 結(jié)構(gòu)變
9、量做為函數(shù)參數(shù),改寫例9-2,要求使用結(jié)構(gòu)變量作為函數(shù)參數(shù)。 定義一個(gè)用于計(jì)算實(shí)發(fā)工資的函數(shù): float count_sfgz(struct employee m) return m.jbgz + m.jj - m.bx; 再將主函數(shù)main中的語句: e.sfgz = e.jbgz + e.jj - e.bx; 改為: e.sfgz = count_sfgz(e);,18,一個(gè)結(jié)構(gòu)變量只能表示一個(gè)實(shí)體的信息,如果有許多相同類型的實(shí)體,就需要使用結(jié)構(gòu)數(shù)組。 結(jié)構(gòu)數(shù)組是結(jié)構(gòu)與數(shù)組的結(jié)合,與普通數(shù)組的不同之處在于每個(gè)數(shù)組元素都是一個(gè)結(jié)構(gòu)類型的數(shù)據(jù),包括各個(gè)成員項(xiàng)。,9.3 結(jié)構(gòu)數(shù)組,19,結(jié)構(gòu)數(shù)
10、組的定義方法與結(jié)構(gòu)變量相同 struct friends_list char name10; int age; char telephone13; friends10; 結(jié)構(gòu)數(shù)組friends,它有10個(gè)數(shù)組元素,從friends0到friends9,每個(gè)數(shù)組元素都是結(jié)構(gòu)類型struct friends_list,9.3 結(jié)構(gòu)數(shù)組,20,結(jié)構(gòu)數(shù)組的初始化,struct friends_list friends10 = zhang san, 26, Li Si, 30,;,21,結(jié)構(gòu)數(shù)組元素,結(jié)構(gòu)數(shù)組元素的成員引用 結(jié)構(gòu)體數(shù)組名下標(biāo) . 結(jié)
11、構(gòu)體成員名 使用方法與同類型的變量完全相同 friends5.age = 26; strcpy(,Zhang San); friends4 = friends1;,22,例9-4 結(jié)構(gòu)數(shù)組排序,輸入并保存10個(gè)學(xué)生的信息,計(jì)算并輸出平均分,再按照從高分到低分的順序輸出他們的信息。 #include struct student int num; char name20; int score; ; struct student stud10; /* 定義結(jié)構(gòu)數(shù)組 */,23,例9-4 源程序,int main(void) int i, j, index, sum = 0
12、; struct student temp; /* 輸入10個(gè)學(xué)生的記錄,并累加成績(jī) */ for(i = 0; i 10; i+) printf(No %d: , i+1); scanf(%d%s%d, ,24,9.4 結(jié)構(gòu)指針,9.4.1 結(jié)構(gòu)指針的概念 9.4.2 結(jié)構(gòu)指針作為函數(shù)參數(shù),25,9.4.1結(jié)構(gòu)指針的概念,結(jié)構(gòu)指針:指向結(jié)構(gòu)類型變量的指針 例9-1定義的結(jié)構(gòu)類型 struct friends_list struct friends_list friend1 = zhang, 26, 88018445; struct friends_list *p; p = ,26,結(jié)構(gòu)指針的
13、使用,(1) 用*p訪問結(jié)構(gòu)成員 (*p).age = 36; (2) 用指向運(yùn)算符“-”訪問指針指向的結(jié)構(gòu)成員。 p-age = 36; 當(dāng)p = ,27,9.4.2 結(jié)構(gòu)指針作為函數(shù)參數(shù),當(dāng)結(jié)構(gòu)指針作為函數(shù)的參數(shù)時(shí),執(zhí)行效率高,可以完成比基本類型指針更為復(fù)雜的操作。 例9-5 輸入10個(gè)學(xué)生的學(xué)號(hào)、姓名和成績(jī),輸出學(xué)生的成績(jī)等級(jí)和不及格人數(shù)。 每個(gè)學(xué)生的記錄包括學(xué)號(hào)、姓名、成績(jī)和等級(jí) 要求定義和調(diào)用函數(shù)set_grade根據(jù)學(xué)生成績(jī)?cè)O(shè)置等級(jí),并統(tǒng)計(jì)不及格人數(shù) 等級(jí)設(shè)置: A :85100;B:7084;C:6069;D:059,28,例9-5 源程序,#define N 10 struct
14、 student int num; char name20; int score; char grade; ; int main(void) struct student stuN, *ptr; ptr = stu; /* 輸入 略 */ count = set_grade( ptr ); ,int set_grade(struct student * p) int i, n = 0; for(i = 0; i score = 85) p-grade = A; else if(p-score = 70) p-grade = B; else if(p-score = 60) p-grade =
15、C; else p-grade = D; n+; return n; ,調(diào)用set_grade返回主函數(shù)后,主函數(shù)中結(jié)構(gòu)數(shù)組stu的元素的grade成員已經(jīng)被賦值,29,例9-1 說明,例9-1中,結(jié)構(gòu)數(shù)組名friends作為函數(shù)參數(shù)時(shí),其實(shí)質(zhì)就是結(jié)構(gòu)指針作為函數(shù)參數(shù),因?yàn)閿?shù)組名代表數(shù)組的首地址。因此,結(jié)構(gòu)數(shù)組名與結(jié)構(gòu)指針變量都可以做為函數(shù)的參數(shù)。 與結(jié)構(gòu)變量作為函數(shù)參數(shù)相比,用結(jié)構(gòu)指針作為函數(shù)參數(shù)的效率更高,因而是更佳的選擇。,30,9.1.1 程序解析,例9-1 構(gòu)建簡(jiǎn)單的手機(jī)通訊錄 聯(lián)系人的基本信息:姓名、年齡和聯(lián)系電話 最多容納50名聯(lián)系人的信息 具有新建和查詢功能,31,程序解析源程
16、序,#include #include /*手機(jī)通訊錄結(jié)構(gòu)定義*/ struct friends_list char name10; /* 姓名 */ int age; /* 年齡 */ char telephone13; /* 聯(lián)系電話 */ ; int Count = 0; /* 全局變量記錄當(dāng)前聯(lián)系人總數(shù) */ void new_friend(struct friends_list friends ); void search_friend(struct friends_list friends , char *name);,32,源程序,int main(void) int choic
17、e; char name10; struct friends_list friends50; /* 包含50個(gè)人的通訊錄 */ do printf(手機(jī)通訊錄功能選項(xiàng):1:新建 2:查詢 0:退出n); printf(請(qǐng)選擇功能:); scanf(%d, ,33,源程序,/*新建聯(lián)系人*/ void new_friend(struct friends_list friends ) struct friends_list f; if(Count = 50) printf(通訊錄已滿!n); return; printf(請(qǐng)輸入新聯(lián)系人的姓名:); scanf(%s, ); print
18、f(請(qǐng)輸入新聯(lián)系人的年齡:); scanf(%d, ,34,源程序,/*查詢聯(lián)系人*/ void search_friend(struct friends_list friends , char *name) int i, flag = 0; if(Count = 0) printf(通訊錄是空的!n); return; for(i = 0; i Count; i+) if(strcmp(name, ) = 0) /* 找到聯(lián)系人*/ flag=1; break; if(flag) printf(姓名: %st, ); printf(年齡: %dt, friendsi.age); printf(電話: %sn, friendsi.telephone); else printf(無此聯(lián)系人!); ,35,程序解析
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 便攜式健腹輪企業(yè)制定與實(shí)施新質(zhì)生產(chǎn)力戰(zhàn)略研究報(bào)告
- 醫(yī)學(xué)級(jí)美白淡斑面膜行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 便攜式家庭理療燈行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報(bào)告
- 超聲、CT聯(lián)合BRAFV600E在PTC頸部淋巴結(jié)轉(zhuǎn)移術(shù)前評(píng)估的應(yīng)用研究
- 土方運(yùn)輸簡(jiǎn)單合同范本(5篇)
- 個(gè)人衛(wèi)生用品企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級(jí)戰(zhàn)略研究報(bào)告
- 醫(yī)學(xué)級(jí)舒緩潔面啫喱行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報(bào)告
- 基于軌跡數(shù)據(jù)的城市交通擁堵狀態(tài)演變及預(yù)測(cè)研究
- 膠凝砂礫石材料損傷本構(gòu)模型及壩體破壞機(jī)理研究
- 語文-湖北省鄂東新領(lǐng)先協(xié)作體2025屆高三下學(xué)期2月調(diào)考(二模)試題和答案
- 地理-廣東省上進(jìn)聯(lián)考領(lǐng)航高中聯(lián)盟2025屆高三下學(xué)期開學(xué)考試題和答案
- GB/T 20032-2024項(xiàng)目風(fēng)險(xiǎn)管理應(yīng)用指南
- 博鰲亞洲論壇:創(chuàng)新報(bào)告2024
- 2025年全國(guó)青少年禁毒知識(shí)競(jìng)賽題庫及答案(401一516) - 副本
- 2025年高三歷史高考第二輪復(fù)習(xí)知識(shí)梳理中國(guó)史部分復(fù)習(xí)提綱
- 2025年蒙鹽集團(tuán)招聘筆試參考題庫含答案解析
- 精神科醫(yī)療質(zhì)控課件
- 護(hù)理三基三嚴(yán)習(xí)題+參考答案
- 椎間孔鏡的手術(shù)配合
- 員工互評(píng)表(含指標(biāo))
- 美國(guó)電話區(qū)號(hào)一覽表
評(píng)論
0/150
提交評(píng)論