C語(yǔ)言課件-第10講_第1頁(yè)
C語(yǔ)言課件-第10講_第2頁(yè)
C語(yǔ)言課件-第10講_第3頁(yè)
C語(yǔ)言課件-第10講_第4頁(yè)
C語(yǔ)言課件-第10講_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第十講Begin:第十章 結(jié)構(gòu)體和共用體 結(jié)構(gòu)體類(lèi)型的定義結(jié)構(gòu)體類(lèi)型變量的定義結(jié)構(gòu)體類(lèi)型變量的初始化和引用結(jié)構(gòu)體數(shù)組9.1 結(jié)構(gòu)體 結(jié)構(gòu)體是數(shù)目固定、類(lèi)型不同的若干變量(成員)的有序集合,在內(nèi)存中占據(jù)一段連續(xù)的存儲(chǔ)空間。在程序中使用結(jié)構(gòu)體,必須先做兩項(xiàng)工作:1)定義結(jié)構(gòu)體類(lèi)型:描述該結(jié)構(gòu)體的成員名稱(chēng)、成員類(lèi)型;2)定義結(jié)構(gòu)體變量:根據(jù)結(jié)構(gòu)體類(lèi)型為定義的結(jié)構(gòu)體變量分配存儲(chǔ)空間。9.1.1 結(jié)構(gòu)體類(lèi)型的定義 結(jié)構(gòu)體類(lèi)型定義的一般格式為: struct 結(jié)構(gòu)體名 類(lèi)型名1 成員名1; 類(lèi)型名2 成員名2; 類(lèi)型名n 成員名n; ;9.1.1 結(jié)構(gòu)體類(lèi)型的定義 結(jié)構(gòu)體類(lèi)型定義的格式說(shuō)明:struct:

2、關(guān)鍵字,是定義結(jié)構(gòu)體類(lèi)型的標(biāo)志。結(jié)構(gòu)體名:標(biāo)識(shí)符,其命名規(guī)則同變量名。struct 結(jié)構(gòu)體名:結(jié)構(gòu)體類(lèi)型名,作用等同于int、float等關(guān)鍵字,用于定義結(jié)構(gòu)體變量。 類(lèi)型名1n:說(shuō)明了結(jié)構(gòu)體成員的數(shù)據(jù)類(lèi)型。成員名1n:用戶(hù)定義的一個(gè)或多個(gè)結(jié)構(gòu)體成員的名稱(chēng),其命名規(guī)則同變量名。多個(gè)同類(lèi)型的成員彼此間用逗號(hào)分隔。9.1.1 結(jié)構(gòu)體類(lèi)型的定義 結(jié)構(gòu)體類(lèi)型定義舉例: struct _Student char id10; /*學(xué)號(hào)*/char name10; /*姓名*/int score3; /*成績(jī)*/int sum; /*總分*/ ;9.1.2 結(jié)構(gòu)體類(lèi)型變量的定義 結(jié)構(gòu)體類(lèi)型的定義只是指出了該

3、結(jié)構(gòu)體的組成情況,系統(tǒng)并不會(huì)為它分配實(shí)際的存儲(chǔ)單元。應(yīng)在定義了結(jié)構(gòu)體類(lèi)型以后,再定義該結(jié)構(gòu)體類(lèi)型的變量(簡(jiǎn)稱(chēng)結(jié)構(gòu)體變量),以便在結(jié)構(gòu)體變量中存放具體的數(shù)據(jù)。結(jié)構(gòu)體變量的定義方式有三種:先定義結(jié)構(gòu)體類(lèi)型,再定義結(jié)構(gòu)體變量。在定義結(jié)構(gòu)體類(lèi)型的同時(shí)定義結(jié)構(gòu)體變量。直接定義結(jié)構(gòu)體變量。9.1.2 結(jié)構(gòu)體類(lèi)型變量的定義 方式一:若事先已定義了結(jié)構(gòu)體類(lèi)型,那么直接用下面的格式定義結(jié)構(gòu)體變量: 結(jié)構(gòu)體類(lèi)型名 結(jié)構(gòu)體變量名;例如:struct _Student stu1, stu2;stu1和stu2的存儲(chǔ)形式為:sumscore2score0name9name0id9id010字節(jié)10字節(jié)6字節(jié)2字節(jié)9.1

4、.2 結(jié)構(gòu)體類(lèi)型變量的定義 方式二:在定義結(jié)構(gòu)體類(lèi)型的同時(shí)定義結(jié)構(gòu)體變量。定義格式為: struct 結(jié)構(gòu)體名 類(lèi)型名1 成員名1; 類(lèi)型名2 成員名2; 類(lèi)型名n 成員名n; 結(jié)構(gòu)體變量名表;9.1.2 結(jié)構(gòu)體類(lèi)型變量的定義 例如: struct _Student char id10; char name10; int score3; int sum; stu1, stu2;9.1.2 結(jié)構(gòu)體類(lèi)型變量的定義 方式三:在定義結(jié)構(gòu)體類(lèi)型時(shí)可以直接定義結(jié)構(gòu)體變量。定義格式為: struct 類(lèi)型名1 成員名1; 類(lèi)型名2 成員名2; 類(lèi)型名n 成員名n; 結(jié)構(gòu)體變量名表;9.1.2 結(jié)構(gòu)體類(lèi)型變量

