版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、第9章內(nèi)容回顧,字符串與字符數(shù)組的區(qū)別是字符串的末尾有一個空字符0以標(biāo)識字符串結(jié)束。 用scanf()語句讀入字符串時不允許輸入中存在空格。 gets() 和 puts() 函數(shù)分別用于字符串的輸入和輸出。 在 string.h 中定義了很多字符串處理函數(shù)函數(shù),比較常用的有:strcpy()、strcat()、strcmp() 和 strlen() 。 假如程序里需要一組字符串,一種常用的做法就是用一個字符指針數(shù)組表示它們。 字符串可以作為參數(shù),函數(shù)傳遞機制同數(shù)組作為參數(shù),為傳址方式。,第十章,結(jié)構(gòu),預(yù)習(xí)檢查,結(jié)構(gòu)體類型與結(jié)構(gòu)體變量的區(qū)別 會有指向結(jié)構(gòu)體變量的指針嗎?結(jié)構(gòu)體變量可以作函數(shù)的參數(shù)
2、嗎?可不可以作返回值呢?,本章目標(biāo),理解為什么使用結(jié)構(gòu) 定義結(jié)構(gòu) 聲明結(jié)構(gòu)變量 訪問結(jié)構(gòu)成員 掌握結(jié)構(gòu)作為函數(shù)參數(shù)的用法,從某種程度上來說,會不會用 struct,怎樣用struct 是區(qū)別一個開發(fā)人員是否具備豐富開發(fā)經(jīng)歷的標(biāo)志 !,本章結(jié)構(gòu),結(jié)構(gòu)簡介,結(jié)構(gòu)體,結(jié)構(gòu)數(shù)組,使用結(jié)構(gòu),結(jié)構(gòu)作為函數(shù)參數(shù),實現(xiàn)堆棧,10-1 結(jié)構(gòu)簡介,存儲一個班級中 5 名學(xué)員的信息(學(xué)號、姓名、性別和成績),問題:,I. 使用數(shù)組,解決方案:,score,num,sex,name,不能建立數(shù)組間的關(guān)系,II. 使用多維數(shù)組,C 語言不允許一個數(shù)組包含多種數(shù)據(jù)類型,III. 使用結(jié)構(gòu),C 語言引入了稱為結(jié)構(gòu)的數(shù)據(jù)存儲
3、方式,“結(jié)構(gòu)” 是一種構(gòu)造數(shù)據(jù)類型,它是由若干數(shù)據(jù)項組合而成的復(fù)雜數(shù)據(jù)對象,這些數(shù)據(jù)項稱為結(jié)構(gòu)的成員。,10-2 定義結(jié)構(gòu),struct structurename datatype variable1; datatype variable2; . ;,結(jié)構(gòu)成員,;,結(jié)構(gòu)名,struct,student,int num;,char name20;,char sex;,定義結(jié)構(gòu),float score;,C 語言中的有效數(shù)據(jù)類型,一般形式: struct 結(jié)構(gòu)體名 成員表列 ; “成員表列”形式 類型 成員名; 類型 成員名; . .,10-2 定義結(jié)構(gòu),struct student int n
4、um; char name20; char sex; float score; ;,num,name,sex,student,score,結(jié)構(gòu)定義并不預(yù)留內(nèi)存 結(jié)構(gòu)定義放置在程序的開始部分,位于頭文件聲明之后 注意不表示復(fù)合語句,其后有分號 結(jié)構(gòu)體類型與其成員可重名 struct test int test; test; 結(jié)構(gòu)體成員和其他變量可以重名 結(jié)構(gòu)體類型名稱是struct 結(jié)構(gòu)體名,注意struct關(guān)鍵字不能省略 結(jié)構(gòu)定義僅描述了一個結(jié)構(gòu)的形式。如果要在程序里使用結(jié)構(gòu),需要聲明結(jié)構(gòu)變量,10-3 聲明結(jié)構(gòu)變量,聲明結(jié)構(gòu)變量,struct student int num; char na
5、me20; char sex; float score; ; struct student student1,student2;,I.先定義結(jié)構(gòu),再聲明結(jié)構(gòu)變量,struct student int num; char name20; char sex; float score; student1,student2;,II.在定義結(jié)構(gòu)類型的同時聲明結(jié)構(gòu)變量,struct int num; char name20; char sex; float score; student1,student2;,III. 直接聲明結(jié)構(gòu)變量,聲明一個類型為 student 結(jié)構(gòu)的變量,將會為該變量分配內(nèi)存,大小
6、是大于或等于其所有成員變量的大小之和。,struct date int month; int day; int year; ;,10-3 嵌套結(jié)構(gòu),struct int num; char name20; char sex; struct date birthday; float score; student1,student2;,表示結(jié)構(gòu)變量成員的一般形式是:結(jié)構(gòu)變量名.成員名 例如:student1.num、student2.sex、student1.birthday.month,struct student student3=3,Yao Ming ,M,90.5;,10-3 結(jié)構(gòu)變量初始
7、化,3,Yao Ming,M,賦值的順序應(yīng)與成員聲明時的順序一樣;允許初始化語句中的值的數(shù)目比結(jié)構(gòu)成員數(shù)目少 (但是不推薦)。,student3.num,,student3.sex,90.5,student3.score,student1.num=1; strcpy(,Zhang); student1.sex=M; printf(請輸入成績:n); scanf(%f,10-3 結(jié)構(gòu)變量賦值,1,Zhang Zi Liang,M,用輸入語句或賦值語句來給結(jié)構(gòu)變量的各個成員賦值,78,78,student2 = student1;,1,Zhang
8、 Zi Liang,M,78,說明 結(jié)構(gòu)體類型與結(jié)構(gòu)體變量概念不同 類型:不分配內(nèi)存; 變量:分配內(nèi)存 類型:不能賦值、存取、運算; 變量:可以 結(jié)構(gòu)體可嵌套 結(jié)構(gòu)體成員名與程序中變量名可相同,不會混淆,10-3 結(jié)構(gòu)變量與結(jié)構(gòu)體類型,引用規(guī)則 結(jié)構(gòu)體變量不能整體引用,只能引用變量成員,可以將一個結(jié)構(gòu)體變量賦值給另一個結(jié)構(gòu)體變量 結(jié)構(gòu)體嵌套時逐級引用,成員(分量)運算符 優(yōu)先級: 1 結(jié)合性:從左向右,引用方式: 結(jié)構(gòu)體變量名.成員名,10-4 結(jié)構(gòu)體變量的引用,形式一:,struct 結(jié)構(gòu)體名 類型標(biāo)識符 成員名; 類型標(biāo)識符 成員名; . ; struct 結(jié)構(gòu)體名 結(jié)構(gòu)體變量=初始數(shù)據(jù);
9、,例 struct student int num; char name20; char sex; int age; char addr30; ; struct student stu1=112,“Wang Lin”,M,19, “200 Beijing Road”;,10-4 結(jié)構(gòu)體變量的初始化,形式二:,struct 結(jié)構(gòu)體名 類型標(biāo)識符 成員名; 類型標(biāo)識符 成員名; . 結(jié)構(gòu)體變量=初始數(shù)據(jù);,例 struct student int num; char name20; char sex; int age; char addr30; stu1=112,“Wang Lin”,M,19,
10、“200 Beijing Road”;,10-4 結(jié)構(gòu)體變量的初始化,形式三:,struct 類型標(biāo)識符 成員名; 類型標(biāo)識符 成員名; . 結(jié)構(gòu)體變量=初始數(shù)據(jù);,例 struct int num; char name20; char sex; int age; char addr30; stu1=112,“Wang Lin”,M,19, “200 Beijing Road”;,10-4 結(jié)構(gòu)體變量的初始化,問題描述: 根據(jù)學(xué)員的成績,輸出不及格學(xué)員的詳細信息。,10-4 使用結(jié)構(gòu)示例,#include struct student int num;/學(xué)號 char *name;/姓名 ch
11、ar sex;/性別 float score;/成績 ; int main() static struct student stu1=1,李亞鵬,M,61; static struct student stu2=2,周晶晶,F,92.5; static struct student stu3=3,姚光明,M,59; printf(不及格學(xué)員的名單如下:n); if(stu1.score=60 ,不及格學(xué)員的名單如下:,3 姚光明 M 59.00,1,李亞鵬,M,78,2,周晶晶,F,92,3,姚光明,M,59,struct stu stu1; struct stu *pstu = (*pstu
12、).num 或者: pstu-num,10-5 結(jié)構(gòu)指針變量,一個指針當(dāng)用來指向一個結(jié)構(gòu)時, 稱之為結(jié)構(gòu)指針變量。 結(jié)構(gòu)指針變量中的值是所指向的結(jié)構(gòu)變量的首地址。 結(jié)構(gòu)指針變量聲明的一般形式為: struct 結(jié)構(gòu)名 *結(jié)構(gòu)指針變量名 通過結(jié)構(gòu)指針可以訪問該結(jié)構(gòu)變量的成員,一般形式為: (*結(jié)構(gòu)指針變量).成員名 或者 結(jié)構(gòu)指針變量-成員名,#include struct student int num; char *name; char sex; float score; stu=1,張賓,F,55,*pstu; int main() pstu= ,學(xué)號:1 姓名:張賓 性別:F 成績:55
13、.00 學(xué)號:1 姓名:張賓 性別:F 成績:55.00 學(xué)號:1 姓名:張賓 性別:F 成績:55.00 Press any key to continue,指向結(jié)構(gòu)體變量的指針 定義形式:struct 結(jié)構(gòu)體名 *結(jié)構(gòu)體指針名; 例 struct student *p;,使用結(jié)構(gòu)體指針變量引用成員形式,存放結(jié)構(gòu)體變量在內(nèi)存的起始地址,指向運算符 優(yōu)先級: 1 結(jié)合方向:從左向右,例 指向結(jié)構(gòu)體的指針變量,main() struct student long int num; char name20; char sex; float score; stu_1,*p; p= ,例 int n;
14、 int *p= n=10,struct student stu1; struct student *p= (*p).num=101,10-5 結(jié)構(gòu)體和指針,指向結(jié)構(gòu)體數(shù)組的指針,struct student int num; char name20; char sex; int age; stu3=10101,Li Lin,M,18, 10102,Zhang Fun,M,19, 10104,Wang Min,F,20; main() struct student *p; for(p=stu;pnum,p-name,p-sex,p-age); ,10-5 結(jié)構(gòu)體和指針,struct stude
15、nt int num; char* name; char sex; float score; stu30;,10-6 結(jié)構(gòu)數(shù)組,元素為結(jié)構(gòu)類型的數(shù)組稱為結(jié)構(gòu)數(shù)組。 在實際應(yīng)用中,經(jīng)常用結(jié)構(gòu)數(shù)組來表示具有相同數(shù)據(jù)結(jié)構(gòu)的一個群體。例如一個班的學(xué)員檔案,一個公司的職工檔案等。,定義了一個結(jié)構(gòu)數(shù)組stu1,共有30個元素,stu0stu29。每個數(shù)組元素都具有struct student的結(jié)構(gòu)形式。,結(jié)構(gòu)體數(shù)組的定義 三種形式:,形式一: struct student int num; char name20; char sex; int age; ; struct student stu2;,形式二
16、: struct student int num; char name20; char sex; int age; stu2;,形式三: struct int num; char name20; char sex; int age; stu2;,10-6 結(jié)構(gòu)體數(shù)組,例 struct int num; char name20; char sex; int age; stu =,;,順序初始化: struct student int num; char name20; char sex; int age; ; struct student stu =100,“Wang Lin”,M,20, 10
17、1,“Li Gang”,M,19, 110,“Liu Yan”,F,19;,例 struct student int num; char name20; char sex; int age; stu =,;,結(jié)構(gòu)體數(shù)組引用,引用方式: 結(jié)構(gòu)體數(shù)組名下標(biāo).成員名,10-6 結(jié)構(gòu)體數(shù)組初始化,struct person char name20; int count; leader3=“Li”,0,“Zhang”,0,”Wang“,0; main() int i,j; char leader_name20; for(i=1;i=10;i+) scanf(%s,leader_name); for(j=
18、0;j3;j+) if(strcmp(leader_name,)=0) leaderj.count+; for(i=0;i3;i+) printf(%5s:%dn,,leaderi.count); ,10-6 結(jié)構(gòu)體數(shù)組初始化,例 統(tǒng)計候選人選票,問題描述: 求學(xué)員的總成績和平均成績,并統(tǒng)計不及格人數(shù)。,10-6 結(jié)構(gòu)指針變量,struct student int num; char *name; char sex; float score; stuN= 1,李芳,F,45,2,于紅,F,62.5,3,何萬山,M,92.5, 4,程亞麗,M,87
19、,5,王明,M,58; int main() int i,count=0; float ave,sum=0; for(i=0;iN;i+) sum+=stui.score; if(stui.score60) count+; printf(總分:%7.2fn,sum); ave=sum/5; printf(平均分:%5.2fn,ave); printf(不及格人數(shù)為:%dn,count); ,總分: 345.00 平均分:69.00 不及格人數(shù)為:2 Press any key to continue,10-7 結(jié)構(gòu)作為函數(shù)參數(shù),可以將結(jié)構(gòu)作為參數(shù)傳遞給函數(shù),也可以定義返回結(jié)構(gòu)值的函數(shù)。 結(jié)構(gòu)作
20、為函數(shù)參數(shù)有三種不同方法: 將結(jié)構(gòu)成員的值傳遞給函數(shù)處理。 將整個結(jié)構(gòu)作為參數(shù)值傳遞給函數(shù)。 將結(jié)構(gòu)指針變量做函數(shù)的參數(shù)。,把結(jié)構(gòu)作為整體來處理,但作用方式和效果不同。,10-7 結(jié)構(gòu)成員作為函數(shù)參數(shù),struct film char name25; /電影名 char director25; /導(dǎo)演 int duration; /片長 ; void display (char *, char *, int *); int main() struct film f1; printf(nt 請輸入電影的詳細信息); printf(nn 請輸入影片名:); gets(); fflus
21、h(stdin); printf(n 請輸入導(dǎo)演姓名: ); gets(f1.director); fflush(stdin); printf(n 請輸入電影片長(分鐘): ); scanf(%d, ,演示:示例4,void display(char *n, char *d, int *m) printf(nt 電影的詳細信息n); printf(n 片名: %s,n); printf(n 導(dǎo)演: %s,d); printf(n 片長: %dn,*m); ,前兩個參數(shù)為字符串,所以不使用“/實部 double im;/虛部 ; struct complex add(struct complex
22、,struct complex); int main() struct complex x=6.5,8.9,y=7.1,9.4; struct complex z; z=add(x,y); printf(和為:%5.2lf+i%5.2lfn,z.re,z.im); ,10-7 整個結(jié)構(gòu)作為參數(shù),演示:示例5,struct complex add(struct complex a,struct complex b) struct complex c; c.re=a.re+b.re; c.im=a.im+b.im; return c; ,傳遞結(jié)構(gòu)時不使用 “ char *name; char se
23、x; float score; stuN=1,李芳,F,45,2,于紅,F,62.5, 3,何萬山,M,92.5,4,程亞麗,M,87, 5,王明,M,58; void ave(struct student *ps); int main() struct student *ps; ps=stu; ave(ps); ,演示:示例6,void ave(struct student *ps) int i,count=0; float ave,sum=0; for(i=0;iscore; if(ps-score60) count+; printf(總分:%7.2fn,sum); ave=sum/5;
24、printf(平均分:%5.2fn,ave); printf(不及格人數(shù)為:%dn,count); ,用指針變量作函數(shù)參數(shù)進行傳送時由實參傳向形參的只是結(jié)構(gòu)的地址。,堆棧是一種先進后出的數(shù)據(jù)結(jié)構(gòu)。 用堆棧實現(xiàn)簡單的行編輯功能,問題描述如下: 接受用戶從鍵盤輸入的程序或數(shù)據(jù),并存入用戶的數(shù)據(jù)區(qū)。由于用戶在鍵盤上進行輸入時,不能保證不會出錯,因此,需要設(shè)立一個輸入緩沖區(qū),允許用戶輸入出差錯,并在發(fā)現(xiàn)有誤時可以及時更正。例如,當(dāng)用戶發(fā)現(xiàn)剛剛鍵入的一個字符錯了時,可以補進一個“#”,以表示前一個字符無效;如果發(fā)現(xiàn)當(dāng)前鍵入的行內(nèi)差錯較多或難以補救,則可以鍵入一個退行符“”,以表示當(dāng)前行中的字符均無效。,
25、10-8 實現(xiàn)堆棧,10-8 實現(xiàn)堆棧,W,h,i,e,使用堆棧實現(xiàn)行編輯功能,whiel#lr#e(s#*s),l,l,r,e,(,s,*,s,輸出緩沖區(qū)(堆棧)中的所有字符,即有效字符:while(*s),o,u,t,c,outchaputchar(*s=#+);,h,a,遇到字符清空緩沖區(qū)(堆棧),p,u,t,c,h,a,r,(,*,s,=,+,+,),;,遇到字符#時,棧頂元素出棧,輸出緩沖區(qū)(堆棧)中的所有字符,即有效字符:putchar(*s+);,10-8 實現(xiàn)堆棧,由此可見,需要實現(xiàn)堆棧的以下幾個操作: 入棧 出棧 清空棧 顯示從棧底到棧頂所有的元素 判斷棧是否為空,#defi
26、ne m 100 struct Mystack char elementm; int top;/棧頂 ;,棧結(jié)構(gòu),void push(struct Mystack *s,char x) /*將x的值壓入棧頂*/ s-elements-top=x; s-top+; ,入棧操作,void pop(struct Mystack *s) /*將棧頂元素刪除*/ s-top-; ,出棧操作,int IsEmpty(struct Mystack *s) if(s-top=0) return 1; else return 0; ,判斷棧是否為空,10-8 實現(xiàn)堆棧,void Clearstack(struct Mystack *s s-top=0; ,清空棧,void Displaystack(struct Mystack *s) int i; for(i=0;itop;i+) printf(%c,s-elementi); ,顯示從棧底到棧頂所有的元素,10-8 實現(xiàn)堆棧 5-5,int main() struct Mystack st; char ch; int i; for(i
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 四川省德陽市中江縣2025-2026學(xué)年七年級上學(xué)期期末考試數(shù)學(xué)試題(含答案)
- 【初中語文】《秋天的懷念》課件++統(tǒng)編版語文七年級上冊
- 分式專項(課件)中考數(shù)學(xué)一輪復(fù)習(xí)講練測
- 2025-2026學(xué)年魯教版(五四制)數(shù)學(xué)七年級上冊期末模擬試題(含答案)
- 河南省許昌市鄢陵縣彭店二中2025-2026學(xué)年七年級上冊語文期末試卷(含答案 )
- 飛行技術(shù)專業(yè)
- 11月全球投資十大主線
- 人口分布第一課時課件2025-2026學(xué)年高中地理人教版必修二
- 基于MATLAB的四旋翼無人機PID控制研究
- 飛機的科普知識
- 2026中國國際航空招聘面試題及答案
- (2025年)工會考試附有答案
- 2026年國家電投集團貴州金元股份有限公司招聘備考題庫完整參考答案詳解
- 復(fù)工復(fù)產(chǎn)安全知識試題及答案
- 中燃魯西經(jīng)管集團招聘筆試題庫2026
- 資產(chǎn)接收協(xié)議書模板
- 數(shù)據(jù)中心合作運營方案
- 印鐵涂料基礎(chǔ)知識
- 工資欠款還款協(xié)議書
- 石籠網(wǎng)廠施工技術(shù)交底
- 新建粉煤灰填埋場施工方案
評論
0/150
提交評論