c語言第11章結構體和共同體(精)_第1頁
c語言第11章結構體和共同體(精)_第2頁
免費預覽已結束,剩余26頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

3、bx?可存 放student類型數據。二、在定義結構體類型的同時定義變量:定義形式struct結構體名成員表列變量名表列;例:struct student int num;char name20;char sex;int age;char addr30; xl, x2;三、直接定義結構類型變量定義形式struct成員表列變量名表列; 不出現結構體類型名如:stract int numchar name20J;char sex;int age;char addr30; xl, x2;幾點說明:1.類型名與變量名是不同的概念2.允許成員名又為另一個已定義的結構型變量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引用結構體變量實質上為引用其成員用分量運算符優先級最高女H:X為student型變量,貝U Xnum:表示X的學號xname:表示X的名字Xj.birthday.day:表示X的出生日1只能用成員,不可用結構體變量名直接運算2.每一個分量的引用與其同類型的簡單

5、變量的引用 相同。11.例如:關于結構成員的操作。struct date結構 8 定乂 jnt month;int day;int year;today;與其它變量的初始化完全一樣,結構體變量 在定義時可初始化:struct student xl=8906,HLi Ming ”,o 開始語句:today.month=9;today.day=22;|CPU|todaytoday. year=1999;monthday11.4結構體變量的初始化25, & 3, 192& ”Yu Lushan 123 ”關于結構體變量的幾點說明二1結構體變不是一個簡單變量,它的值是 由許多個基本數據

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

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

9、定義結構類型person和結 構數組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);運行情況如下:輸入:Li IZnamecountLi IZLi0Hang Zhang0Zhang IZHang0Zhans tHang KLi 顯示:Li : 4Hang ”運算符,num, pname, p score.稱-為指向運算符, 優先級高于+,-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引用結構變量中的成員有三種方法:(1)結構體變量名成員名xl.num(2)用指針變量(*p)成員名(*p).numI(3)用指向運算符 T成員名p -numI注意:指針變量p必須是結構指針型,且有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二、指向結構體數組的指針與其他指向結構體數組的指針一樣,可用指針 指向結構體數組。例: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 不是結構指針變量p=&x 1;printfC ,pnum, p name, p sex, p age);內存結構如下:P+1為指向 下一個元素的首地址。三.用指向結構體的指針作函數參數用地址傳送,函數中形

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);運行結呆:zhao,4qian, 3sun, 6 11. 7鏈表i.什么是鏈表?一種動態分配的數據結構。是用指針變量將非連續的數據塊連成一 個整體的一種數據結構。*解決了數組存放數據的弊端I*解決了內存分配零亂的問題例如::為數據塊, 又稱為

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論