

下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、C語(yǔ)言程序設(shè)計(jì)11繃桝B第十一章I 11 1結(jié)構(gòu)體及其類(lèi)型定義已介紹的數(shù)據(jù)類(lèi)型:簡(jiǎn)單變量、數(shù)組、指針。存在的問(wèn)題:難以處理一些較復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。例:建立學(xué)生檔案每一個(gè)學(xué)生的:學(xué)號(hào)(int num)姓名(char name20)性別(char sex)年齡(int age)成績(jī)(float score)地址(char addr30)C程序可將上述數(shù)據(jù)的集合定義為一種結(jié)構(gòu)體類(lèi)型:struct student int num;char name20;char sex;int age;float score; char addr30;上述定義中:struct關(guān)鍵詞(保留字),表示定義一種結(jié) 構(gòu)體類(lèi)型。
2、strudent-結(jié)構(gòu)體名結(jié)構(gòu)體定義的一般形式:struct結(jié)構(gòu)體名 成員表列;成員表列:類(lèi)型標(biāo)識(shí)符 成員名以上僅說(shuō)明了定義一種類(lèi)型的方法,尚未定 義變量。女口:struct exp -結(jié)構(gòu)體名 int times;=char flag; L成員表列float meter; U11.2三種方法可用來(lái)定義結(jié)構(gòu)體變量:一、先定義結(jié)構(gòu)體類(lèi)型再定義結(jié)構(gòu)體變量例:struct studentint num;char name20;char sex;int age;float score;char addr30;struct student xpx2;i類(lèi)型標(biāo)識(shí)符則X, X?為student結(jié)構(gòu)型變量,x
3、bx?可存 放student類(lèi)型數(shù)據(jù)。二、在定義結(jié)構(gòu)體類(lèi)型的同時(shí)定義變量:定義形式struct結(jié)構(gòu)體名成員表列變量名表列;例:struct student int num;char name20;char sex;int age;char addr30; xl, x2;三、直接定義結(jié)構(gòu)類(lèi)型變量定義形式struct成員表列變量名表列; 不出現(xiàn)結(jié)構(gòu)體類(lèi)型名如:stract int numchar name20J;char sex;int age;char addr30; xl, x2;幾點(diǎn)說(shuō)明:1.類(lèi)型名與變量名是不同的概念2.允許成員名又為另一個(gè)已定義的結(jié)構(gòu)型變量3.每一個(gè)成員地位如同該類(lèi)型的變
4、量4.成員名與程序中的變量名可相同但意義不同一個(gè)嵌套定義的例子:struct date int month;int day;int year;struct studentint num;char name20J;char sex;int age;struct date birthday;char addr3O; Xi,x2;X或x2num引用結(jié)構(gòu)體變量實(shí)質(zhì)上為引用其成員用分量運(yùn)算符優(yōu)先級(jí)最高女H:X為student型變量,貝U Xnum:表示X的學(xué)號(hào)xname:表示X的名字Xj.birthday.day:表示X的出生日1只能用成員,不可用結(jié)構(gòu)體變量名直接運(yùn)算2.每一個(gè)分量的引用與其同類(lèi)型的簡(jiǎn)單
5、變量的引用 相同。11.例如:關(guān)于結(jié)構(gòu)成員的操作。struct date結(jié)構(gòu) 8 定乂 jnt month;int day;int year;today;與其它變量的初始化完全一樣,結(jié)構(gòu)體變量 在定義時(shí)可初始化:struct student xl=8906,HLi Ming ”,o 開(kāi)始語(yǔ)句:today.month=9;today.day=22;|CPU|todaytoday. year=1999;monthday11.4結(jié)構(gòu)體變量的初始化25, & 3, 192& ”Yu Lushan 123 ”關(guān)于結(jié)構(gòu)體變量的幾點(diǎn)說(shuō)明二1結(jié)構(gòu)體變不是一個(gè)簡(jiǎn)單變量,它的值是 由許多個(gè)基本數(shù)據(jù)
6、組成。2.在內(nèi)存中占有一段連續(xù)的存儲(chǔ)單元3.占有的連續(xù)存儲(chǔ)單元大小取決于成員的數(shù) 據(jù)類(lèi)型如:struct exp int a;float b;char yn8J;struct exp x= 1234, 56.7, text”若X的起始地址為2000,則x在內(nèi)存中 占有的存儲(chǔ)單元為:共用14個(gè)字節(jié)的連續(xù)單元4.結(jié)構(gòu)體定義利變量定義及初始化可二合為一:struct exp int a;float b;char yn8; x=1234, 56. 7, ”test”;但不能這樣寫(xiě):struct exp int a=1234;float b=56.7;char yn8J=,testn; x;123456
7、.7test02000ra2002b2006r yn820135.要注意結(jié)構(gòu)體變量的輸入/輸出.若有truct student h;則:scanf(n%sH, &h); printf(n%s h);:結(jié)構(gòu)體的數(shù)據(jù)項(xiàng)。正確方法:對(duì)結(jié)構(gòu)體變量各成員的值進(jìn)行輸入/輸出。如:scanf(u%d%sn,&h.num,);11.I 1 J數(shù)組元素的類(lèi)型可以是結(jié)構(gòu)。同結(jié)構(gòu)體變量定義 類(lèi)似:struct ytudent w3;=-結(jié)構(gòu)體類(lèi)型標(biāo)識(shí)符則有三個(gè)元素wOJ, wl, w2.每一個(gè)元素為一 個(gè)結(jié)構(gòu)student型變量。wO.num:表示w0的學(xué)號(hào):表示wl的姓名
8、對(duì)w數(shù)組也可初始化:stmct student w|31=8901, Li Ming ;結(jié)構(gòu)成員類(lèi)型也可以是數(shù)組。例如:struct monthint number_of_days;char name3;;假設(shè)我們已經(jīng)說(shuō)明過(guò)結(jié)構(gòu)變量a.month,然后建立 結(jié)構(gòu)a_month如卜圖所示:玖計(jì)下一旬a(chǎn)_month.number_of_days=31;0_monthnameO=J;a_1 =*a,;a_mo n th. na me2=fn *;可省略大小說(shuō)明,直接用賦初值確定其大小stmct student w =.,例:有三個(gè)侯選人,每一侯選人的數(shù)據(jù)包括其姓 名和得票數(shù),則可
9、定義結(jié)構(gòu)類(lèi)型person和結(jié) 構(gòu)數(shù)組leaderstruct person char name20;int count; leader3=nLin, 0,“Zhang”,0,nHang ”,0;程序如下:/*expl4_l .c*/struct person char name20;int count; leader3=nLin, 0,Zhang”,0, ” Hang ”,0;main ()inti, j;char leader_name20;for (i=l; i=10; i+)scanf (H%sf leader_name);for (j=0; jv3; j+)if (strcmp (le
10、ader_name, )= =0)leaderj .count+;printf (nnn);for (i=0; i3; i+)printf(*%5s : %dn, , leaderi.count);運(yùn)行情況如下:輸入:Li IZnamecountLi IZLi0Hang Zhang0Zhang IZHang0Zhans tHang KLi 顯示:Li : 4Hang ”運(yùn)算符,num, pname, p score.稱(chēng)-為指向運(yùn)算符, 優(yōu)先級(jí)高于+,-O則:p num+l=(x1.num)4-4-先使用Xj.num,再加J1+p-num =+(X
11、.num)先使X.num力口1,再 用X.num令卩=&只1;則p為xl的首地址.X1numname角開(kāi)t引用結(jié)構(gòu)變量中的成員有三種方法:(1)結(jié)構(gòu)體變量名成員名xl.num(2)用指針變量(*p)成員名(*p).numI(3)用指向運(yùn)算符 T成員名p -numI注意:指針變量p必須是結(jié)構(gòu)指針型,且有p=&x 1;例:請(qǐng)指出下列程序的錯(cuò)誤所在:struct person char name20;int count; xl=ZhongHuan, 10;main() printf (n%sn%dn, (*p).name, (*p).count)可改為:struct per san
12、*p二、指向結(jié)構(gòu)體數(shù)組的指針與其他指向結(jié)構(gòu)體數(shù)組的指針一樣,可用指針 指向結(jié)構(gòu)體數(shù)組。例:struct student int num;char name20;char sex;int age;main () struct student stu3= 10101, Li Lin ”,M:, ;struct student *p;p=stu;while (pvstu+3)錯(cuò)誤的原因:p 不是結(jié)構(gòu)指針變量p=&x 1;printfC ,pnum, p name, p sex, p age);內(nèi)存結(jié)構(gòu)如下:P+1為指向 下一個(gè)元素的首地址。三.用指向結(jié)構(gòu)體的指針作函數(shù)參數(shù)用地址傳送,函數(shù)中形
13、參用指針變量,實(shí)參可用地址量或指針注:例/*expl4_3.c*/#include struct person char name20;int count; x3=MzhaoM, 4, MqianM, 3, MsunM,6; void prt(slructperson *pp);main() inti;for (i=0; inamc, pp-count);運(yùn)行結(jié)呆:zhao,4qian, 3sun, 6 11. 7鏈表i.什么是鏈表?一種動(dòng)態(tài)分配的數(shù)據(jù)結(jié)構(gòu)。是用指針變量將非連續(xù)的數(shù)據(jù)塊連成一 個(gè)整體的一種數(shù)據(jù)結(jié)構(gòu)。*解決了數(shù)組存放數(shù)據(jù)的弊端I*解決了內(nèi)存分配零亂的問(wèn)題例如::為數(shù)據(jù)塊, 又稱(chēng)為
14、鏈表的結(jié)點(diǎn), 由兩部分 組成,數(shù)據(jù)和指針。數(shù)據(jù):該結(jié)點(diǎn)的具體數(shù)據(jù)指針:下一個(gè)結(jié)點(diǎn)的地址實(shí)現(xiàn)方法:1.用結(jié)構(gòu)型變量表示每一個(gè)結(jié)點(diǎn);2.用指向該種類(lèi)型的結(jié)構(gòu)指針作為表頭;3.每一個(gè)結(jié)點(diǎn)屮包含同種類(lèi)型的指針變、量川以存放卜一個(gè)結(jié)點(diǎn)的地址。S數(shù)據(jù)DHead:稱(chēng)實(shí)現(xiàn)過(guò)程中用到的三個(gè)函數(shù)(由系統(tǒng)提供)* malloc(size)內(nèi)存分配函數(shù),在動(dòng)態(tài)區(qū)中分配一個(gè)長(zhǎng)度為size的連續(xù)空間,分配成功,返回一個(gè)指向該空間 首地址的指針,未成功,返回值=0.2.建立鏈表例:寫(xiě)一個(gè)函數(shù),建立5名學(xué)生數(shù)據(jù)的單向鏈表, 每一個(gè)學(xué)生的數(shù)據(jù)塊(結(jié)點(diǎn))定義如下:struct student long num;float score;struct student *next;同時(shí)定義三個(gè)指向這種類(lèi)型的指針變量head, p|, p2.開(kāi)始headnullPi:新分配的結(jié)點(diǎn)地址p2:已分配的最后一個(gè)結(jié)點(diǎn)地址約定:當(dāng)輸入學(xué)號(hào)=0時(shí),結(jié)束,返回表頭#defin
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CCMA 0148-2023擦窗機(jī)使用手冊(cè)編制規(guī)則
- T/CCMA 0132-2022多功能路緣結(jié)構(gòu)物滑模攤鋪施工規(guī)程
- T/CCMA 0129-2022非道路電動(dòng)車(chē)輛電機(jī)控制器通用技術(shù)要求及試驗(yàn)方法
- T/CCASC 1001-2020氯乙烯氣柜安全運(yùn)行規(guī)程
- T/CCAS 020-2021水泥凝結(jié)時(shí)間自動(dòng)測(cè)定儀驗(yàn)證與綜合評(píng)價(jià)規(guī)范
- T/CCAAS 003-2019新時(shí)代國(guó)有企業(yè)黨建+企業(yè)文化工作指南
- T/CC 8-2023盾構(gòu)機(jī)盾尾密封油脂
- T/CARSA 1.6-2022基于低空無(wú)人機(jī)的高分衛(wèi)星遙感產(chǎn)品真實(shí)性檢驗(yàn)第6部分:多光譜、高光譜遙感影像數(shù)據(jù)與激光雷達(dá)數(shù)據(jù)預(yù)處理
- T/CAQI 16-2016家用和類(lèi)似用途飲用水處理裝置用納濾膜元件
- 丹東醫(yī)院面試題及答案
- 《陸上風(fēng)電場(chǎng)工程概算定額》NBT 31010-2019
- 干部人事檔案轉(zhuǎn)遞單表樣
- 關(guān)于中國(guó)文化遺產(chǎn)北京故宮的資料
- 太陽(yáng)能光伏儲(chǔ)能技術(shù)課件
- 威尼斯畫(huà)派課件
- 新中考考試平臺(tái)-考生端V2.0使用手冊(cè)
- 心肌病-PPT課件
- 施工安全常識(shí)教育-鋼筋工
- 五年級(jí)期中考試家長(zhǎng)會(huì)課件39846
- 培養(yǎng)基模擬灌裝方案
- 集裝袋噸袋項(xiàng)目建議書(shū)范文
評(píng)論
0/150
提交評(píng)論