版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第九章 結(jié)構(gòu) v結(jié)構(gòu) v結(jié)構(gòu)數(shù)組 v結(jié)構(gòu)指針 v鏈表 v位運(yùn)算 v自定義類型 學(xué)號姓名性別出生地 出生年 出生月 出生日 數(shù)學(xué)物理 程序設(shè)計(jì) 學(xué) 號 姓 名 性 別 出生地 年 月 日 數(shù)學(xué) 物理 程序設(shè)計(jì) 出生日期 國家 省 市/縣 學(xué)習(xí)成績 結(jié)構(gòu):同一個數(shù)據(jù)項(xiàng)的若干成分構(gòu)成的一個整體。 例如:學(xué)生檔案,每個學(xué)生有學(xué)號、姓名、性別、出 生地、出生年月、學(xué)業(yè)成績等。 9.1 結(jié)構(gòu) 9.1.1 結(jié)構(gòu)的定義 struct student long int num; char name20; float score; ; 定義一個結(jié)構(gòu)類型: struct student 9.1.2 結(jié)構(gòu)變量的定義
2、1、先定義結(jié)構(gòu)類型,再定義變量 struct student long int num; char name20; float score; ; struct student stu1, stu2; num name score stu1200011Zhang85 stu2200012Li94 2、定義結(jié)構(gòu)類型的同 時定義變量 struct student long int num; char name20; float score; stu1, stu2; 3、不指定類型名,只定 義變量 struct long int num; char name20; float score; stu1,
3、 stu2; 9.1.3 結(jié)構(gòu)變量的初始化 只有全局變量或靜態(tài)變量才能初始化。 static struct student stu2=200012, “Li”, 94; num name score stu2200012Li94 num name score stu1200011Zhang85 struct student long num; char name20; float score; stu1=200011, Zhang, 85; 9.1.4 結(jié)構(gòu)變量的使用 1、結(jié)構(gòu)類型變量的整體引用 (1) 不能整體輸入輸出,但相同類型的變量可以互 相賦值 printf(%ld%s%f, stu1
4、); 非法 stu2=stu1; 合法 (2) 可以引用結(jié)構(gòu)體變量的地址 printf(%x, 輸出stu1的首地址 2、結(jié)構(gòu)變量中分量的引用 struct student long int num; char name20; float score; stu1, stu2; (1) 結(jié)構(gòu)變量.分量 stu1.num = 9901; printf(%s, ); num name score stu1200011Zhang85 stu2200012Li94 (2) 結(jié)構(gòu)變量中的分量可以依據(jù)它的類型進(jìn)行各種 運(yùn)算 x = stu1.score; strcpy(,
5、 “Wang”); (3) 可以引用結(jié)構(gòu)變量中的分量的地址 scanf(%ld, 9.2 結(jié)構(gòu)數(shù)組 一個結(jié)構(gòu)變量只能存放一個學(xué)生的資料。 若班上有20個學(xué)生,需要用結(jié)構(gòu)數(shù)組。 即,數(shù)組中的每個元素都是結(jié)構(gòu)類型。 9.2.1 定義 struct student long int num; char name20; float score; stu20; stu0 200011Zhang 85 stu19 200012Li90 200029Zhao70 stu1 9.2.2 初始化 struct student long int num; char name20; float score; stu
6、20=200011,”Zhang”,85, 200012,”Li”,90; stu0 200011Zhang 85 stu19 200012Li90 200029Zhao70 stu1 9.2.3 引用 struct student long int num; char name20; float score; stu20; stu0.num stu0.score stu0 200011Zhang 85 stu19 200012Li90 200029Zhao70 stu1 程序舉例 例1、輸入某班30位學(xué)生的姓名及數(shù)學(xué)、英語 成績,計(jì)算并輸出每位學(xué)生的平均分。 struct
7、 student char name10; int math, eng; float aver; ; void main( ) struct student s30; int i; for(i=0; i30; i+) scanf(%s%d%d, , si.aver = (si.math+si.eng)/2.0 printf(%s%f, , si.aver); s0 s29 s1 Zhang8085 Li7790 wang6078 輸入某班30位學(xué)生的姓名及數(shù)學(xué)、英語成績, 計(jì)算并輸出每門課程的平均分。 void main( ) struct student s30;
8、 int i; float aver_m=0, aver_e=0; 例2 for(i=0; i30; i+) scanf(%s%d%d, , aver_m += si.math; aver_e += si.eng; printf(%f%f, aver_m/30, aver_e/30); 輸入30位學(xué)生的姓名及數(shù)學(xué)、英語成績,輸出 平均分最高的學(xué)生的姓名及其數(shù)學(xué)和英語成 績。 struct student char name10; int math, eng; float aver; ; 例3 void main( ) struct student s30; int i, sub;
9、 for(i=0; i30; i+) scanf(%s%d%d, , si.aver = (si.math+si.eng)/2.0 sub=0; for( i=1; i ssub.aver ) sub = k; printf(%s%d%dn, , ssub.math, ssub.eng); 9.3 結(jié)構(gòu)指針 9.3.1 定義 struct student long int num; char name20; float score; ; struct student stu1, *ptr; ptr = num name score stu1 200011Zhan
10、g85 ptr 9.3.2 結(jié)構(gòu)指針的使用 struct student stu1, *ptr = stu1.num=200011; stu1.score=85; strcpy(,”Zhang”); 通過指針 ptr 訪問結(jié)構(gòu)分量 (1) *ptr (*ptr).num = 200011; (*ptr).score = 85; strcpy(*ptr).name,”Zhang”); num name score stu1 200011Zhang85 ptr (2) - (*ptr).num = 200011; ptr-num = 200011; ptr-score = 85;
11、 strcpy(ptr-name,”Zhang”); 當(dāng)ptr = int m; int d; 年 月 日 成績 出生日期 姓名學(xué)號 struct student long int num; char name20; struct day birthday; float score; ymd score birthday namenum struct day int y; int m; int d; ; struct student long int num; char name20; struct day birthday; float score; stu1, stu2; ymd scor
12、e birthday namenum 或: struct student long int num; char name20; struct int y, m, d; birthday; float score; stu1, stu2; struct student long int num; char name20; struct int y, m, d; birthday; float score; stu1=9901, “Zhao”, 1980, 10,30, 80, stu2; stu2.birthday.y=1979; stu2.birthday.y=1; stu2.birthday
13、.y=20; ymd score birthday namenum 9.4.2 單向鏈表 struct student long int num; float score; struct student *next; 結(jié)構(gòu)的遞歸定義 head9901 809902 909903 75 NULL 1、動態(tài)內(nèi)存分配函數(shù) (1) void *malloc(unsigned size) 功能:在內(nèi)存的動態(tài)存貯區(qū)中分配一塊長度為size 的連續(xù)空間。 返回值:指針,存放被分配內(nèi)存的起始地址。若 未申請到空間,則返回 NULL( 0 )。 void *:指向任何類型的數(shù)據(jù),在使用時,要進(jìn)行 強(qiáng)制類型轉(zhuǎn)換。
14、 例如:(int *) malloc(sizeof(int) (struct student *) malloc(sizeof(struct student) (2) void free(void *ptr) 功能:釋放由malloc()申請的動態(tài)內(nèi)存空間,ptr存 放該空間的首地址。 返回值:無。 p=(struct student *) malloc(sizeof(struct student); free(p); 2、建立鏈表 編寫一個函數(shù),要求用單向鏈表建立學(xué)生檔案,從 鍵盤輸入數(shù)據(jù),如果學(xué)號為0,輸入結(jié)束,并返回 鏈表的頭指針。 struct student long int num
15、; float score; struct student *next; ; struct student *head, *tail, *p; head=tail=NULL; struct student *head, *tail, *p; head=tail=NULL; size=sizeof(struct student); p = (struct student *) malloc(size); p num scorenext head tail p tail head=tail=NULL; input num, score while num!=0 p= (struct student
16、 *) malloc(sizeof(size) p-num=num, p-score=score, p-next=NULL y head=NULL n head=p tail-next=p tail=p input num, score # include stdio.h struct student int num; float score; struct student *next; ; struct student *creat( ); main( ) struct student *head; head = creat( ); struct student *creat() struc
17、t student *head, *tail, *p; float score; int num, size = sizeof(struct student); head = tail = NULL; scanf(%d %f, while (num) p = (struct student *)malloc(size); p-num = num; p-score = score; p-next = NULL; if(head = NULL) head = p; else tail-next = p; tail = p; scanf(%d %f, return head; 3、遍歷鏈表 ptr-
18、num ptr-score head9901 809902 909903 75 NULL ptrptr for(ptr=head; ptr!=NULL; ptr=ptr-next) printf(“%ld, %f”, ptr-num, ptr-score); ptr=ptr-next # include stdio.h struct student int num; float score; struct student *next; ; struct student *creat( ); void print(struct student *head) main( ) struct student *head; head = creat(); print(head); void print(
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高考物理總復(fù)習(xí)專題十一交變電流第1講交變電流的產(chǎn)生和描述練習(xí)含答案
- 清算風(fēng)險(xiǎn)管理協(xié)議
- 油漆購銷合同范例
- 九年級道德與法治上冊 第一單元 富強(qiáng)與創(chuàng)新 第一課 踏上強(qiáng)國之路 第2框走向共同富裕教案1 新人教版
- 二年級品德與生活上冊 玩中有發(fā)現(xiàn)教案1 首師大版
- 2024-2025學(xué)年新教材高中生物 第四章 生物的變異 第一節(jié) 基因突變可能引起性狀改變教案(2)浙科版必修2
- 2024-2025學(xué)年高中歷史 第一單元 第1課 第一次世界大戰(zhàn)的爆發(fā)教案1 新人教版選修3
- 2024-2025學(xué)年高中地理 第二章 中國的主要自然災(zāi)害 2.1 自然資源利用中存在的問題教案 中圖版選修6
- 廣東省佛山市順德區(qū)江義初級中學(xué)九年級化學(xué)上冊 3.1 分子和原子教案3 (新版)新人教版
- 2023七年級語文下冊 第四單元 寫作 怎樣選材配套教案 新人教版
- 品牌管理智慧樹知到課后章節(jié)答案2023年下齊魯工業(yè)大學(xué)
- 比亞迪財(cái)務(wù)報(bào)表分析
- 水壓試驗(yàn)報(bào)告(帶曲線圖)
- Units68單元大單元教學(xué)設(shè)計(jì)課件英語七年級上冊
- 2023年CSCO尿路上皮癌診療指南
- 在高三學(xué)生月考總結(jié)表彰會上的講話
- 高價(jià)值醫(yī)療設(shè)備產(chǎn)品定價(jià)過程
- 保險(xiǎn)行業(yè)創(chuàng)說會-課件
- 初中語文-江城子·密州出獵蘇軾教學(xué)設(shè)計(jì)學(xué)情分析教材分析課后反思
- 壓裂隊(duì)安全管理制度
- -讓生活更美好 作文批改評語
評論
0/150
提交評論