




已閱讀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)介
第十講,第十章 結(jié)構(gòu)體和共用體,結(jié)構(gòu)體類(lèi)型的定義 結(jié)構(gòu)體類(lèi)型變量的定義 結(jié)構(gòu)體類(lèi)型變量的初始化和引用 結(jié)構(gòu)體數(shù)組,10.1 結(jié)構(gòu)體,問(wèn)題 數(shù)組能方便的處理一組同類(lèi)型的數(shù)據(jù),那么對(duì)一組不同類(lèi)型的數(shù)據(jù)如何管理和引用呢? 使用結(jié)構(gòu)體。,例: 學(xué)生姓名,性別,年齡,身高,體重等,,結(jié)構(gòu)體屬于構(gòu)造類(lèi)型,在內(nèi)存中占據(jù)連續(xù)的存儲(chǔ)空間。 C語(yǔ)言本身沒(méi)有結(jié)構(gòu)體類(lèi)型,用戶(hù)要做兩項(xiàng)工作: 1)定義結(jié)構(gòu)體類(lèi)型:描述結(jié)構(gòu)體成員及其類(lèi)型; 2)定義結(jié)構(gòu)體變量:為結(jié)構(gòu)體成員分配存儲(chǔ)空間。,10.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; ;,struct date int year,month,day; ;,10.1.1 結(jié)構(gòu)體類(lèi)型的定義,結(jié)構(gòu)體類(lèi)型定義的格式說(shuō)明: struct:關(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)分隔。,10.1.2 結(jié)構(gòu)體類(lèi)型變量的定義,注意: 結(jié)構(gòu)體類(lèi)型的定義只是指出了該結(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)體變量。,10.1.2 結(jié)構(gòu)體類(lèi)型變量的定義,方式I.先定義結(jié)構(gòu)體類(lèi)型,再定義結(jié)構(gòu)體變量,10.1.2 結(jié)構(gòu)體類(lèi)型變量的定義,struct date int year; int month; int day; ; struct data today,tomorrow;,year month day 2012 5 16 2012 5 17,today tomorrow,12個(gè)字節(jié),today和tomorrow的存儲(chǔ)形式為:,例:,10.1.2 結(jié)構(gòu)體類(lèi)型變量的定義,方式II. 在定義結(jié)構(gòu)體類(lèi)型的同時(shí)定義結(jié)構(gòu)體變量。,struct student int num; char name10; char sex; float score4; stu1,stu2;,struct date int year; int month; int day; today,tomorrow;,例:,10.1.2 結(jié)構(gòu)體類(lèi)型變量的定義,方式III. 定義無(wú)名結(jié)構(gòu)體變量,struct int num; char name10; char sex; float score4; stu1,stu2;,struct int year; int month; int day; today,tomorrow;,例:,10.1.2 結(jié)構(gòu)體類(lèi)型變量的定義,關(guān)于結(jié)構(gòu)體的說(shuō)明: 1、類(lèi)型與變量是不同的概念,應(yīng)注意區(qū)分。 系統(tǒng)可以對(duì)變量賦值、存取、運(yùn)算,而類(lèi)型則不能。 編譯時(shí),系統(tǒng)只為變量分配存儲(chǔ)單元,而類(lèi)型則不分配。,10.1.2 結(jié)構(gòu)體類(lèi)型變量的定義,2、不同結(jié)構(gòu)體的成員名可以相同,不互相沖突。,struct date int year,month,day; ; struct Book char title50,writer20,publisher50; int year,month; ; int year,month,day;,10.1.2 結(jié)構(gòu)體類(lèi)型變量的定義,3、結(jié)構(gòu)體的成員可以是基本類(lèi)型和構(gòu)造類(lèi)型。,struct date int year,month,day; ; struct student int num; char name10; char sex; struct date birthday; float score4; stu1,stu2;,struct student int num; char name10; char sex; struct date int year,month,day; birthday; float score4; stu1,stu2;,10.1.2 結(jié)構(gòu)體類(lèi)型變量的定義,4、可以使用typedef關(guān)鍵字為結(jié)構(gòu)體類(lèi)型定義一個(gè)別名。,typedef struct _Student char id10; char name10; int score3; int sum; Student;,以后就可以用Student代替結(jié)構(gòu)體類(lèi)型名來(lái)定義結(jié)構(gòu)體變量了。 例如: Student stu1, stu2; 等價(jià)于: struct _Student stu1, stu2;,10.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)型一致或兼容。,例:,struct _Student char id10; char name10; int score3; int sum; stu1 = “2012301101“, “胡樹(shù)偉“, 87, 71, 81;,10.1.3 結(jié)構(gòu)體類(lèi)型變量的初始化和引用,10.1.3 結(jié)構(gòu)體類(lèi)型變量的初始化和引用,例:,struct date int year, month, day; ; struct _student2 char num15; char name10; struct date birth; int score3; int aver; stu1=“200361070001“,“Hushuwei“,1984,10,8,87,71,81;,10.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。,10.1.3 結(jié)構(gòu)體類(lèi)型變量的初始化和引用,對(duì)結(jié)構(gòu)體變量中成員的引用 一般格式 結(jié)構(gòu)體變量名 . 成員名,其中:“為結(jié)構(gòu)體成員運(yùn)算符,1級(jí)運(yùn)算符。 例如:stu1.sum表示對(duì)結(jié)構(gòu)體變量stu1中的sum成員進(jìn)行引用。,10.1.3 結(jié)構(gòu)體類(lèi)型變量的初始化和引用,結(jié)構(gòu)體變量的引用規(guī)則: 1、不能將結(jié)構(gòu)體變量作為一個(gè)整體進(jìn)行輸入和輸出。 例如:,struct _Student3 long num; int age; char sex; st;,下面的寫(xiě)法是錯(cuò)誤的: scanf(“%ld%d%c“, ,10.1.3 結(jié)構(gòu)體類(lèi)型變量的初始化和引用,結(jié)構(gòu)體變量的引用規(guī)則: 2、內(nèi)嵌結(jié)構(gòu)體成員的引用,必須逐層使用成員名定位,找到最底層的成員。 例如: struct date int year, month, day; ; struct _Student2 char id10, name10; struct date birth; int score3, sum; stu2 = “20123002“, “李冬“, 1987, 5, 3, 75, 85, 76; printf(“birthday=%d年%d月%d日n“, stu2.birth.year, stu2.birth.month, stu2.birth.day);,10.1.3 結(jié)構(gòu)體類(lèi)型變量的初始化和引用,結(jié)構(gòu)體變量的引用規(guī)則: 3、若結(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, );,10.1.3 結(jié)構(gòu)體類(lèi)型變量的初始化和引用,結(jié)構(gòu)體變量的引用規(guī)則: 4、若結(jié)構(gòu)體的成員是數(shù)值型數(shù)組,則應(yīng)逐個(gè)引用數(shù)組中的元素。 例如: struct _Student char id10; char name10; int score3; int sum; stu1; scanf(“%d%d%d“, ,10.1.3 結(jié)構(gòu)體類(lèi)型變量的初始化和引用,例 結(jié)構(gòu)體變量的輸入和輸出 typedef struct _Student char id10, name10; int score3, sum; Student; /*定義結(jié)構(gòu)體類(lèi)型別名*/ void main( ) Student stu1, stu2; /*定義結(jié)構(gòu)體變量*/ scanf(“%s%s%d%d%d“, stu1.id, , ,10.1.4 結(jié)構(gòu)體數(shù)組,一個(gè)結(jié)構(gòu)體變量一次只能存放一組數(shù)據(jù),如一個(gè)學(xué)生的信息。 全班學(xué)生信息,則用結(jié)構(gòu)體數(shù)組。 結(jié)構(gòu)體數(shù)組的每個(gè)數(shù)組元素都是一個(gè)結(jié)構(gòu)體變量,它們都分別包括各個(gè)成員項(xiàng)。,10.1.4 結(jié)構(gòu)體數(shù)組,結(jié)構(gòu)體數(shù)組的定義 三種形式,10.1.4 結(jié)構(gòu)體數(shù)組,結(jié)構(gòu)體數(shù)組的初始化 結(jié)構(gòu)體數(shù)組的初始化與普通數(shù)組的初始化相似。,struct _student char num15,name10; int score3; float aver; stu50=“200361070001”,“Hushuwei”,87,71,81, “200361070002“,“Zhangfan“,76,78,85, “200361070003“,“Wujiaxin“,70,91,78;,10.1.4 結(jié)構(gòu)體數(shù)組,結(jié)構(gòu)體數(shù)組的引用 結(jié)構(gòu)體數(shù)組的引用與結(jié)構(gòu)體變量的引用相似。,例:查詢(xún)學(xué)生基本信息。 (學(xué)生數(shù)據(jù)包括:學(xué)號(hào),姓名,性別,年齡和成績(jī)。),#include #define N 5 struct student long int num; char name10; char sex; int age,score; stuN=20123001,“Zhang Mei“,M,18,85, 20123002,“Wang Hai“,M,19,87, 20123003,“Liu Jun“,F,18,90, 20123004,“Li Hui“,M,19,80, 20123005,“Chen Ming“,M,18,92;,10.1.4 結(jié)構(gòu)體數(shù)組,void main() int s,t; long int xh; printf(“請(qǐng)輸入學(xué)號(hào):n“); scanf(“%ld“, ,請(qǐng)輸入學(xué)號(hào): 20123003 20123003 Liu Jun F 18 90,10.1.6 結(jié)構(gòu)體數(shù)組名作為函數(shù)參數(shù),結(jié)構(gòu)體作為參數(shù)傳遞給函數(shù)的幾種方法: 1、結(jié)構(gòu)體變量的成員作為函數(shù)參數(shù) 與普通變量做函數(shù)參數(shù)一樣,傳值方式; 2、結(jié)構(gòu)體變量作為函數(shù)參數(shù) 是一種多值傳遞,需要對(duì)整個(gè)結(jié)構(gòu)體做一份拷貝,效率低。 3、結(jié)構(gòu)體指針做函數(shù)參數(shù) 4、結(jié)構(gòu)體數(shù)組名作為函數(shù)參數(shù),10.1.6 結(jié)構(gòu)體數(shù)組名作為函數(shù)參數(shù),結(jié)構(gòu)體數(shù)組名作為函數(shù)參數(shù)與普通數(shù)組名作為函數(shù)參數(shù)相似,傳遞的也是數(shù)組的首地址。,例:計(jì)算平均成績(jī),打印排序成績(jī)表,#include #define N 3 #define M 3 void sort(struct _student ss , int n); struct _student char num15,name10; int score3; float aver; stuN=“200361070001“,“Lishuwei“,68,71,91, “200361070002“,“Zhangfan“,92,78,85, “200361070003“,“Wujiaxin“,70,91,78;,10.1.6 結(jié)構(gòu)體數(shù)組名作為函數(shù)參數(shù),void main() int i,j,sumN; for(i=0;iN;i+) sumi=0; for(j=0;jM;j+) sumi=sumi+stui.scorej; stui.aver=sumi/3.0; sort(stu,N); for(i=0;iN;i+) printf(“%3d%15s%12s%8.2fn“,i+1,stui.num,, stui.aver); ,10.1.6 結(jié)構(gòu)體數(shù)組名作為函數(shù)參數(shù),void sort(struct _student ss , int n) int i,j; struct _studen
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 景觀設(shè)計(jì)畢業(yè)答辯方案匯報(bào)
- 《上海汽車(chē)展》課件
- 醫(yī)學(xué)微生物學(xué)試題庫(kù)含答案(附解析)
- 保育員(高級(jí))考試題含參考答案解析
- 8月化學(xué)檢驗(yàn)員(初級(jí))考試題+參考答案解析
- 中學(xué)生物教育教學(xué)研究
- 《海爾品牌戰(zhàn)略案例》課件
- 藥品倉(cāng)儲(chǔ)庫(kù)房貨架光滑度測(cè)試考核試卷
- 電力儀表的節(jié)能技術(shù)考核試卷
- 調(diào)味品與文化傳承的結(jié)合考核試卷
- 基于認(rèn)知模型建構(gòu)與應(yīng)用發(fā)展科學(xué)思維
- 頭療館轉(zhuǎn)讓合同
- 2025年軍隊(duì)文職考試《公共科目》試題與參考答案
- 國(guó)內(nèi)外科研機(jī)構(gòu)績(jī)效管理模式分析
- 2023年高考真題-物理(福建卷) 含答案
- 1型糖尿病飲食宣教
- 《精裝修成品保護(hù)》課件
- 學(xué)校食堂設(shè)備故障應(yīng)急預(yù)案
- 《中小學(xué)生時(shí)間規(guī)劃管理主題班會(huì):做時(shí)間的主人》課件(五套)
- 二年級(jí)乘除法口訣專(zhuān)項(xiàng)練習(xí)1000題
- DB35T 2148-2023 養(yǎng)殖大黃魚(yú)等級(jí)規(guī)格
評(píng)論
0/150
提交評(píng)論