c語(yǔ)言結(jié)構(gòu)體與共同體.ppt_第1頁(yè)
c語(yǔ)言結(jié)構(gòu)體與共同體.ppt_第2頁(yè)
c語(yǔ)言結(jié)構(gòu)體與共同體.ppt_第3頁(yè)
c語(yǔ)言結(jié)構(gòu)體與共同體.ppt_第4頁(yè)
c語(yǔ)言結(jié)構(gòu)體與共同體.ppt_第5頁(yè)
已閱讀5頁(yè),還剩34頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第八章 結(jié)構(gòu)體與共用體,【教學(xué)要求】 1理解結(jié)構(gòu)體的含義。 2掌握結(jié)構(gòu)體類型變量的定義方法。 3掌握結(jié)構(gòu)體類型變量的引用方法。 4掌握結(jié)構(gòu)體類型變量如何在定義的同時(shí)初始化。 5理解共同體的含義,掌握共同體類型變量的定義方法。 6. 了解結(jié)構(gòu)體數(shù)組的定義和數(shù)組元素的引用。 7了解指向結(jié)構(gòu)體類型數(shù)據(jù)的指針的概念及使用。 8了解鏈表結(jié)點(diǎn)的結(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)體變量的存儲(chǔ)特點(diǎn) 結(jié)構(gòu)體變量的引用 結(jié)構(gòu)體的初始化,結(jié)構(gòu)體的定義,1、含義:不同類型數(shù)據(jù)的集合。 2、功能:用于描述一個(gè)“概念”。(或記錄) 如:num name sex age score addr 10010 LiFun M 18 87.5 BeiJing 3、定義方法: 方法一:在定義結(jié)構(gòu)體類型的同時(shí),直接給出結(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、要點(diǎn):,方法二: 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; 請(qǐng)注意兩種方法的不同特點(diǎn): 1、“;”的用法; 2、方法二可以用一個(gè)*.h文件來(lái)存儲(chǔ)結(jié)構(gòu)體的定義。,4、要點(diǎn): 結(jié)構(gòu)體名(struct): 用于標(biāo)識(shí)一種新的數(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)體變量的存儲(chǔ)特點(diǎn),如: struct student int number; char name5; char sex; int age; float score; char addr10; student1,student2;,struct student所占存儲(chǔ)空間的大小為: 各成員變量所占存儲(chǔ)單元字節(jié)數(shù)之和。sizeof(student),結(jié)構(gòu)體類型變量的引用,一、原則:通過(guò)結(jié)構(gòu)體的成員來(lái)引用結(jié)構(gòu)體變量。 二、成員的引用方法為:結(jié)構(gòu)體變量名.成員名 三、要點(diǎn): 1.結(jié)構(gòu)體變量不能整體輸入輸出,只能對(duì)它的成員進(jìn)行操作。 如:student1.num; 2.如果成員本身又是一個(gè)結(jié)構(gòu)體類型,則要使用若干個(gè)成員運(yùn)算符,逐級(jí)找到最底層的成員。 如:student1.birthday.day 3.成員變量可以象一般的變量一樣進(jìn)行各種運(yùn)算,只是在運(yùn)算時(shí)要加上“.”運(yùn)算符。 4.可以引用成員的地址。,結(jié)構(gòu)體變量的初始化,一、只可以給主函數(shù)中或外部存儲(chǔ)類別和靜態(tài)存儲(chǔ)類別的結(jié)構(gòu)體變量、數(shù)組賦初值。 1、對(duì)外部存儲(chǔ)類型的初始化. 2、對(duì)靜態(tài)存儲(chǔ)類型的結(jié)構(gòu)體變量進(jìn)行初始化 二、給結(jié)構(gòu)體變量賦初值不能跨越前面的成員而只給后面的成員變量賦值。,例exp8_1:對(duì)外部存儲(chǔ)類型的初始化. #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:對(duì)靜態(tài)存儲(chǔ)類型的結(jié)構(gòu)體變量進(jìn)行初始化. #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ù)組的定義,一、含義:若干個(gè)相同的結(jié)構(gòu)體類型變量組成的數(shù)據(jù)集合。 二、定義方法: struct 結(jié)構(gòu)體名 例如: 結(jié)構(gòu)體成員定義; 數(shù)組名元素個(gè)數(shù); 三、結(jié)構(gòu)體數(shù)組的使用方法 1、通過(guò)數(shù)組的下標(biāo)(或指向數(shù)組的指針)來(lái)訪問(wèn)結(jié)構(gòu)體變量。 2、再通過(guò)結(jié)構(gòu)體變量的成員實(shí)現(xiàn)結(jié)構(gòu)體數(shù)據(jù)的訪問(wèn)。 形式為:數(shù)組名下標(biāo).成員名 如:=“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í)體(或記錄)的個(gè)數(shù)。,1、含義:在定義結(jié)構(gòu)體數(shù)組時(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: 對(duì)候選人得票的統(tǒng)計(jì)程序,設(shè)有三個(gè)候選人,每次輸入一個(gè)候選人的名字,最后統(tǒng)計(jì)出每個(gè)候選人的得票的結(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)體變量的起始地址的指針變量. 二、定義方法與使用 三、要點(diǎn): 1、必須將指針指向一個(gè)確定的結(jié)構(gòu)體變量,如:p= 2、通過(guò)結(jié)構(gòu)體變量的指針訪問(wèn)結(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、使用要點(diǎn): p+:是指針p指向數(shù)組的下個(gè)元素,而這個(gè)元素是由結(jié)構(gòu)體類型數(shù)據(jù)組成的,它不是一個(gè)簡(jiǎn)單的變量. (+p)-num:先使指針p指向結(jié)構(gòu)體數(shù)組當(dāng)前位置的下一個(gè)元素,再訪問(wèn)其元素成員num; 請(qǐng)區(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ù)參數(shù)一致; 3、新版本的c語(yǔ)言允許將整個(gè)結(jié)構(gòu)體變量作為函數(shù)的參數(shù)進(jìn)行傳遞,要求形參與實(shí)參的類型必須一致,而且程序占用內(nèi)存大,運(yùn)行速度慢. 4、舉例(參見課本p227),單鏈表,一、鏈表的含義: 當(dāng)一個(gè)結(jié)構(gòu)體中有一個(gè)成員是指向本結(jié)構(gòu)體的指針時(shí),通過(guò)這樣的指針可以將若干個(gè)相同的結(jié)構(gòu)體存儲(chǔ)單元連接成一個(gè)新的數(shù)據(jù)結(jié)構(gòu)。舉例: 二、功能:可以根據(jù)需要?jiǎng)討B(tài)的開辟存儲(chǔ)空間。 1.malloc(size):在內(nèi)存中動(dòng)態(tài)的分配一個(gè)長(zhǎng)度為size的連續(xù)空間; 2.calloc(n,size):在內(nèi)存中分配n個(gè)長(zhǎng)度為size的連續(xù)空間; 3.free(ptr):釋放由ptr指針指向的內(nèi)存區(qū)域. 二、鏈表操作 建立鏈表、在鏈表插入結(jié)點(diǎn)、刪除鏈表結(jié)點(diǎn),單鏈表的結(jié)構(gòu): struct student int num; float score; struct student *next; ;,要點(diǎn): 1、鏈表中的元素在內(nèi)存中存放順序是不連續(xù)的。 由next指針來(lái)連接各節(jié)點(diǎn)。 2、鏈表數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn),必須利用指針變量.,節(jié)點(diǎn),建立含n個(gè)節(jié)點(diǎn)的鏈表過(guò)程:,struct student *creat( ) struct student *head,*p1,*p2; n=0;head=NULL; p1=p2=(struct student *)(malloc(sizeof(struct student); scanf(“%ld,%f”,在鏈表中插入結(jié)點(diǎn)的過(guò)程,.,刪除鏈表結(jié)點(diǎn)的過(guò)程:,malloc(),共同體(union),共同體的含義與定義方法 共同體的存儲(chǔ)特點(diǎn) 共同體的使用,共同體的含義與定義方法,一、含義: 幾個(gè)不同變量共同占用同一塊內(nèi)存空間,只是一種覆蓋技術(shù),所謂的共同占用是指這幾個(gè)變量共同擁有內(nèi)存的同一個(gè)起始地址. 共用相同的存儲(chǔ)單元。 二、定義形式: union 共用體名 例如: 成員表列; union date 變量表列; int i; char ch; float f;a,b,c;,共同體的存儲(chǔ)特點(diǎn),1.同一塊內(nèi)存可以存放不同類型的數(shù)據(jù),但在某一時(shí)刻只能存放其中的一種; 2.共用體變量中起作用的成員是最后一次存放的成員; 3.共用體變量的地址和它的成員的地址是同一個(gè)地址; 4.共用體變量不能整體被賦值,也不能給共用體變量賦初值; 5.不能把共用體變量作為函數(shù)的參數(shù)進(jìn)行傳遞,但可以使用指向共用體變量的指針作為函數(shù)的參數(shù); 6.結(jié)構(gòu)體類型和共用體類型可以嵌套使用。,例如: union date int i; char ch; float f;a,b,c;,共同體的使用,例exp8_5:已知字符“0”的ASCII馬為十六進(jìn)制的30,下面程序的輸出為: main() union unsigned char c; unsigned int i4; z; z.i0=0x39; z.i1=0x36; printf(“%cn”,z.c); 運(yùn)行結(jié)果:9,例:下列程序的運(yùn)行結(jié)果是什么? #include main() union zj int a; char ch2; au; au.a298; printf(“dndn“,au.ch0,au.ch1); 運(yùn)行結(jié)果為:,42,1,結(jié)構(gòu)體與共用體小結(jié),一、共同點(diǎn): 都是不同類型數(shù)據(jù)的集合 二、不同點(diǎn): 1、結(jié)構(gòu)體中各個(gè)成員均在內(nèi)存中存在, 而共同體中只有一個(gè)成員存在于內(nèi)存中。 2、結(jié)構(gòu)體占用的存儲(chǔ)空間是所有成員所占空間的和; =sizeof(結(jié)構(gòu)體名) 而共用體所占內(nèi)存空間的大小是所有成員中占用存 儲(chǔ)空間最大的一個(gè)成員的占用空間的值。 3、結(jié)構(gòu)體中各個(gè)成員相互獨(dú)立、互不干擾, 共同體中改變一個(gè)成員的值,會(huì)影響到其它成員的值。 4、結(jié)構(gòu)體與共同體可以互為成員。,枚舉類型,1、含義: “枚舉類型”是將變量的取值一一列舉出來(lái),變量的取值只限在列出來(lái)的取值范圍內(nèi). 2、定義方法: enum weekday sun,mon,tue,wed,thu,fri,sat; enum weekday workday; 枚舉類型的變量 workday的取值只能在sun-sat之間. 3、使用要點(diǎn): 4、應(yīng)用舉例,要點(diǎn): 1.枚舉元素在c語(yǔ)言中按常量來(lái)處理,不是變量,不能被賦值; 2.作為常量的枚舉元素,它們是有值的.在編譯是按它們的定義順序取值為0,1,2,3 也可以在定義類型時(shí)人為定義枚舉元素的值,如 enum weekday sun=7,mon=1,tue,wed,thu,fri,sat; enum weekday workday; 3.枚舉值可以用來(lái)做條件判斷,如: if (workday=mon) if (workdaytue) 4.一個(gè)整數(shù)不能直接賦值給一個(gè)枚舉變量,如: workday=2;() workday=(enum weekday) 2; () workday=tue; (),

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論