c語言第11章結(jié)構(gòu)體和共同體(精)_第1頁
c語言第11章結(jié)構(gòu)體和共同體(精)_第2頁
免費(fèi)預(yù)覽已結(jié)束,剩余26頁可下載查看

下載本文檔

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

文檔簡介

1、C語言程序設(shè)計11繃桝B第十一章I 11 1結(jié)構(gòu)體及其類型定義已介紹的數(shù)據(jù)類型:簡單變量、數(shù)組、指針。存在的問題:難以處理一些較復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。例:建立學(xué)生檔案每一個學(xué)生的:學(xué)號(int num)姓名(char name20)性別(char sex)年齡(int age)成績(float score)地址(char addr30)C程序可將上述數(shù)據(jù)的集合定義為一種結(jié)構(gòu)體類型:struct student int num;char name20;char sex;int age;float score; char addr30;上述定義中:struct關(guān)鍵詞(保留字),表示定義一種結(jié) 構(gòu)體類型。

2、strudent-結(jié)構(gòu)體名結(jié)構(gòu)體定義的一般形式:struct結(jié)構(gòu)體名 成員表列;成員表列:類型標(biāo)識符 成員名以上僅說明了定義一種類型的方法,尚未定 義變量。女口:struct exp -結(jié)構(gòu)體名 int times;=char flag; L成員表列float meter; U11.2三種方法可用來定義結(jié)構(gòu)體變量:一、先定義結(jié)構(gòu)體類型再定義結(jié)構(gòu)體變量例:struct studentint num;char name20;char sex;int age;float score;char addr30;struct student xpx2;i類型標(biāo)識符則X, X?為student結(jié)構(gòu)型變量,x

3、bx?可存 放student類型數(shù)據(jù)。二、在定義結(jié)構(gòu)體類型的同時定義變量:定義形式struct結(jié)構(gòu)體名成員表列變量名表列;例:struct student int num;char name20;char sex;int age;char addr30; xl, x2;三、直接定義結(jié)構(gòu)類型變量定義形式struct成員表列變量名表列; 不出現(xiàn)結(jié)構(gòu)體類型名如:stract int numchar name20J;char sex;int age;char addr30; xl, x2;幾點說明:1.類型名與變量名是不同的概念2.允許成員名又為另一個已定義的結(jié)構(gòu)型變量3.每一個成員地位如同該類型的變

4、量4.成員名與程序中的變量名可相同但意義不同一個嵌套定義的例子: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)體變量實質(zhì)上為引用其成員用分量運(yùn)算符優(yōu)先級最高女H:X為student型變量,貝U Xnum:表示X的學(xué)號xname:表示X的名字Xj.birthday.day:表示X的出生日1只能用成員,不可用結(jié)構(gòu)體變量名直接運(yùn)算2.每一個分量的引用與其同類型的簡單

5、變量的引用 相同。11.例如:關(guān)于結(jié)構(gòu)成員的操作。struct date結(jié)構(gòu) 8 定乂 jnt month;int day;int year;today;與其它變量的初始化完全一樣,結(jié)構(gòu)體變量 在定義時可初始化:struct student xl=8906,HLi Ming ”,o 開始語句: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)體變量的幾點說明二1結(jié)構(gòu)體變不是一個簡單變量,它的值是 由許多個基本數(shù)據(jù)

6、組成。2.在內(nèi)存中占有一段連續(xù)的存儲單元3.占有的連續(xù)存儲單元大小取決于成員的數(shù) 據(jù)類型如:struct exp int a;float b;char yn8J;struct exp x= 1234, 56.7, text”若X的起始地址為2000,則x在內(nèi)存中 占有的存儲單元為:共用14個字節(jié)的連續(xù)單元4.結(jié)構(gòu)體定義利變量定義及初始化可二合為一:struct exp int a;float b;char yn8; x=1234, 56. 7, ”test”;但不能這樣寫: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ù)項。正確方法:對結(jié)構(gòu)體變量各成員的值進(jìn)行輸入/輸出。如:scanf(u%d%sn,&h.num,);11.I 1 J數(shù)組元素的類型可以是結(jié)構(gòu)。同結(jié)構(gòu)體變量定義 類似:struct ytudent w3;=-結(jié)構(gòu)體類型標(biāo)識符則有三個元素wOJ, wl, w2.每一個元素為一 個結(jié)構(gòu)student型變量。wO.num:表示w0的學(xué)號:表示wl的姓名

8、對w數(shù)組也可初始化:stmct student w|31=8901, Li Ming ;結(jié)構(gòu)成員類型也可以是數(shù)組。例如:struct monthint number_of_days;char name3;;假設(shè)我們已經(jīng)說明過結(jié)構(gòu)變量a.month,然后建立 結(jié)構(gòu)a_month如卜圖所示:玖計下一旬a(chǎn)_month.number_of_days=31;0_monthnameO=J;a_1 =*a,;a_mo n th. na me2=fn *;可省略大小說明,直接用賦初值確定其大小stmct student w =.,例:有三個侯選人,每一侯選人的數(shù)據(jù)包括其姓 名和得票數(shù),則可

9、定義結(jié)構(gòu)類型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.稱-為指向運(yùn)算符, 優(yōu)先級高于+,-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角開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;例:請指出下列程序的錯誤所在: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)錯誤的原因:p 不是結(jié)構(gòu)指針變量p=&x 1;printfC ,pnum, p name, p sex, p age);內(nèi)存結(jié)構(gòu)如下:P+1為指向 下一個元素的首地址。三.用指向結(jié)構(gòu)體的指針作函數(shù)參數(shù)用地址傳送,函數(shù)中形

13、參用指針變量,實參可用地址量或指針注:例/*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.什么是鏈表?一種動態(tài)分配的數(shù)據(jù)結(jié)構(gòu)。是用指針變量將非連續(xù)的數(shù)據(jù)塊連成一 個整體的一種數(shù)據(jù)結(jié)構(gòu)。*解決了數(shù)組存放數(shù)據(jù)的弊端I*解決了內(nèi)存分配零亂的問題例如::為數(shù)據(jù)塊, 又稱為

14、鏈表的結(jié)點, 由兩部分 組成,數(shù)據(jù)和指針。數(shù)據(jù):該結(jié)點的具體數(shù)據(jù)指針:下一個結(jié)點的地址實現(xiàn)方法:1.用結(jié)構(gòu)型變量表示每一個結(jié)點;2.用指向該種類型的結(jié)構(gòu)指針作為表頭;3.每一個結(jié)點屮包含同種類型的指針變、量川以存放卜一個結(jié)點的地址。S數(shù)據(jù)DHead:稱實現(xiàn)過程中用到的三個函數(shù)(由系統(tǒng)提供)* malloc(size)內(nèi)存分配函數(shù),在動態(tài)區(qū)中分配一個長度為size的連續(xù)空間,分配成功,返回一個指向該空間 首地址的指針,未成功,返回值=0.2.建立鏈表例:寫一個函數(shù),建立5名學(xué)生數(shù)據(jù)的單向鏈表, 每一個學(xué)生的數(shù)據(jù)塊(結(jié)點)定義如下:struct student long num;float score;struct student *next;同時定義三個指向這種類型的指針變量head, p|, p2.開始headnullPi:新分配的結(jié)點地址p2:已分配的最后一個結(jié)點地址約定:當(dāng)輸入學(xué)號=0時,結(jié)束,返回表頭#defin

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論