5、的定義 例如: struct char id10; char name10; int score3; int sum; stu1, stu2;9.1.2 結(jié)構(gòu)體類(lèi)型變量的定義 關(guān)于結(jié)構(gòu)體的說(shuō)明: 類(lèi)型與變量是不同的概念,應(yīng)注意區(qū)分。系統(tǒng)可以對(duì)變量賦值、存取、運(yùn)算,而類(lèi)型則不能。編譯時(shí),系統(tǒng)只為變量分配存儲(chǔ)單元,而類(lèi)型則不分配。結(jié)構(gòu)體中的成員也可以是一個(gè)結(jié)構(gòu)體變量,即結(jié)構(gòu)體的嵌套。結(jié)構(gòu)體中的成員可以和程序中的變量同名,不同結(jié)構(gòu)體中的成員也可以同名。 9.1.2 結(jié)構(gòu)體類(lèi)型變量的定義 例如: struct date int year, month, day; ; struct _Student2

6、char id10; char name10; struct date birth; /*birth為結(jié)構(gòu)體成員*/ int score3; int sum; stu1, stu2;9.1.2 結(jié)構(gòu)體類(lèi)型變量的定義 關(guān)于結(jié)構(gòu)體的說(shuō)明: 可以使用typedef關(guān)鍵字為結(jié)構(gòu)體類(lèi)型定義一個(gè)別名。例如:typedef struct _Student char id10; char name10; int score3; int sum; Student;9.1.2 結(jié)構(gòu)體類(lèi)型變量的定義 以后就可以用Student代替結(jié)構(gòu)體類(lèi)型名來(lái)定義結(jié)構(gòu)體變量了。例如: Student stu1, stu2;等價(jià)于:

7、 struct _Student stu1, stu2;9.1.3 結(jié)構(gòu)體類(lèi)型變量的初始化和引用 結(jié)構(gòu)體變量的初始化類(lèi)似于對(duì)數(shù)組的初始化,由于結(jié)構(gòu)體變量的成員可以有不同的數(shù)據(jù)類(lèi)型,所以各個(gè)初值必須與相應(yīng)成員保持類(lèi)型一致或兼容。例1:struct _Student char id10; char name10; int score3; int sum; stu1 = 20050001, 胡樹(shù)偉, 87, 71, 81;9.1.3 結(jié)構(gòu)體類(lèi)型變量的初始化和引用 例2: struct date int year, month, day; ; struct _Student2 char id10; c

8、har name10; struct date birth; int score3; int sum; stu2 = 20050002, 李冬, 1987, 5, 3, 75, 85, 76;9.1.3 結(jié)構(gòu)體類(lèi)型變量的初始化和引用 對(duì)結(jié)構(gòu)體變量初始化的說(shuō)明:對(duì)結(jié)構(gòu)體變量進(jìn)行初始化時(shí),系統(tǒng)是按每個(gè)成員在結(jié)構(gòu)體變量中的順序一一對(duì)應(yīng)賦初值的。若只對(duì)部分成員進(jìn)行初始化,則只能給前面的若干成員賦值,而不允許跳過(guò)前面的成員給后面的成員賦值。例如:前面兩例中結(jié)構(gòu)體變量stu1和stu2的成員sum沒(méi)有獲得指定初值,而是獲得默認(rèn)初值0。9.1.3 結(jié)構(gòu)體類(lèi)型變量的初始化和引用 引用結(jié)構(gòu)體變量的一般方式為:結(jié)

9、構(gòu)體變量名成員名其中:為結(jié)構(gòu)體成員運(yùn)算符,1級(jí)運(yùn)算符。例如:stu1.sum表示對(duì)結(jié)構(gòu)體變量stu1中的sum成員進(jìn)行引用。9.1.3 結(jié)構(gòu)體類(lèi)型變量的初始化和引用 結(jié)構(gòu)體變量的引用規(guī)則:不能將結(jié)構(gòu)體變量作為一個(gè)整體進(jìn)行輸入和輸出。 例如:struct _Student3 long num; int age; char sex; st; 下面的寫(xiě)法是錯(cuò)誤的: scanf(%ld%d%c, &st); printf(%ld,%d,%c, st); 下面的寫(xiě)法是正確的: scanf(%ld%d%c, &st.num, &st.age, &st.sex); printf(%ld,%d,%c, st.

10、num, st.age, st.sex);9.1.3 結(jié)構(gòu)體類(lèi)型變量的初始化和引用 結(jié)構(gòu)體變量的引用規(guī)則:內(nèi)嵌結(jié)構(gòu)體成員的引用,必須逐層使用成員名定位,找到最底層的成員。 例如: struct date int year, month, day; ; struct _Student2 char id10, name10; struct date birth; int score3, sum; stu2 = 20050002, 李冬, 1987, 5, 3, 75, 85, 76; printf(birthday=%d,%d,%dn, stu2.birth.year, stu2.birth.mo

11、nth, stu2.birth.day);9.1.3 結(jié)構(gòu)體類(lèi)型變量的初始化和引用 結(jié)構(gòu)體變量的引用規(guī)則:若結(jié)構(gòu)體的成員是字符數(shù)組,可對(duì)其進(jìn)行直接引用。 例如: struct _Student char id10; char name10; int score3; int sum; stu1; scanf(%s%s, stu1.id, ); printf(id=%s, name=%s, stu1.id, );9.1.3 結(jié)構(gòu)體類(lèi)型變量的初始化和引用 結(jié)構(gòu)體變量的引用規(guī)則:若結(jié)構(gòu)體的成員是數(shù)值型數(shù)組,則應(yīng)逐個(gè)引用數(shù)組中的元素。 例如: struct _Stud

