




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、1Chap 9 結(jié)構(gòu)結(jié)構(gòu) 9.1 輸出平均分最高的學生信息輸出平均分最高的學生信息9.2 學生成績排序?qū)W生成績排序9.3 修改學生成績修改學生成績2本章要點本章要點n什么是結(jié)構(gòu)?結(jié)構(gòu)與數(shù)組有什么差別?什么是結(jié)構(gòu)?結(jié)構(gòu)與數(shù)組有什么差別?n有幾種結(jié)構(gòu)的定義形式,它們之間有什么不同?有幾種結(jié)構(gòu)的定義形式,它們之間有什么不同?n什么是結(jié)構(gòu)的嵌套?什么是結(jié)構(gòu)的嵌套?n什么是結(jié)構(gòu)變量和結(jié)構(gòu)成員變量?如何引用結(jié)構(gòu)什么是結(jié)構(gòu)變量和結(jié)構(gòu)成員變量?如何引用結(jié)構(gòu)成員變量?成員變量?n結(jié)構(gòu)變量如何作為函數(shù)參數(shù)使用?結(jié)構(gòu)變量如何作為函數(shù)參數(shù)使用?n什么是結(jié)構(gòu)數(shù)組?如何定義和使用結(jié)構(gòu)數(shù)組?什么是結(jié)構(gòu)數(shù)組?如何定義和使用結(jié)
2、構(gòu)數(shù)組?n什么是結(jié)構(gòu)指針?它如何實現(xiàn)對結(jié)構(gòu)分量的操作?什么是結(jié)構(gòu)指針?它如何實現(xiàn)對結(jié)構(gòu)分量的操作?n結(jié)構(gòu)指針是如何作為函數(shù)的參數(shù)的?結(jié)構(gòu)指針是如何作為函數(shù)的參數(shù)的? 39.1輸出平均分最高的學生信息輸出平均分最高的學生信息 9.1.1 程序解析程序解析9.1.2 結(jié)構(gòu)的概念與定義結(jié)構(gòu)的概念與定義9.1.3 結(jié)構(gòu)的嵌套定義結(jié)構(gòu)的嵌套定義9.1.4 結(jié)構(gòu)變量的定義和初始化結(jié)構(gòu)變量的定義和初始化9.1.5 結(jié)構(gòu)變量的使用結(jié)構(gòu)變量的使用49.1.1 程序解析程序解析例例9-1 輸出平均分最高的學生信息輸出平均分最高的學生信息 n假設(shè)學生的基本信息包括學號、姓名、三假設(shè)學生的基本信息包括學號、姓名、三門
3、課程成績以及個人平均成績。輸入門課程成績以及個人平均成績。輸入 個個學生的成績信息,學生的成績信息, 計算并輸出平均分最高計算并輸出平均分最高的學生信息。的學生信息。59.1.1 程序解析程序解析#includestruct student /* 學生信息結(jié)構(gòu)定義學生信息結(jié)構(gòu)定義 */ int num; /* 學號學號 */ char name10; /* 姓名姓名 */ int computer, english, math; /* 三門課程成績?nèi)T課程成績 */ double average; /* 個人平均成績個人平均成績 */; 6int main(void) int i, n;str
4、uct student s1,max; /* 定義結(jié)構(gòu)變量定義結(jié)構(gòu)變量 */printf(Input n: );scanf(%d, &n);printf(Input the students number, name and course scoresn);for(i = 1; i = n; i+) printf(No.%d: , i);scanf(%d%s%d%d%d,&s1.num,,&s1.math,&s1.english,&puter);s1.average=(s1.math + s1.english + puter) / 3.0;
5、 if(i = 1) max = s1; /* 結(jié)構(gòu)變量結(jié)構(gòu)變量 操作操作 */ if(max.average s1.average) max = s1; printf(num:%d, name:%s, average:%.2lfn, max.num, , max.average); return 0;79.1.2 結(jié)構(gòu)的概念與定義結(jié)構(gòu)的概念與定義n使用結(jié)構(gòu)來表示學生信息:使用結(jié)構(gòu)來表示學生信息:struct student int num; /* 學號學號 */ char name10; /* 姓名姓名 */ int computer, english, math; /* 三
6、門課程成績?nèi)T課程成績 */ double average; /* 個人平均成績個人平均成績 */;n結(jié)構(gòu)是結(jié)構(gòu)是C語言中一種新的語言中一種新的構(gòu)造數(shù)據(jù)類型構(gòu)造數(shù)據(jù)類型,它能夠,它能夠把有內(nèi)在聯(lián)系的把有內(nèi)在聯(lián)系的不同類型的數(shù)據(jù)不同類型的數(shù)據(jù)統(tǒng)一成一個整體,統(tǒng)一成一個整體,使它們相互關(guān)聯(lián)使它們相互關(guān)聯(lián)n結(jié)構(gòu)又是結(jié)構(gòu)又是變量的集合變量的集合,可以按照對基本數(shù)據(jù)類型,可以按照對基本數(shù)據(jù)類型的操作方法單獨使用其變量成員。的操作方法單獨使用其變量成員。結(jié)構(gòu)與數(shù)組比較:結(jié)構(gòu)與數(shù)組比較:都是構(gòu)造類型,是多個變都是構(gòu)造類型,是多個變量的集合量的集合數(shù)組成員類型相同,結(jié)構(gòu)數(shù)組成員類型相同,結(jié)構(gòu)成員類型不同成員類
7、型不同89.1.2 結(jié)構(gòu)的概念與定義結(jié)構(gòu)的概念與定義n結(jié)構(gòu)類型定義的一般形式為:結(jié)構(gòu)類型定義的一般形式為: 關(guān)鍵字關(guān)鍵字struct和它后面和它后面的結(jié)構(gòu)名一起組成一的結(jié)構(gòu)名一起組成一個新的數(shù)據(jù)類型名個新的數(shù)據(jù)類型名 99.1.2 結(jié)構(gòu)的概念與定義結(jié)構(gòu)的概念與定義n例如,平面坐標結(jié)構(gòu):例如,平面坐標結(jié)構(gòu):struct point float x; float y; ; 雖然雖然x、y的類型相同,也的類型相同,也可以用數(shù)組的方式表示,可以用數(shù)組的方式表示,但采用結(jié)構(gòu)進行描述,更但采用結(jié)構(gòu)進行描述,更貼近事物本質(zhì),從而增加貼近事物本質(zhì),從而增加了程序的可讀性,使程序了程序的可讀性,使程序更易理解更
8、易理解結(jié)構(gòu)適合用于描述具有多結(jié)構(gòu)適合用于描述具有多個屬性的實體或?qū)ο髠€屬性的實體或?qū)ο?09.1.3 結(jié)構(gòu)的嵌套定義結(jié)構(gòu)的嵌套定義n在我們的實際生活中,一個較大的實體可能由多在我們的實際生活中,一個較大的實體可能由多個成員構(gòu)成,而這些成員中有些又有可能是由一個成員構(gòu)成,而這些成員中有些又有可能是由一些更小的成員構(gòu)成。些更小的成員構(gòu)成。n在學生信息中可以再增加一項:在學生信息中可以再增加一項:“通信地址通信地址”,它又可以再劃分為:城市、街道、門牌號、郵政它又可以再劃分為:城市、街道、門牌號、郵政編碼。編碼。學號學號姓名姓名計算機計算機英語英語數(shù)學數(shù)學平均平均成績成績119.1.3 結(jié)構(gòu)的嵌套定
9、義結(jié)構(gòu)的嵌套定義n由此,我們可以對其結(jié)構(gòu)類型進行如下重由此,我們可以對其結(jié)構(gòu)類型進行如下重新定義:新定義:struct address char city10; char street20; int code; int zip;struct nest_student int num; char name10; struct address addr; int computer, english, math; double average; ; 在定義嵌套的結(jié)構(gòu)類型時,必須先定義在定義嵌套的結(jié)構(gòu)類型時,必須先定義成員的結(jié)構(gòu)類型,再定義主結(jié)構(gòu)類型。成員的結(jié)構(gòu)類型,再定義主結(jié)構(gòu)類型。 129.1.4
10、 結(jié)構(gòu)變量的定義和初始結(jié)構(gòu)變量的定義和初始化化n在語言中定義結(jié)構(gòu)變量的方式有三種:在語言中定義結(jié)構(gòu)變量的方式有三種: 1.單獨定義單獨定義:先定義一個結(jié)構(gòu)類型,再定義一個具:先定義一個結(jié)構(gòu)類型,再定義一個具有這種結(jié)構(gòu)類型的變量有這種結(jié)構(gòu)類型的變量 struct student int num; /* 學號學號 */ char name10; /* 姓名姓名 */ int computer, english, math; /* 三門課程成績?nèi)T課程成績 */ double average; /* 個人平均成績個人平均成績 */;struct student s1,s2;139.1.4結(jié)構(gòu)變量的定
11、義和初始化結(jié)構(gòu)變量的定義和初始化2. 混合定義混合定義:在定義結(jié)構(gòu)類型的同時定義結(jié)構(gòu)變量:在定義結(jié)構(gòu)類型的同時定義結(jié)構(gòu)變量 struct student int num; /* 學號學號 */ char name10; /* 姓名姓名 */ int computer, english, math; /* 三門課程成績?nèi)T課程成績 */ double average; /* 個人平均成績個人平均成績 */s1, s2; 3. 無類型名定義無類型名定義:在定義結(jié)構(gòu)變量時省略結(jié)構(gòu)名:在定義結(jié)構(gòu)變量時省略結(jié)構(gòu)名struct int num; /* 學號學號 */ char name10; /* 姓名姓
12、名 */ int computer, english, math; /* 三門課程成績?nèi)T課程成績 */ double average; /* 個人平均成績個人平均成績 */ s1, s2;149.1.4結(jié)構(gòu)變量的定義和初始化結(jié)構(gòu)變量的定義和初始化n結(jié)構(gòu)變量的初始化結(jié)構(gòu)變量的初始化 struct student s1 = 101, Zhang, 78, 87, 85; 159.1.5 結(jié)構(gòu)變量的使用結(jié)構(gòu)變量的使用1. 結(jié)構(gòu)變量成員的引用結(jié)構(gòu)變量成員的引用n在在C語言中,使用結(jié)構(gòu)成員操作符語言中,使用結(jié)構(gòu)成員操作符“.”來引用結(jié)來引用結(jié)構(gòu)成員,格式為:構(gòu)成員,格式為: 結(jié)構(gòu)變量名結(jié)構(gòu)變量名結(jié)構(gòu)成
13、員名結(jié)構(gòu)成員名s1.num = 101;strcpy(, Zhang); nest_s1.addr.zip = 310015; 169.1.5 結(jié)構(gòu)變量的使用結(jié)構(gòu)變量的使用2. 結(jié)構(gòu)變量的整體賦值結(jié)構(gòu)變量的整體賦值n具有相同類型的結(jié)構(gòu)變量可以直接賦值具有相同類型的結(jié)構(gòu)變量可以直接賦值。賦值時,將賦值符號右邊結(jié)構(gòu)變量的每一賦值時,將賦值符號右邊結(jié)構(gòu)變量的每一個成員的值都賦給了左邊結(jié)構(gòu)變量中相應(yīng)個成員的值都賦給了左邊結(jié)構(gòu)變量中相應(yīng)的成員。的成員。 struct student s1 = 101, Zhang, 78, 87, 85, s2; s2 = s1;179.1.5 結(jié)構(gòu)變量的
14、使用結(jié)構(gòu)變量的使用3. 結(jié)構(gòu)變量作為函數(shù)參數(shù)結(jié)構(gòu)變量作為函數(shù)參數(shù)n如果一個如果一個C C程序的規(guī)模較大,功能較多,必然需程序的規(guī)模較大,功能較多,必然需要以函數(shù)的形式進行功能模塊的劃分和實現(xiàn)要以函數(shù)的形式進行功能模塊的劃分和實現(xiàn)n如果程序中含有結(jié)構(gòu)數(shù)據(jù),則就可能需要用結(jié)如果程序中含有結(jié)構(gòu)數(shù)據(jù),則就可能需要用結(jié)構(gòu)變量作為函數(shù)的參數(shù)或返回值,以在函數(shù)間構(gòu)變量作為函數(shù)的參數(shù)或返回值,以在函數(shù)間傳遞數(shù)據(jù)。傳遞數(shù)據(jù)。n例:例: double count_average( struct student s ) main:s1.average = count_average ( s1 );特點特點:可以傳遞
15、多個數(shù)據(jù):可以傳遞多個數(shù)據(jù)且參數(shù)形式較簡單且參數(shù)形式較簡單 缺點缺點:對于成員較多的大:對于成員較多的大型結(jié)構(gòu),參數(shù)傳遞時所型結(jié)構(gòu),參數(shù)傳遞時所進行的結(jié)構(gòu)數(shù)據(jù)復(fù)制使進行的結(jié)構(gòu)數(shù)據(jù)復(fù)制使得效率較低得效率較低 189.2 學生成績排序?qū)W生成績排序 n9.2.1 程序解析程序解析n9.2.2 結(jié)構(gòu)數(shù)組操作結(jié)構(gòu)數(shù)組操作199.2.1 程序解析程序解析例例9-2 輸入輸入n(n50)個學生的成績信息,按照學生的)個學生的成績信息,按照學生的個人平均成績從高到低輸出他們的信息。個人平均成績從高到低輸出他們的信息。 struct student students50, temp; /* 定義結(jié)構(gòu)數(shù)組定義結(jié)構(gòu)
16、數(shù)組 */ /* 輸入輸入 */ 209.2.1 程序解析程序解析 /* 結(jié)構(gòu)數(shù)組排序,選擇排序法結(jié)構(gòu)數(shù)組排序,選擇排序法 */ for( i = 0; i n-1; i+ ) index = i; for (j = i+1; j studentsindex.average) /* 比較平均成績比較平均成績*/ index = j; temp = studentsindex;/* 交換數(shù)組元素交換數(shù)組元素 */ studentsindex = studentsi; studentsi = temp; /* 輸出排序后的信息輸出排序后的信息 */ printf(numt namet averag
17、en); for (i = 0; i n; i+ ) printf(%dt%st %.2lfn, studentsi.num, , studentsi.average);21n一個結(jié)構(gòu)變量只能表示一個實體的信息,一個結(jié)構(gòu)變量只能表示一個實體的信息,如果有許多相同類型的實體,就需要使用如果有許多相同類型的實體,就需要使用結(jié)構(gòu)數(shù)組。結(jié)構(gòu)數(shù)組。n結(jié)構(gòu)數(shù)組是結(jié)構(gòu)與數(shù)組的結(jié)合,與普通數(shù)結(jié)構(gòu)數(shù)組是結(jié)構(gòu)與數(shù)組的結(jié)合,與普通數(shù)組的不同之處在于每個數(shù)組元素都是一個組的不同之處在于每個數(shù)組元素都是一個結(jié)構(gòu)類型的變量。結(jié)構(gòu)類型的變量。 9.2.2 結(jié)構(gòu)數(shù)組操作結(jié)構(gòu)數(shù)組操作22n結(jié)構(gòu)數(shù)組的
18、定義方法與結(jié)構(gòu)變量類似結(jié)構(gòu)數(shù)組的定義方法與結(jié)構(gòu)變量類似 struct student students50; 結(jié)構(gòu)數(shù)組結(jié)構(gòu)數(shù)組students,它有,它有50個數(shù)組元素,從個數(shù)組元素,從students0到到students49,每個數(shù)組元素,每個數(shù)組元素都是一個結(jié)構(gòu)類型都是一個結(jié)構(gòu)類型struct student的變量的變量9.2.2 結(jié)構(gòu)數(shù)組操作結(jié)構(gòu)數(shù)組操作239.2.2 結(jié)構(gòu)數(shù)組操作結(jié)構(gòu)數(shù)組操作n結(jié)構(gòu)數(shù)組的初始化結(jié)構(gòu)數(shù)組的初始化 struct student students50 = 101,zhang, 76, 85, 78 , 102, wang, 83, 92, 86 ; stud
19、ents0101Zhang768578students1102Wang839286students4924n結(jié)構(gòu)數(shù)組元素的成員引用結(jié)構(gòu)數(shù)組元素的成員引用 ,其格式為:,其格式為: 結(jié)構(gòu)數(shù)組名結(jié)構(gòu)數(shù)組名下標下標 . 結(jié)構(gòu)成員名結(jié)構(gòu)成員名 n使用方法與同類型的變量完全相同:使用方法與同類型的變量完全相同:studentsi.num = 101;strcpy(, zhang); studentsi = studentsk 9.2.2 結(jié)構(gòu)數(shù)組操作結(jié)構(gòu)數(shù)組操作259.3 修改學生成績修改學生成績 9.3.1 程序解析程序解析 9.3.2 結(jié)構(gòu)指針的概念結(jié)構(gòu)指針的概念9.3.
20、3 結(jié)構(gòu)指針作為函數(shù)參數(shù)結(jié)構(gòu)指針作為函數(shù)參數(shù)269.3.1程序解析程序解析例例9-3 輸入輸入n(n50)個學生的成績信息,再輸個學生的成績信息,再輸入一個學生的學號、課程以及成績,在自定入一個學生的學號、課程以及成績,在自定義函數(shù)中修改該學生指定課程的成績。義函數(shù)中修改該學生指定課程的成績。int main(void)int main(void) int course, i, n, num, pos, score;int course, i, n, num, pos, score;struct student struct student students50students50; /; /
21、* * 定義結(jié)構(gòu)數(shù)組定義結(jié)構(gòu)數(shù)組 * */ / / /* * 輸入輸入n n個學生信息個學生信息 * */ / / /* * 輸入待修改學生信息輸入待修改學生信息 * */ / /* *調(diào)用函數(shù),修改學生成績調(diào)用函數(shù),修改學生成績* */ /pos = update_score(pos = update_score(studentsstudents, n, num, course, score);, n, num, course, score); / /* *輸出修改后的學生信息輸出修改后的學生信息* */ ./ . 279.3.1程序解析程序解析/* 自定義函數(shù),修改學生成績自定義函數(shù),修改
22、學生成績 */int update_score(struct student *p, int n, int num, int course, int score) int i,pos;for(i = 0; i num = num) break;if(i math = score; break; case 2: p-english = score; break; case 3: p-computer = score; break; pos = i; /* 被修改學生在數(shù)組中的下標被修改學生在數(shù)組中的下標 */else /* 無此學號無此學號 */ pos = -1;return pos;289.
23、3.2結(jié)構(gòu)指針的概念結(jié)構(gòu)指針的概念n指針可以指向任何一種變量,而結(jié)構(gòu)變量指針可以指向任何一種變量,而結(jié)構(gòu)變量也是也是C語言中的一種合法變量,因此,指語言中的一種合法變量,因此,指針也可以指向結(jié)構(gòu)變量,這就是結(jié)構(gòu)指針。針也可以指向結(jié)構(gòu)變量,這就是結(jié)構(gòu)指針。n結(jié)構(gòu)指針就是指向結(jié)構(gòu)類型變量的指針結(jié)構(gòu)指針就是指向結(jié)構(gòu)類型變量的指針299.3.2結(jié)構(gòu)指針的概念結(jié)構(gòu)指針的概念struct student s1 = 101, zhang, 78, 87, 85, *p; p = &s1; 101 zhang 788785P309.3.2結(jié)構(gòu)指針的概念結(jié)構(gòu)指針的概念n結(jié)構(gòu)指針的使用結(jié)構(gòu)指針的使用n(1
24、) 用用*p訪問結(jié)構(gòu)成員。如訪問結(jié)構(gòu)成員。如: (*p).num = 101;n(2) 用指向運算符用指向運算符“-”訪問指針指向的結(jié)構(gòu)成訪問指針指向的結(jié)構(gòu)成員。如:員。如: p-num = 101;當當p指向結(jié)構(gòu)變量指向結(jié)構(gòu)變量s1時,下面時,下面三條語句的效果是一樣的:三條語句的效果是一樣的: s1.num = 101; (*p).num = 101; p-num = 101;319.3.3結(jié)構(gòu)指針作為函數(shù)參數(shù)結(jié)構(gòu)指針作為函數(shù)參數(shù)n結(jié)構(gòu)指針的操作是非常靈活的,如果將結(jié)構(gòu)結(jié)構(gòu)指針的操作是非常靈活的,如果將結(jié)構(gòu)指針作為函數(shù)的參數(shù),可以完成比基本類型指針作為函數(shù)的參數(shù),可以完成比基本類型指針更為復(fù)雜的操作。指針更為復(fù)雜的操作。n例例9-3
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)院孤獨癥康復(fù)課件:《讓孩子開說話 導(dǎo)讀》
- 涂裝后處理工中級模擬題及答案
- 高級中式面點師模擬題及答案
- (二模)2024~2025學年度蘇錫常鎮(zhèn)四市高三教學情況調(diào)研(二)地理試卷
- 紙張加工中的耐溫性能優(yōu)化技術(shù)考核試卷
- 航天器空間環(huán)境模擬與效應(yīng)分析試題考核試卷
- 港口及航運設(shè)施工程項目的智能化運維考核試卷
- 船舶修理過程中材料性能檢測考核試卷
- 船用衛(wèi)星天氣預(yù)報系統(tǒng)考核試卷
- 電子器件在遠程醫(yī)療設(shè)備中的應(yīng)用考核試卷
- 2025年九江市第一批面向社會公開招聘留置看護隊員【68人】筆試備考試題及答案解析
- 2025屆廣東省高三下學期二模英語試題(原卷版+解析版)
- 【語文】第23課《“蛟龍”探?!氛n件 2024-2025學年統(tǒng)編版語文七年級下冊
- 大部分分校:地域文化形考任務(wù)一-國開(CQ)-國開期末復(fù)習資料
- 走進泰國-課件
- GB/T 3785.1-2023電聲學聲級計第1部分:規(guī)范
- 人教版新目標英語八年級上冊unit3教學設(shè)計
- 避難硐室密閉門安全技術(shù)措施
- DQE研發(fā)部項目文檔檢查清單
- 安裝定額解釋重點答疑
- 人教一年級起點SL小學四年級下冊單詞表
評論
0/150
提交評論