版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
《C語言程序設(shè)計(jì)》計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)本科第7章結(jié)構(gòu)和聯(lián)合
(一)教學(xué)內(nèi)容1.結(jié)構(gòu)的基本概念2.結(jié)構(gòu)的定義與初始化3.結(jié)構(gòu)成員的訪問和結(jié)構(gòu)變量的賦值4.結(jié)構(gòu)與數(shù)組5.結(jié)構(gòu)與函數(shù)6.結(jié)構(gòu)與鏈表7.聯(lián)合的定義與使用第7章結(jié)構(gòu)和聯(lián)合
(二)教學(xué)要求了解:結(jié)構(gòu)和聯(lián)合的有關(guān)概念;理解:結(jié)構(gòu)和聯(lián)合的定義格式,結(jié)構(gòu)和聯(lián)合成員的訪問,結(jié)構(gòu)作為函數(shù)參數(shù)的應(yīng)用,結(jié)構(gòu)作為鏈表中結(jié)點(diǎn)類型的應(yīng)用;應(yīng)用:會(huì)分析和編寫使用結(jié)構(gòu)的函數(shù)或程序第7章結(jié)構(gòu)和聯(lián)合7.1結(jié)構(gòu)的定義1.結(jié)構(gòu)的引入結(jié)構(gòu)的概念:結(jié)構(gòu)是用戶自定義的數(shù)據(jù)類型,在一個(gè)組合項(xiàng)中包含若干個(gè)類型不同的數(shù)據(jù)項(xiàng)的數(shù)據(jù)結(jié)構(gòu)。例:定義一個(gè)職工Employee結(jié)構(gòu)數(shù)據(jù)類型,它包括姓名,職工編號(hào),工資,地址,電話。structEmployee
{
charname[20];
longcode;
floatsalary;
charaddress[50];
charphone[11];
};//分號(hào)是必需的第7章結(jié)構(gòu)和聯(lián)合7.1結(jié)構(gòu)的定義2.結(jié)構(gòu)的定義格式格式:
struct
結(jié)構(gòu)類型名
{
成員定義1;
成員定義2;
……
成員定義n;
};第7章結(jié)構(gòu)和聯(lián)合7.1結(jié)構(gòu)的定義2.結(jié)構(gòu)的定義格式此類型一旦被定義后,可與int、float等基本數(shù)據(jù)類型同等看待。例如可用Employee類型定義結(jié)構(gòu)變量。定義一個(gè)結(jié)構(gòu)類型并不分配內(nèi)存,定義一個(gè)結(jié)構(gòu)變量時(shí)才分配內(nèi)存。第7章結(jié)構(gòu)和聯(lián)合7.1結(jié)構(gòu)的定義3.定義格式舉例structA{
int
a,b,c;
};
structB{
charch;
int
x,y;
doublez;
};structC{
char*cp;
inta[5];
};第7章結(jié)構(gòu)和聯(lián)合7.1結(jié)構(gòu)的定義3.定義格式舉例structD{
int*a;
int*ap;
int
maxsize;
};structE{
intd,*e;
structBb;
};structF{
doubledata;
structF*next;
};第7章結(jié)構(gòu)和聯(lián)合7.1結(jié)構(gòu)的定義4.結(jié)構(gòu)定義說明
(1)若在定義結(jié)構(gòu)AA時(shí)需要結(jié)構(gòu)BB,而定義結(jié)構(gòu)BB時(shí)又需要AA,方法是先給出一個(gè)結(jié)構(gòu)的不完整定義。structBB;structAA{
chara;
structBB*b;
};structBB{
intb;
structAAa;
};第7章結(jié)構(gòu)和聯(lián)合7.1結(jié)構(gòu)的定義4.結(jié)構(gòu)定義說明
(2)一種結(jié)構(gòu)類型的長(zhǎng)度等于其所包含的每個(gè)數(shù)據(jù)成員長(zhǎng)度之和。如上例中A,B,C,D,E,F(xiàn)的長(zhǎng)度分別為12,17,24,12,25,12。
(3)使用結(jié)構(gòu)類型定義對(duì)象時(shí),保留字struct不能省略,為簡(jiǎn)便起見可通過typedef語句定義結(jié)構(gòu)類型的別名,從而省略了保留字struct。如:
typedef
structPersonPerson;
Persona={“xxk”,’m’,52,5230};第7章結(jié)構(gòu)和聯(lián)合7.2結(jié)構(gòu)變量的定義和初始化結(jié)構(gòu)變量定義方法有三種。1.先定義結(jié)構(gòu)類型,再定義變量struct
結(jié)構(gòu)類型名
{
成員定義1;
成員定義2;
……
成員定義n;
};
結(jié)構(gòu)類型名變量名列表;
第7章結(jié)構(gòu)和聯(lián)合7.2結(jié)構(gòu)變量的定義和初始化結(jié)構(gòu)變量定義方法有三種。1.先定義結(jié)構(gòu)類型,再定義變量struct
Arith
{
charop;
int
a,b;
};
intxx=40;
(1)structArith
x,y;
(2)structArithz1={'+',10,xx},z2={'*',60},z3=z1;
(3)structArith*d=&z1;
(4)structAritha[4]={{'+',3,7},{'-',10,5},{'*',6,4},{'/',8,5}};
(5)structArith*b[]={&z1,&z2,a+2,&a[3]};第7章結(jié)構(gòu)和聯(lián)合7.2結(jié)構(gòu)變量的定義和初始化1.先定義結(jié)構(gòu)類型,再定義變量通過malloc()等函數(shù)創(chuàng)建一個(gè)動(dòng)態(tài)結(jié)構(gòu)變量或結(jié)構(gòu)數(shù)組后返回的同樣是對(duì)應(yīng)的存儲(chǔ)空間的首地址,把這個(gè)首地址賦給一個(gè)結(jié)構(gòu)指針后,就可以利用這個(gè)指針訪問所指向的動(dòng)態(tài)結(jié)構(gòu)變量或數(shù)組。例如:struct
Arith*p=malloc(sizeof(struct
Arith));
struct
Arith*a=calloc(n,sizeof(struct
Arith));
free(p);
free(a);第7章結(jié)構(gòu)和聯(lián)合7.2結(jié)構(gòu)變量的定義和初始化2.在定義結(jié)構(gòu)類型的同時(shí)定義變量
struct
結(jié)構(gòu)類型名
{
成員定義1;
成員定義2;
……
成員定義n;
}變量名列表;
第7章結(jié)構(gòu)和聯(lián)合7.2結(jié)構(gòu)變量的定義和初始化2.在定義結(jié)構(gòu)類型的同時(shí)定義變量
structAAA{
chars[20];
inttop;
}a1={"Microsoft",0},a2=a1,a3,*ap;第7章結(jié)構(gòu)和聯(lián)合7.2結(jié)構(gòu)變量的定義和初始化3.定義無名結(jié)構(gòu)類型的同時(shí)定義變量
struct
{
成員定義1;
成員定義2;
……
成員定義n;
}變量名列表;
第7章結(jié)構(gòu)和聯(lián)合7.2結(jié)構(gòu)變量的定義和初始化3.定義無名結(jié)構(gòu)類型的同時(shí)定義變量
structBBB{
charname[10];
struct{//無名結(jié)構(gòu)
int
yy,mm,dd;
}birth;
}bx={"xxk",{55,3,27}};第7章結(jié)構(gòu)和聯(lián)合7.3結(jié)構(gòu)成員的訪問1.訪問結(jié)構(gòu)成員:通過點(diǎn)操作符“.”進(jìn)行。
例:person.code//訪問code成員
person.salary//訪問salary成員2.同類型的結(jié)構(gòu)變量可相互賦值。
structperson
{
charname[20];
unsignedlongid;
floatsalary;
};
personpr1={“Frankvoltaire”,12345678,3.35};
personpr2;
pr2=pr1;//同類型的結(jié)構(gòu)變量可相互賦值第7章結(jié)構(gòu)和聯(lián)合7.3結(jié)構(gòu)成員的訪問3.可將結(jié)構(gòu)變量的地址賦給結(jié)構(gòu)變量,結(jié)構(gòu)指針通過箭頭操作符“->”可訪問結(jié)構(gòu)成員。例:structperson
{
charname[20];
unsignedlongid;
floatsalary;
};
personpr1;
person*prptr=&pr1;
點(diǎn)運(yùn)算訪問結(jié)構(gòu)成員:、pr1.id、pr1.salary
箭頭運(yùn)算訪問結(jié)構(gòu)成員:prptr->name、prptr->id、prptr->salary
點(diǎn)運(yùn)算訪問結(jié)構(gòu)成員:(*prptr).name、(*prptr).id、(*prptr).salary
第7章結(jié)構(gòu)和聯(lián)合7.4使用結(jié)構(gòu)的程序舉例程序7_1程序7_2程序7_37.5結(jié)構(gòu)與函數(shù)結(jié)構(gòu)變量作為函數(shù)形參,結(jié)構(gòu)可作為函數(shù)的返回值類型。例7_1從Student結(jié)構(gòu)數(shù)組中查找某一給定學(xué)號(hào)的記錄,若能夠找到,則表明查找成功,返回元素下標(biāo),否則返回-1,表示查找失敗。第7章結(jié)構(gòu)和聯(lián)合7.5結(jié)構(gòu)與函數(shù)例7_2從Student結(jié)構(gòu)數(shù)組中更新某一給定學(xué)號(hào)的記錄,若更新成功則返回1,否則將新記錄插入到數(shù)組末尾,并修改數(shù)組長(zhǎng)度為已有長(zhǎng)度加1,同時(shí)返回0表示完成插入。7.6結(jié)構(gòu)與鏈表1.鏈表的定義第7章結(jié)構(gòu)和聯(lián)合7.6結(jié)構(gòu)與鏈表1.鏈表的定義結(jié)構(gòu)成員不能是自身的結(jié)構(gòu)變量;但可以是本結(jié)構(gòu)的指針變量。例:structlist
{
charname[20];
list*pn;//ok,pn是本結(jié)構(gòu)的指針變量
listm;//error,m非本結(jié)構(gòu)的指針變量
};
第7章結(jié)構(gòu)和聯(lián)合7.6結(jié)構(gòu)與鏈表1.鏈表的定義若結(jié)構(gòu)中含有指向本結(jié)構(gòu)的指針成員,則該結(jié)構(gòu)可構(gòu)成鏈表。例:struct
IntNode
{
intdata;//結(jié)點(diǎn)值域
struct
IntNode*next;//結(jié)點(diǎn)指針域
};
第7章結(jié)構(gòu)和聯(lián)合7.6結(jié)構(gòu)與鏈表1.鏈表的定義數(shù)組是長(zhǎng)度固定的數(shù)據(jù)結(jié)構(gòu),數(shù)組元素順序、連續(xù)地存放在固定大小的內(nèi)存空間中。鏈表是由節(jié)點(diǎn)組成的非連續(xù)的動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu),鏈表中的節(jié)點(diǎn)在需要時(shí)可由new運(yùn)算動(dòng)態(tài)地創(chuàng)建并加入到鏈表中。數(shù)組具有隨機(jī)存取特性;鏈表具有順序存取特性。第7章結(jié)構(gòu)和聯(lián)合7.6結(jié)構(gòu)與鏈表1.鏈表的定義鏈表經(jīng)常用來存儲(chǔ)需要?jiǎng)討B(tài)變化的數(shù)據(jù),因?yàn)殒湵淼牟迦牒蛣h除操作是比較方便的。鏈表中結(jié)點(diǎn)的存儲(chǔ)空間通常是調(diào)用動(dòng)態(tài)存儲(chǔ)分配函數(shù)得到的,若不通過free()函數(shù)及時(shí)回收結(jié)點(diǎn),則動(dòng)態(tài)分配的結(jié)點(diǎn)空間會(huì)一直持續(xù)到程序運(yùn)行結(jié)束。一個(gè)鏈表結(jié)構(gòu)的示意圖如下:
485672830fdatanext第7章結(jié)構(gòu)和聯(lián)合7.6結(jié)構(gòu)與鏈表2.鏈表的建立操作下例的createList函數(shù)可以從鍵盤上輸入的n個(gè)整數(shù)建立一個(gè)具有n個(gè)結(jié)點(diǎn),每個(gè)結(jié)點(diǎn)為IntNode類型的鏈表,f為表頭指針。參見program7_4.cpp。3.鏈表的遍歷操作下例的traversalList函數(shù)是一個(gè)遍歷鏈表的算法,從表頭指針指向的表頭結(jié)點(diǎn)開始,順序訪問每個(gè)結(jié)點(diǎn),直到結(jié)點(diǎn)的指針域?yàn)榭諘r(shí)止。參見program7_4.cpp。4.使用鏈表的程序舉例,參見program7_4.cpp。第7章結(jié)構(gòu)和聯(lián)合7.7聯(lián)合1.聯(lián)合的定義聯(lián)合也是一種用戶定義的數(shù)據(jù)類型,由若干個(gè)數(shù)據(jù)成員組成。和結(jié)構(gòu)的差別是:任一時(shí)刻,結(jié)構(gòu)中的所有成員都是課訪問的,而聯(lián)合中只有一個(gè)成員是可訪問的,其余所有成員都是不可訪問的。聯(lián)合和結(jié)構(gòu)存儲(chǔ)的差別:每個(gè)結(jié)構(gòu)對(duì)象包含有全部數(shù)據(jù)成員的存儲(chǔ)空間,它所占用的存儲(chǔ)空間的大小等于所有數(shù)據(jù)成員占有的存儲(chǔ)空間大小的總和;每個(gè)聯(lián)合對(duì)象所占用存儲(chǔ)空間的大小等于所有數(shù)據(jù)成員中占有的存儲(chǔ)空間的最大值。第7章結(jié)構(gòu)和聯(lián)合7.7聯(lián)合1.聯(lián)合的定義結(jié)構(gòu)和聯(lián)合的例子structstype{ charch; intgr; int*pt; doubledb;};unionutype{ charch; intgr; int*pt; doubledb;};第7章結(jié)構(gòu)和聯(lián)合7.7聯(lián)合2.聯(lián)合對(duì)象的存儲(chǔ)空間分配假定有:struct
stypex;
struct
utypey;結(jié)構(gòu)對(duì)象x的大小等于所有4個(gè)數(shù)據(jù)成員的大小之和,即1+4+4+8=17。聯(lián)合對(duì)象y的大小等于所有4個(gè)數(shù)據(jù)成員的大小的最大值,即max(1,4,4,8)=8。第7章結(jié)構(gòu)和聯(lián)合7.7聯(lián)合3.使用聯(lián)合的幾點(diǎn)說明(1)結(jié)構(gòu)和聯(lián)合在初始化的方法上不同。系統(tǒng)允許對(duì)結(jié)構(gòu)中的每個(gè)數(shù)據(jù)成員按照定義的次序
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 海報(bào)設(shè)計(jì)合同模板
- 家庭雇傭保姆合同樣式參考
- 2024獨(dú)家原創(chuàng)企業(yè)績(jī)效合同簽定儀式領(lǐng)導(dǎo)講話稿
- 2024租賃辦公室合同范本
- 個(gè)人教育助學(xué)貸款
- 購房借款協(xié)議2024年
- 籃球訓(xùn)練合作協(xié)議范本
- 房產(chǎn)代理合同租賃
- 個(gè)人消費(fèi)借款合同范本
- 提升機(jī)租賃合同樣本格式
- 讓閱讀成為習(xí)慣家長(zhǎng)會(huì)課件
- 家庭健康照護(hù)服務(wù)方案
- 施工方案 誰編
- 滬教牛津版八上英語Unit-6-單元完整課件
- 新能源及多能互補(bǔ)互補(bǔ)技術(shù)
- 混凝土攪拌站安裝及拆除方案
- 電力電子技術(shù)在新能源領(lǐng)域的應(yīng)用
- 《管道營銷策略》課件
- 裝配式建筑預(yù)制構(gòu)件吊裝專項(xiàng)施工方案
- 繪本分享《狐貍打獵人》
- 防詐騙小學(xué)生演講稿
評(píng)論
0/150
提交評(píng)論