12、ent char id10; char name10; int score3; int sum; stu1; scanf(%d%d%d, &stu1.score0, &stu1.score1, &stu1.score2); printf(Math=%d, English=%d, Computer=%d, stu1.score0, stu1.score1, stu1.score2);9.1.3 結(jié)構(gòu)體類(lèi)型變量的初始化和引用 例 結(jié)構(gòu)體變量的輸入和輸出typedef struct _Student char id10, name10; int score3, sum; Student; /*定義結(jié)

13、構(gòu)體類(lèi)型別名*/void main( ) Student stu1, stu2; /*定義結(jié)構(gòu)體變量*/ scanf(%s%s%d%d%d, stu1.id, , &stu1.score0, &stu1.score1, &stu1.score2); stu1.sum=stu1.score0+stu1.score1+stu1.score2; stu2=stu1; printf(%s, %s, %d, %d, %d, %d, stu2.id, , stu2.score0, stu1.score1, stu1.score2, stu2.sum);9.1.4 結(jié)構(gòu)體

14、數(shù)組 結(jié)構(gòu)體數(shù)組的每個(gè)數(shù)組元素都是一個(gè)結(jié)構(gòu)體變量,它們都分別包括各個(gè)成員項(xiàng)。結(jié)構(gòu)體數(shù)組的定義和定義結(jié)構(gòu)體變量的方法相似,只需說(shuō)明其為數(shù)組即可。例1: struct _Student char id10, name10; int score3, sum; ; struct _Student stu50;9.1.4 結(jié)構(gòu)體數(shù)組 例2: struct _Student char id10, name10; int score3, sum; stu50;例3: struct char id10, name10; int score3, sum; stu50;9.1.4 結(jié)構(gòu)體數(shù)組 結(jié)構(gòu)體數(shù)組的初始化結(jié)

15、構(gòu)體數(shù)組的初始化與普通數(shù)組的初始化相似。 例如: struct _Student char id10, name10; int score3, sum; ;struct _Student stu3= 20050001, 胡樹(shù)偉, 87, 71, 81, 20050002, 李冬, 75, 85, 76, 20050003, 梁若嬋, 86, 75, 90;9.1.4 結(jié)構(gòu)體數(shù)組 結(jié)構(gòu)體數(shù)組的引用結(jié)構(gòu)體數(shù)組的引用與結(jié)構(gòu)體變量的引用相似。 例 結(jié)構(gòu)體數(shù)組的引用 typedef struct _Student char id10; char name10; int score3; int sum;

16、Student; /*定義結(jié)構(gòu)體類(lèi)型別名*/9.1.4 結(jié)構(gòu)體數(shù)組 void main( ) int i, j; Student stu50; /*定義結(jié)構(gòu)體數(shù)組*/ for(i=0; i50; i+) scanf(%s%s%d%d%d, stui.id, , &stui.score0, &stui.score1, &stui.score2); for(stui.sum=0, j=0; j3; j+) stui.sum += stui.scorej; for(i=0; i50; i+) printf(%s,%s,%d,%d,%d,%dn, stui.id,

17、, stui.score0, stui.score1, stui.score2, stui.sum);9.1.4* 結(jié)構(gòu)體數(shù)組名作為函數(shù)參數(shù) 結(jié)構(gòu)體數(shù)組名作為函數(shù)參數(shù)與普通數(shù)組名作為函數(shù)參數(shù)相似,傳遞的也是數(shù)組的首地址。 例 結(jié)構(gòu)體數(shù)組名作為函數(shù)參數(shù) typedef struct _Student char id10; char name10; int score3; int sum; Student; /*定義結(jié)構(gòu)體類(lèi)型別名*/ void sort(Student stu , int); /*函數(shù)原型聲明*/9.1.4* 結(jié)構(gòu)體數(shù)組名作為函數(shù)參數(shù) void main( ) int i, j; Student stu50; /*定義結(jié)構(gòu)體數(shù)組*/ for(i=0; i50; i+) scanf(%s%s%d%d%d, stui.id, , &stui.score0, &stui.score1, &stui.score2); for(stui.sum=0, j=0; j3; j+) stui.sum += stui.scorej; sort(stu, 50); for(i=0; i50; i+) printf(%s,%s,%d,%d,%d,%dn, stui.id, , stui.score0, stui.score1, stui

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論