版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
《C語言程序設(shè)計》計算機(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)用:會分析和編寫使用結(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ù)類型,在一個組合項中包含若干個類型不同的數(shù)據(jù)項的數(shù)據(jù)結(jié)構(gòu)。例:定義一個職工Employee結(jié)構(gòu)數(shù)據(jù)類型,它包括姓名,職工編號,工資,地址,電話。structEmployee
{
charname[20];
longcode;
floatsalary;
charaddress[50];
charphone[11];
};//分號是必需的第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)變量。定義一個結(jié)構(gòu)類型并不分配內(nèi)存,定義一個結(jié)構(gòu)變量時才分配內(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時需要結(jié)構(gòu)BB,而定義結(jié)構(gòu)BB時又需要AA,方法是先給出一個結(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)類型的長度等于其所包含的每個數(shù)據(jù)成員長度之和。如上例中A,B,C,D,E,F(xiàn)的長度分別為12,17,24,12,25,12。
(3)使用結(jié)構(gòu)類型定義對象時,保留字struct不能省略,為簡便起見可通過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)建一個動態(tài)結(jié)構(gòu)變量或結(jié)構(gòu)數(shù)組后返回的同樣是對應(yīng)的存儲空間的首地址,把這個首地址賦給一個結(jié)構(gòu)指針后,就可以利用這個指針訪問所指向的動態(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)類型的同時定義變量
struct
結(jié)構(gòu)類型名
{
成員定義1;
成員定義2;
……
成員定義n;
}變量名列表;
第7章結(jié)構(gòu)和聯(lián)合7.2結(jié)構(gòu)變量的定義和初始化2.在定義結(jié)構(gòu)類型的同時定義變量
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)類型的同時定義變量
struct
{
成員定義1;
成員定義2;
……
成員定義n;
}變量名列表;
第7章結(jié)構(gòu)和聯(lián)合7.2結(jié)構(gòu)變量的定義和初始化3.定義無名結(jié)構(gòu)類型的同時定義變量
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é)號的記錄,若能夠找到,則表明查找成功,返回元素下標(biāo),否則返回-1,表示查找失敗。第7章結(jié)構(gòu)和聯(lián)合7.5結(jié)構(gòu)與函數(shù)例7_2從Student結(jié)構(gòu)數(shù)組中更新某一給定學(xué)號的記錄,若更新成功則返回1,否則將新記錄插入到數(shù)組末尾,并修改數(shù)組長度為已有長度加1,同時返回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ù)組是長度固定的數(shù)據(jù)結(jié)構(gòu),數(shù)組元素順序、連續(xù)地存放在固定大小的內(nèi)存空間中。鏈表是由節(jié)點(diǎn)組成的非連續(xù)的動態(tài)數(shù)據(jù)結(jié)構(gòu),鏈表中的節(jié)點(diǎn)在需要時可由new運(yùn)算動態(tài)地創(chuàng)建并加入到鏈表中。數(shù)組具有隨機(jī)存取特性;鏈表具有順序存取特性。第7章結(jié)構(gòu)和聯(lián)合7.6結(jié)構(gòu)與鏈表1.鏈表的定義鏈表經(jīng)常用來存儲需要動態(tài)變化的數(shù)據(jù),因?yàn)殒湵淼牟迦牒蛣h除操作是比較方便的。鏈表中結(jié)點(diǎn)的存儲空間通常是調(diào)用動態(tài)存儲分配函數(shù)得到的,若不通過free()函數(shù)及時回收結(jié)點(diǎn),則動態(tài)分配的結(jié)點(diǎn)空間會一直持續(xù)到程序運(yùn)行結(jié)束。一個鏈表結(jié)構(gòu)的示意圖如下:
485672830fdatanext第7章結(jié)構(gòu)和聯(lián)合7.6結(jié)構(gòu)與鏈表2.鏈表的建立操作下例的createList函數(shù)可以從鍵盤上輸入的n個整數(shù)建立一個具有n個結(jié)點(diǎn),每個結(jié)點(diǎn)為IntNode類型的鏈表,f為表頭指針。參見program7_4.cpp。3.鏈表的遍歷操作下例的traversalList函數(shù)是一個遍歷鏈表的算法,從表頭指針指向的表頭結(jié)點(diǎn)開始,順序訪問每個結(jié)點(diǎn),直到結(jié)點(diǎn)的指針域?yàn)榭諘r止。參見program7_4.cpp。4.使用鏈表的程序舉例,參見program7_4.cpp。第7章結(jié)構(gòu)和聯(lián)合7.7聯(lián)合1.聯(lián)合的定義聯(lián)合也是一種用戶定義的數(shù)據(jù)類型,由若干個數(shù)據(jù)成員組成。和結(jié)構(gòu)的差別是:任一時刻,結(jié)構(gòu)中的所有成員都是課訪問的,而聯(lián)合中只有一個成員是可訪問的,其余所有成員都是不可訪問的。聯(lián)合和結(jié)構(gòu)存儲的差別:每個結(jié)構(gòu)對象包含有全部數(shù)據(jù)成員的存儲空間,它所占用的存儲空間的大小等于所有數(shù)據(jù)成員占有的存儲空間大小的總和;每個聯(lián)合對象所占用存儲空間的大小等于所有數(shù)據(jù)成員中占有的存儲空間的最大值。第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)合對象的存儲空間分配假定有:struct
stypex;
struct
utypey;結(jié)構(gòu)對象x的大小等于所有4個數(shù)據(jù)成員的大小之和,即1+4+4+8=17。聯(lián)合對象y的大小等于所有4個數(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)允許對結(jié)構(gòu)中的每個數(shù)據(jù)成員按照定義的次序
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年大學(xué)港口航道與海岸工程(港口航道設(shè)計)試題及答案
- 2025年高職網(wǎng)絡(luò)安全技術(shù)(技術(shù)實(shí)操訓(xùn)練)試題及答案
- 2025年中職城市軌道交通運(yùn)營服務(wù)(行車組織)試題及答案
- 2025年中職(中醫(yī)基礎(chǔ))經(jīng)絡(luò)識別階段測試試題及答案
- 禁吸戒毒業(yè)務(wù)培訓(xùn)課件
- 2025 小學(xué)二年級科學(xué)上冊認(rèn)識蝌蚪的四肢生長課件
- 光伏質(zhì)量培訓(xùn)課件教學(xué)
- 2025年半年度可持續(xù)金融報告
- 云南省部分學(xué)校2025-2026學(xué)年七年級上學(xué)期期中歷史試題(含答案)
- 2026山東菏澤曹州醫(yī)院招聘備考題庫及答案詳解一套
- 初中語文仿寫訓(xùn)練
- 老同學(xué)聚會群主的講話發(fā)言稿
- 天然氣輸氣管線陰極保護(hù)施工方案
- 高血壓問卷調(diào)查表
- QC成果提高花崗巖磚鋪裝質(zhì)量
- YS/T 416-2016氫氣凈化用鈀合金管材
- GB/T 25156-2010橡膠塑料注射成型機(jī)通用技術(shù)條件
- GB/T 20878-2007不銹鋼和耐熱鋼牌號及化學(xué)成分
- 第六章 亞洲 第一節(jié) 概述
- 第六單元作文素材:批判與觀察 高一語文作文 (統(tǒng)編版必修下冊)
- 全新版尹定邦設(shè)計學(xué)概論1課件
評論
0/150
提交評論