版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
結(jié)構(gòu)體和共用體第一頁(yè),共五十三頁(yè),2022年,8月28日結(jié)構(gòu)體(structure)是一種數(shù)據(jù)類型,它把互相聯(lián)系的數(shù)據(jù)組合成一個(gè)整體。例、第二頁(yè),共五十三頁(yè),2022年,8月28日一個(gè)學(xué)生的學(xué)號(hào)、姓名、性別、年齡、成績(jī)、地址,是互相聯(lián)系的數(shù)據(jù),在C語(yǔ)言中用“結(jié)構(gòu)體(structure)”來(lái)定義。structstudent
{
int
num;
/*學(xué)號(hào)*/
char
name[20];
/*姓名*/
char
sex;
/*性別*/
int
age;
/*年齡*/
float
score;
/*成績(jī)*/
char
addr[30];
/*地址*/
};
第三頁(yè),共五十三頁(yè),2022年,8月28日§11.2結(jié)構(gòu)體變量的定義結(jié)構(gòu)體是一種數(shù)據(jù)類型(像int、char、flaot數(shù)據(jù)類型一樣),可以用它定義變量。
用結(jié)構(gòu)體類型定義變量的方式有三種:第四頁(yè),共五十三頁(yè),2022年,8月28日一、先定義結(jié)構(gòu)體類型,再定義變量例、structstudent
{
int
num;
char
name[20];
char
sex;
int
age;
float
score;
char
addr[30];
};structstudentstudent1,student2;
第五頁(yè),共五十三頁(yè),2022年,8月28日結(jié)構(gòu)體變量中的各成員,在內(nèi)存中順序存放。結(jié)構(gòu)體變量所占內(nèi)存大小用運(yùn)算符sizeof計(jì)算。例、printf("%d%d\n",sizeof(structstudent),sizeof(student1));第六頁(yè),共五十三頁(yè),2022年,8月28日為了方便,可以這樣定義結(jié)構(gòu)體變量:#defineSTUDENTstructstudentSTUDENT
{
int
num;
char
name[20];
char
sex;
int
age;
float
score;
char
addr[30];
};STUDENTstudent1,student2;第七頁(yè),共五十三頁(yè),2022年,8月28日二、在定義類型的同時(shí)定義變量structstudent
{
int
num;
char
name[20];
char
sex;
int
age;
float
score;
char
addr[30];
}student1,student2;第八頁(yè),共五十三頁(yè),2022年,8月28日三、直接定義變量struct
{
int
num;
char
name[20];
char
sex;
int
age;
float
score;
char
addr[30];
}student1,student2;第九頁(yè),共五十三頁(yè),2022年,8月28日四、成員是另一個(gè)結(jié)構(gòu)體變量structdate
{
intmonth;
intday;
intyear;
};structstudent
{
int
num;
char
name[20];
char
sex;
int
age;
structdatebirthday;
char
addr[30];
}student1,student2;
第十頁(yè),共五十三頁(yè),2022年,8月28日第十一頁(yè),共五十三頁(yè),2022年,8月28日§11.3結(jié)構(gòu)體變量的引用1、一般情況下,不能將一個(gè)結(jié)構(gòu)體變量作為整體來(lái)引用,只能引用其中的成員(分量)。引用結(jié)構(gòu)體成員的方式:
結(jié)構(gòu)體變量名.成員名.是“成員運(yùn)算符”
例1、
printf("%d,%s,%c,%d,%f,%s",student1.num,,student1.sex,
student1.age,student1.score,sutdent1.addr);
printf("%d,%s,%c,%d,%f,%s",student1);第十二頁(yè),共五十三頁(yè),2022年,8月28日例2、
student2.score=student1.score;
sum=student1.score+student2.score;
student1.age++;
++student1.age;例3、
scanf("%d",&student1.num);第十三頁(yè),共五十三頁(yè),2022年,8月28日2、當(dāng)成員是另一個(gè)結(jié)構(gòu)體變量時(shí),應(yīng)一級(jí)一級(jí)地引用成員。例4、
student1.num;
;
student1.birthday.month;
student1.birthday.day;
student1.birthday.year;第十四頁(yè),共五十三頁(yè),2022年,8月28日3、僅在以下兩種情況下,可以把結(jié)構(gòu)體變量作為一個(gè)整體來(lái)訪問(wèn)。(1)結(jié)構(gòu)體變量整體賦值,例、
student2=student1;(2)取結(jié)構(gòu)體變量地址,例、
printf("%x",&student1);
返回本章目錄第十五頁(yè),共五十三頁(yè),2022年,8月28日§11.4結(jié)構(gòu)體變量的初始化structstudent
{
longintnum;
char
name[20];
char
sex;
char
addr[20];}a={89031,"LiLin",'M',"123BeijingRoad"};注意:不能在結(jié)構(gòu)體內(nèi)賦初值。例、structstudent
{
longintnum=89031;
char
name[20]="LiLin";
char
sex='M';
char
addr[30]="123BejingRoad";
}a;第十六頁(yè),共五十三頁(yè),2022年,8月28日§11.5結(jié)構(gòu)體數(shù)組一、結(jié)構(gòu)體數(shù)組的定義
structstudent
{
intnum;
charname[20];
charsex;
intage;
floatscore;
charaddr[30];
};
structstudentstu[3];
第十七頁(yè),共五十三頁(yè),2022年,8月28日第十八頁(yè),共五十三頁(yè),2022年,8月28日二、結(jié)構(gòu)體數(shù)組的初始化(見(jiàn)課本P266)
structstudent
{
intnum;
charname[20];
charsex;
intage;
floatscore;
charaddr[30];
}stu[3]={
{10101,"LiLin",
'M',18,87.5,"103BejingRoad"},
{10102,"ZhangFun",'M',19,99,
"130ShanghaiRoaad"},
{10104,"WangMin",'F',20,78.5,"1010ZhongshanRoad"}};第十九頁(yè),共五十三頁(yè),2022年,8月28日三、舉例[例11.2]對(duì)候選人得票的統(tǒng)計(jì)程序。設(shè)有三個(gè)候選人,每次輸入一個(gè)得票的候選人的名字,要求最后輸出各候選人得票結(jié)果。運(yùn)行第二十頁(yè),共五十三頁(yè),2022年,8月28日§11.6結(jié)構(gòu)體指針一、結(jié)構(gòu)體指針結(jié)構(gòu)體指針:指向結(jié)構(gòu)體變量的指針。例、第二十一頁(yè),共五十三頁(yè),2022年,8月28日structstudent
{
longintnnum;
char
name[20];
char
sex;
float
score;
};
structstudentstu_1;
structstudent*p;
p=&stu_1;第二十二頁(yè),共五十三頁(yè),2022年,8月28日結(jié)構(gòu)體指針,通過(guò)指向運(yùn)算符->引用結(jié)構(gòu)體中的成員。例、
p->num
p->name
p->sex
p->score因此結(jié)構(gòu)體成員的引用方式有以下三種:
結(jié)構(gòu)體變量.成員名
(*p).成員名
p->成員名第二十三頁(yè),共五十三頁(yè),2022年,8月28日三、指向結(jié)構(gòu)體數(shù)組的指針例1:
structstudentstu[3];
structstudent*p=stu;
p++;p++;
第二十四頁(yè),共五十三頁(yè),2022年,8月28日
structstudentstu[3];
structstudent*p;p=stu;
p->num;
p++;
p->num;
p++;
p->num;
第二十五頁(yè),共五十三頁(yè),2022年,8月28日三、用結(jié)構(gòu)指針作函數(shù)的參數(shù)[例11.5]有一個(gè)結(jié)構(gòu)體變量stu,內(nèi)含學(xué)生學(xué)號(hào)、姓名和三門(mén)課程的成績(jī)。要求在main中賦初值,在函數(shù)print中打印輸出。運(yùn)行第二十六頁(yè),共五十三頁(yè),2022年,8月28日說(shuō)明:1、結(jié)構(gòu)體的成員作函數(shù)的參數(shù)。與普通變量作函數(shù)參數(shù)的用法相同。值傳送,不能修改實(shí)參的值。2、結(jié)構(gòu)體指針作函數(shù)的參數(shù)。將結(jié)構(gòu)體的地址傳送給函數(shù),效率高,可以修改實(shí)參的值。3、結(jié)構(gòu)體作函數(shù)的參數(shù)。將結(jié)構(gòu)體的全部成員值傳送給函數(shù),效率低,不能修改實(shí)參的值。第二十七頁(yè),共五十三頁(yè),2022年,8月28日四、舉例
[例11.6]有4個(gè)學(xué)生,每個(gè)學(xué)生包括學(xué)號(hào)、姓名和成績(jī)。要求找出成績(jī)最高者的姓名和成績(jī)。
返回本章目錄運(yùn)行第二十八頁(yè),共五十三頁(yè),2022年,8月28日§11.8共用體一、共用體的概念當(dāng)需要把不同類型的變量存放到同一段內(nèi)存單元,或?qū)ν欢蝺?nèi)存單元的數(shù)據(jù)按不同類型處理,則需要使用“共用體”數(shù)據(jù)結(jié)構(gòu)。例、把一個(gè)整型變量、一個(gè)字符型變量、一個(gè)實(shí)型變量放在同一個(gè)地址開(kāi)始的內(nèi)存單元中。共用體的定義形式:
union共用體名
{
成員列表;
}變量列表;例、第二十九頁(yè),共五十三頁(yè),2022年,8月28日uniondata
{
inti;
charch;
floatf;
}第三十頁(yè),共五十三頁(yè),2022年,8月28日注意區(qū)分:“共用體”:各成員占相同的起始地址,所占內(nèi)存長(zhǎng)度等于最長(zhǎng)的成員所占內(nèi)存。“結(jié)構(gòu)體”:各成員占不同的地址,所占內(nèi)存長(zhǎng)度等于全部成員所占內(nèi)存之和。第三十一頁(yè),共五十三頁(yè),2022年,8月28日二、共用體變量的引用只能引用共用體變量的成員,如、
uniondataa;
a.i;
a.ch;
a.f;第三十二頁(yè),共五十三頁(yè),2022年,8月28日三、共用體類型數(shù)據(jù)的特點(diǎn)1、共用體變量中的值是最后一次存放的成員的值,如:
a.i=1;
a.ch='a';
a.f=1.5;
完成以上三個(gè)賦值語(yǔ)句后,共用體變量的值是1.5,而a.i=1和a.ch=‘a(chǎn)’已無(wú)意義。第三十三頁(yè),共五十三頁(yè),2022年,8月28日2、共用體變量不能初始化,例、
uniondata
{
inti;
charch;
floatf;
}a={1,'a',1.5};第三十四頁(yè),共五十三頁(yè),2022年,8月28日
[例11.11]設(shè)有若干個(gè)人員的數(shù)據(jù),其中有學(xué)生和教師。學(xué)生數(shù)據(jù)包括:姓名、號(hào)碼、性別、職業(yè)、班級(jí)。教師數(shù)據(jù)包括:姓名、號(hào)碼、性別、職業(yè)、職務(wù)。如圖、
分析:學(xué)生數(shù)據(jù)的class(班級(jí))和教師數(shù)據(jù)的position(職務(wù))類型不同,但在同一表格中,使用“共用體”數(shù)據(jù)結(jié)構(gòu)。運(yùn)行第三十五頁(yè),共五十三頁(yè),2022年,8月28日§11.9枚舉類型如果一個(gè)變量只有幾種可能的值,可以定義為枚舉類型。
“枚舉”:將變量可能的值一一列舉出來(lái)。變量的值只能取列舉出來(lái)的值之一。第三十六頁(yè),共五十三頁(yè),2022年,8月28日用關(guān)鍵字enum定義枚舉類型:例、enumweekday{sun,mon,tue,wed,thu,fri,sat};weekday是枚舉類型名,可以用于定義變量,如、enumweekdayworkday,week_end;
weekday=mon;
week_end=sun;sun、mon、....、sat稱為“枚舉元素”或“枚舉常量”。第三十七頁(yè),共五十三頁(yè),2022年,8月28日說(shuō)明:1、枚舉元素是常量。在C編譯器中,按定義的順序取值0、1、2、...。
例、
weekday=mon;
printf("%d",weekday);輸出整數(shù)1。2、枚舉元素是常量,不是變量,因此不能賦值。
sun=0;mon=1;但在定義枚舉類型時(shí),可以指定枚舉常量的值,如、
enumweekday{sun=7,mon=1,tue,wed,thu,fri,sat};此時(shí),tue、wed、...的值從mon的值順序加1。如,tue=2。第三十八頁(yè),共五十三頁(yè),2022年,8月28日3、枚舉值可以作判斷,例、
if(weekday==mon)....
if(weekday>sun)....4、整型與枚舉類型是不同的數(shù)據(jù)類型,不能直接賦值,如、
workday=2;/*workday是枚舉類型*/但可以通過(guò)強(qiáng)制類型轉(zhuǎn)換賦值,如、
workday=(enumweekday)2;第三十九頁(yè),共五十三頁(yè),2022年,8月28日[例11.12]口袋里有紅、黃、藍(lán)、白、黑五種顏色的球若干個(gè)。每次從口袋中取出三個(gè)球,打印出三種不同顏色球的可能取法。
分析:球的顏色只可能取五種值,用枚舉類型變量處理。
運(yùn)行第四十頁(yè),共五十三頁(yè),2022年,8月28日§11.10用typedef定義類型一、概念關(guān)鍵字typedef用于定義一種新的數(shù)據(jù)類型,它代表已有數(shù)據(jù)類型,是已有數(shù)據(jù)類型的別名。例、
typedefintINTEGER;
typedeffloatREAL;
定義新數(shù)據(jù)類型INTEGER,它代表已有數(shù)據(jù)類型int。
定義新數(shù)據(jù)類型REAL,它代表已有數(shù)據(jù)類型float。通過(guò)上述定義后,以下兩行等價(jià):
int
i,j;floata,b;
INTEGERi,j;REAL
a,b;第四十一頁(yè),共五十三頁(yè),2022年,8月28日二、典型用法:1、定義一種新數(shù)據(jù)類型,專用于某種類型的變量,使程序更清晰明了。例1、typedefunsignedintsize_t
size_tsize;/*定義size為無(wú)符號(hào)整型變量*/例2、typedefintCOUNT
COUNTi,j;第四十二頁(yè),共五十三頁(yè),2022年,8月28日2、簡(jiǎn)化數(shù)據(jù)類型的書(shū)寫(xiě)。例3、typedefstruct
{
intmonth;
intday;
intyear;
}DATE;
DATEbirthday;
DATE*p;
DATEd[7];例4、typdefunsignedintUINT;
UINTi,j;第四十三頁(yè),共五十三頁(yè),2022年,8月28日三、定義新類型的更一般形式:(1)typedefintNUM[100];/*申明NUM為整型數(shù)組類型*/
NUMn;/*n為整型數(shù)組變量*/(2)typedefchar*STRING;/*申明STRING是字符指針類型*/
STRINGp,s[10];/*p是字符指針變量,s[10]是字符指針數(shù)組*/第四十四頁(yè),共五十三頁(yè),2022年,8月28日(3)typedefint(*POINTER)();
/*POINTER是指向函數(shù)的指針,該函數(shù)返回整型*/
POINTERp1,p2;/*定義p1,p2為指向函數(shù)的指針*/第四十五頁(yè),共五十三頁(yè),2022年,8月28日四、typedef與#define的區(qū)別
typedefintCOUNT
#defineCOUNTinttypedef定義一種新的數(shù)據(jù)類型(CO
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 網(wǎng)易公司招聘筆試題目及答案
- 物理原創(chuàng)題庫(kù)及答案
- 資產(chǎn)評(píng)估自考試題及答案
- 余姚辦公樓拆除施工方案
- 術(shù)后呼吸支持患者的營(yíng)養(yǎng)支持策略
- 術(shù)后PE抗栓治療的個(gè)體化用藥方案
- 術(shù)前心臟藥物劑量個(gè)體化調(diào)整策略
- 術(shù)前禁食禁飲高溫手術(shù)調(diào)整方案
- 天合光能秋招面試題目及答案
- 消防埋地管漏水施工方案
- GB/T 18894-2016電子文件歸檔與電子檔案管理規(guī)范
- GB 10133-2014食品安全國(guó)家標(biāo)準(zhǔn)水產(chǎn)調(diào)味品
- 急診科主任-個(gè)人述職報(bào)告-課件
- 水肥一體化控制系統(tǒng)實(shí)施方案
- 采氣工程課件
- 工時(shí)的記錄表
- 統(tǒng)編版六年級(jí)道德與法治上冊(cè)《期末測(cè)試卷》測(cè)試題教學(xué)課件PPT小學(xué)公開(kāi)課
- 金屬材料與熱處理全套ppt課件完整版教程
- 熱拌瀝青混合料路面施工機(jī)械配置計(jì)算(含表格)
- 水利施工CB常用表格
- 微生物限度檢查室空調(diào)凈化系統(tǒng)確認(rèn)方案
評(píng)論
0/150
提交評(píng)論