




已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第八章 結(jié)構(gòu)體與共用體,【教學(xué)要求】 1理解結(jié)構(gòu)體的含義。 2掌握結(jié)構(gòu)體類型變量的定義方法。 3掌握結(jié)構(gòu)體類型變量的引用方法。 4掌握結(jié)構(gòu)體類型變量如何在定義的同時初始化。 5理解共同體的含義,掌握共同體類型變量的定義方法。 6. 了解結(jié)構(gòu)體數(shù)組的定義和數(shù)組元素的引用。 7了解指向結(jié)構(gòu)體類型數(shù)據(jù)的指針的概念及使用。 8了解鏈表結(jié)點的結(jié)構(gòu)形式,鏈表的基本操作。 9了解枚舉類型的定義,及枚舉類型的輸入輸出。 10了解TYPEDEF的作用。,第八章 結(jié)構(gòu)體與共用體,結(jié)構(gòu)體(struct) 共同體(union) 結(jié)構(gòu)體與共用體小結(jié) 枚舉類型(enum) typedef定義類型,結(jié)構(gòu)體(struct),結(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)體的初始化,結(jié)構(gòu)體的定義,1、含義:不同類型數(shù)據(jù)的集合。 2、功能:用于描述一個“概念”。(或記錄) 如:num name sex age score addr 10010 LiFun M 18 87.5 BeiJing 3、定義方法: 方法一:在定義結(jié)構(gòu)體類型的同時,直接給出結(jié)構(gòu)體變量。 如: struct 結(jié)構(gòu)體名 結(jié)構(gòu)體成員變量的定義; 變量名1,變量名2,.,變量名n; 方法二:先給出結(jié)構(gòu)體類型的定義,再定義結(jié)構(gòu)體變量。 如: struct 結(jié)構(gòu)體名 結(jié)構(gòu)體成員變量的定義; 例: ; struct 結(jié)構(gòu)體名 變量名1,變量名2,.,變量名n; 4、要點:,方法二: struct student int number; char name20; char sex; int age; float score; char addr30; ; struct student student1,student2;,方法一: struct student int number; char name20; char sex; int age; float score; char addr30; student1,student2; 請注意兩種方法的不同特點: 1、“;”的用法; 2、方法二可以用一個*.h文件來存儲結(jié)構(gòu)體的定義。,4、要點: 結(jié)構(gòu)體名(struct): 用于標識一種新的數(shù)據(jù)類型, 即結(jié)構(gòu)體類型,可以省略。 注意區(qū)分結(jié)構(gòu)體類型與基本數(shù) 據(jù)類型的不同,它是復(fù)合數(shù)據(jù) 類型。 結(jié)構(gòu)體成員變量與普通變量的 定義一樣,它還可以是結(jié)構(gòu)體 變量。,struct date int month,day,year; struct student int num; char name20; char sex; int age; struct date birthday; char addr30; student1,student2;,結(jié)構(gòu)體變量的存儲特點,如: struct student int number; char name5; char sex; int age; float score; char addr10; student1,student2;,struct student所占存儲空間的大小為: 各成員變量所占存儲單元字節(jié)數(shù)之和。sizeof(student),結(jié)構(gòu)體類型變量的引用,一、原則:通過結(jié)構(gòu)體的成員來引用結(jié)構(gòu)體變量。 二、成員的引用方法為:結(jié)構(gòu)體變量名.成員名 三、要點: 1.結(jié)構(gòu)體變量不能整體輸入輸出,只能對它的成員進行操作。 如:student1.num; 2.如果成員本身又是一個結(jié)構(gòu)體類型,則要使用若干個成員運算符,逐級找到最底層的成員。 如:student1.birthday.day 3.成員變量可以象一般的變量一樣進行各種運算,只是在運算時要加上“.”運算符。 4.可以引用成員的地址。,結(jié)構(gòu)體變量的初始化,一、只可以給主函數(shù)中或外部存儲類別和靜態(tài)存儲類別的結(jié)構(gòu)體變量、數(shù)組賦初值。 1、對外部存儲類型的初始化. 2、對靜態(tài)存儲類型的結(jié)構(gòu)體變量進行初始化 二、給結(jié)構(gòu)體變量賦初值不能跨越前面的成員而只給后面的成員變量賦值。,例exp8_1:對外部存儲類型的初始化. #include struct student long number; char name20; char sex; int age; float score; char addr30; a=99641,”Li Ping”,M,56,”Tianjin Street”; main() printf(“No.:%ldnname:%snsex:%cnaddress:%sn”, a.num,,a.sex,a.addr); ,例exp8_2:對靜態(tài)存儲類型的結(jié)構(gòu)體變量進行初始化. #include main() static struct student long number; char name20; char sex; int age; float score; char addr30; a=99641,”Li Ping”,M,56,”Tianjin Street”; printf(“No.:%ldnname:%snsex:%cnaddress:%sn”, a.num,,a.sex,a.addr); ,結(jié)構(gòu)體數(shù)組,結(jié)構(gòu)體數(shù)組的含義: 數(shù)組元素是結(jié)構(gòu)體類型數(shù)據(jù)的數(shù)組稱為結(jié)構(gòu)體數(shù)組。 結(jié)構(gòu)體數(shù)組的定義 結(jié)構(gòu)體數(shù)組的初始化 結(jié)構(gòu)體數(shù)組的應(yīng)用舉例,結(jié)構(gòu)體數(shù)組的定義,一、含義:若干個相同的結(jié)構(gòu)體類型變量組成的數(shù)據(jù)集合。 二、定義方法: struct 結(jié)構(gòu)體名 例如: 結(jié)構(gòu)體成員定義; 數(shù)組名元素個數(shù); 三、結(jié)構(gòu)體數(shù)組的使用方法 1、通過數(shù)組的下標(或指向數(shù)組的指針)來訪問結(jié)構(gòu)體變量。 2、再通過結(jié)構(gòu)體變量的成員實現(xiàn)結(jié)構(gòu)體數(shù)據(jù)的訪問。 形式為:數(shù)組名下標.成員名 如:=“Wang Ying”;,struct student long number; char name20; char sex; int age; float score; char addr30; struct student stu3;,struct student long number; char name20; char sex; int age; float score; char addr30; stu3; 結(jié)構(gòu)體數(shù)組的物理含義: 表示實體(或記錄)的個數(shù)。,1、含義:在定義結(jié)構(gòu)體數(shù)組時完成數(shù)組元素的賦值 2、方法:與一般數(shù)組元素賦初值的方法相同。 struct student long number; char name20; char sex; int age; float score; char addr30; a3=99641,”Li Ping”,M,56,”Tianjin Street”, 99341,”Zhang Fan”,F,78,”Beijing Road”, 99441,”Ren Zhong”,M,34,”Shenyang Road”;,結(jié)構(gòu)體數(shù)組的初始化,例exp8_3: 對候選人得票的統(tǒng)計程序,設(shè)有三個候選人,每次輸入一個候選人的名字,最后統(tǒng)計出每個候選人的得票的結(jié)果. #include struct person char name20;int count; leader3=“Li”,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(strcmp(leader_name,)=0) leaderj.count+; printf(“n”); for(i=0;i3;i+) printf(“%5s:%dn”,,laderi.count);,結(jié)構(gòu)體指針,指向結(jié)構(gòu)體變量的指針 指向結(jié)構(gòu)體數(shù)組的指針 指向結(jié)構(gòu)體的指針作函數(shù)的參數(shù) 單鏈表,指向結(jié)構(gòu)體變量的指針,一、含義: 1、結(jié)構(gòu)體變量的指針: 指結(jié)構(gòu)體變量所占內(nèi)存單元的起始地址 2、指向結(jié)構(gòu)體變量的指針 指向結(jié)構(gòu)體變量的起始地址的指針變量. 二、定義方法與使用 三、要點: 1、必須將指針指向一個確定的結(jié)構(gòu)體變量,如:p= 2、通過結(jié)構(gòu)體變量的指針訪問結(jié)構(gòu)體的方法為: a.num、(*p).num、p-num。 3、區(qū)分下面的兩種用法: p-n+ 和 +p-n,1、結(jié)構(gòu)體指針的定義: main() struct student long number; char name20; char sex; int age; float score; char addr30; a=070441,”Li Ping”,M,56,”Tianjin Street”,*p=,指向結(jié)構(gòu)體數(shù)組的指針,1、定義方法舉例: 2、使用要點: p+:是指針p指向數(shù)組的下個元素,而這個元素是由結(jié)構(gòu)體類型數(shù)據(jù)組成的,它不是一個簡單的變量. (+p)-num:先使指針p指向結(jié)構(gòu)體數(shù)組當前位置的下一個元素,再訪問其元素成員num; 請區(qū)別與(p+)-num的不同。,例exp8_4:指向結(jié)構(gòu)體數(shù)組的指針 #include struct student long number;char name20; char sex;int age; float score; char addr30; a3=070441,”Li Ping”,M,56,”Tianjin Street”, 070442,”Zhang Fan”,F,78,”Beijing Road”, 070443,”Ren Zhong”,M,34,”Shenyang Road”; main() struct student *p; for(p=a;pnum,p-name,p-sex,p-age,p-score,p-addr); ,指向結(jié)構(gòu)體的指針作函數(shù)的參數(shù),1、用結(jié)構(gòu)體變量的成員作函數(shù)的參數(shù)與一般變量作函數(shù)的參數(shù)一致; 2、用指向結(jié)構(gòu)體變量的指針作函數(shù)的參數(shù),實參將地址傳遞給形參,與前面指針作函數(shù)參數(shù)一致; 3、新版本的c語言允許將整個結(jié)構(gòu)體變量作為函數(shù)的參數(shù)進行傳遞,要求形參與實參的類型必須一致,而且程序占用內(nèi)存大,運行速度慢. 4、舉例(參見課本p227),單鏈表,一、鏈表的含義: 當一個結(jié)構(gòu)體中有一個成員是指向本結(jié)構(gòu)體的指針時,通過這樣的指針可以將若干個相同的結(jié)構(gòu)體存儲單元連接成一個新的數(shù)據(jù)結(jié)構(gòu)。舉例: 二、功能:可以根據(jù)需要動態(tài)的開辟存儲空間。 1.malloc(size):在內(nèi)存中動態(tài)的分配一個長度為size的連續(xù)空間; 2.calloc(n,size):在內(nèi)存中分配n個長度為size的連續(xù)空間; 3.free(ptr):釋放由ptr指針指向的內(nèi)存區(qū)域. 二、鏈表操作 建立鏈表、在鏈表插入結(jié)點、刪除鏈表結(jié)點,單鏈表的結(jié)構(gòu): struct student int num; float score; struct student *next; ;,要點: 1、鏈表中的元素在內(nèi)存中存放順序是不連續(xù)的。 由next指針來連接各節(jié)點。 2、鏈表數(shù)據(jù)結(jié)構(gòu)的實現(xiàn),必須利用指針變量.,節(jié)點,建立含n個節(jié)點的鏈表過程:,struct student *creat( ) struct student *head,*p1,*p2; n=0;head=NULL; p1=p2=(struct student *)(malloc(sizeof(struct student); scanf(“%ld,%f”,在鏈表中插入結(jié)點的過程,.,刪除鏈表結(jié)點的過程:,malloc(),共同體(union),共同體的含義與定義方法 共同體的存儲特點 共同體的使用,共同體的含義與定義方法,一、含義: 幾個不同變量共同占用同一塊內(nèi)存空間,只是一種覆蓋技術(shù),所謂的共同占用是指這幾個變量共同擁有內(nèi)存的同一個起始地址. 共用相同的存儲單元。 二、定義形式: union 共用體名 例如: 成員表列; union date 變量表列; int i; char ch; float f;a,b,c;,共同體的存儲特點,1.同一塊內(nèi)存可以存放不同類型的數(shù)據(jù),但在某一時刻只能存放其中的一種; 2.共用體變量中起作用的成員是最后一次存放的成員; 3.共用體變量的地址和它的成員的地址是同一個地址; 4.共用體變量不能整體被賦值,也不能給共用體變量賦初值; 5.不能把共用體變量作為函數(shù)的參數(shù)進行傳遞,但可以使用指向共用體變量的指針作為函數(shù)的參數(shù); 6.結(jié)構(gòu)體類型和共用體類型可以嵌套使用。,例如: union date int i; char ch; float f;a,b,c;,共同體的使用,例exp8_5:已知字符“0”的ASCII馬為十六進制的30,下面程序的輸出為: main() union unsigned char c; unsigned int i4; z; z.i0=0x39; z.i1=0x36; printf(“%cn”,z.c); 運行結(jié)果:9,例:下列程序的運行結(jié)果是什么? #include main() union zj int a; char ch2; au; au.a298; printf(“dndn“,au.ch0,au.ch1); 運行結(jié)果為:,42,1,結(jié)構(gòu)體與共用體小結(jié),一、共同點: 都是不同類型數(shù)據(jù)的集合 二、不同點: 1、結(jié)構(gòu)體中各個成員均在內(nèi)存中存在, 而共同體中只有一個成員存在于內(nèi)存中。 2、結(jié)構(gòu)體占用的存儲空間是所有成員所占空間的和; =sizeof(結(jié)構(gòu)體名) 而共用體所占內(nèi)存空間的大小是所有成員中占用存 儲空間最大的一個成員的占用空間的值。 3、結(jié)構(gòu)體中各個成員相互獨立、互不干擾, 共同體中改變一個成員的值,會影響到其它成員的值。 4、結(jié)構(gòu)體與共同體可以互為成員。,枚舉類型,1、含義: “枚舉類型”是將變量的取值一一列舉出來,變量的取值只限在列出來的取值范圍內(nèi). 2、定義方法: enum weekday sun,mon,tue,wed,thu,fri,sat; enum weekday workday; 枚舉類型的變量 workday的取值只能在sun-sat之間. 3、使用要點: 4、應(yīng)用舉例,要點: 1.枚舉元素在c語言中按常量來處理,不是變量,不能被賦值; 2.作為常量的枚舉元素,它們是有值的.在編譯是按它們的定義順序取值為0,1,2,3 也可以在定義類型時人為定義枚舉元素的值,如 enum weekday sun=7,mon=1,tue,wed,thu,fri,sat; enum weekday workday; 3.枚舉值可以用來做條件判斷,如: if (workday=mon) if (workdaytue) 4.一個整數(shù)不能直接賦值給一個枚舉變量,如: workday=2;() workday=(enum weekday) 2; () workday=tue; (),
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工程管理理論與實際試題及答案
- 債權(quán)拍賣服務(wù)合同范例
- 企業(yè)風水顧問聘用合同范例
- oem銷售合同范例
- 余熱鍋爐合同范例
- 上海房東公寓租房合同范例
- 代簽定金合同范例
- 公益林合同范例
- 會禮品采購合同范例
- 眾籌 投資合同范例
- 部編本一年級下冊1、吃水不忘挖井人名師公開課獲獎?wù)n件百校聯(lián)賽一等獎?wù)n件
- 投資合同:有限公司投資協(xié)議
- 四川大學(xué)華西口腔醫(yī)院臨床研究醫(yī)學(xué)倫理審查申請表【模板】
- 拖欠房租通知書范文
- 年產(chǎn)萬噸的氯乙烯合成工段的工藝設(shè)計
- 2024年湖北省中考歷史試卷附答案
- 2024年銀行校園招聘入職考試模擬試題及答案(共三套)
- 2024年新疆烏魯木齊市中考化學(xué)適應(yīng)性試卷
- 民法典之合同篇課件
- 偉大的《紅樓夢》智慧樹知到期末考試答案章節(jié)答案2024年北京大學(xué)
- 2024江蘇省煙草專賣局(公司)系統(tǒng)員工招聘筆試參考題庫含答案解析
評論
0/150
提交評論