第7章 利用構(gòu)造類型編程_第1頁
第7章 利用構(gòu)造類型編程_第2頁
第7章 利用構(gòu)造類型編程_第3頁
第7章 利用構(gòu)造類型編程_第4頁
第7章 利用構(gòu)造類型編程_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1第7章 利用構(gòu)造類型編程問題問題原由原由許多問題許多問題在在實際應(yīng)用中需要將多種數(shù)據(jù)類型集合在實際應(yīng)用中需要將多種數(shù)據(jù)類型集合在一個用戶自定義的數(shù)據(jù)類型中,一個用戶自定義的數(shù)據(jù)類型中,將將其稱為構(gòu)造型類其稱為構(gòu)造型類型。構(gòu)造類型是由基本類型擴展而成的復(fù)合類型。型。構(gòu)造類型是由基本類型擴展而成的復(fù)合類型。如何由基本類型構(gòu)造成用戶自定義類型?這就是本如何由基本類型構(gòu)造成用戶自定義類型?這就是本章所要討論的問題。章所要討論的問題。結(jié)構(gòu)體、鏈表、共用體、枚舉類型和自定義語句的結(jié)構(gòu)體、鏈表、共用體、枚舉類型和自定義語句的定義、表示和應(yīng)用。定義、表示和應(yīng)用。 教學(xué)教學(xué)重點重點能力能力要求要求掌握掌握:

2、: 各種構(gòu)造型的定義方法,正確使用構(gòu)造型的各種構(gòu)造型的定義方法,正確使用構(gòu)造型的編程方法,并能利用構(gòu)造型設(shè)計實際應(yīng)用程序。編程方法,并能利用構(gòu)造型設(shè)計實際應(yīng)用程序。熟悉熟悉: :構(gòu)造型數(shù)據(jù)的基本概念構(gòu)造型數(shù)據(jù)的基本概念 。2 7.5 算法案例程序設(shè)計算法案例程序設(shè)計 7.4 枚舉類型與枚舉類型與typedef語句語句 7.3 共用體類型共用體類型 7.2 使用結(jié)構(gòu)體指針處理鏈表使用結(jié)構(gòu)體指針處理鏈表 7.1 結(jié)構(gòu)體類型結(jié)構(gòu)體類型第7章 利用構(gòu)造類型編程37.1 結(jié)構(gòu)體類型 C/C+中提供了一種稱為結(jié)構(gòu)體的數(shù)據(jù)類型,它相當于其中提供了一種稱為結(jié)構(gòu)體的數(shù)據(jù)類型,它相當于其它高級語言中的它高級語言中

3、的“記錄記錄”類型。類型。結(jié)構(gòu)體的定義結(jié)構(gòu)體的定義47.1.1 結(jié)構(gòu)體的引出與定義 輸入輸入3 3個學(xué)生的信息,然后計算每個學(xué)生的總個學(xué)生的信息,然后計算每個學(xué)生的總成績并輸出結(jié)果。成績并輸出結(jié)果。 對于學(xué)生信息,我們可以定義一個結(jié)構(gòu)體類型對于學(xué)生信息,我們可以定義一個結(jié)構(gòu)體類型, ,它包含它包含5 5個個成員,每個成員的數(shù)據(jù)類型見表成員,每個成員的數(shù)據(jù)類型見表7-17-1所示。所示。表表 7-1 7-1 學(xué)生信息表學(xué)生信息表int totalint score3int agechar sexchar nameint num總成績總成績3 3門課成績門課成績年年 齡齡性性 別別姓姓 名名學(xué)學(xué)

4、號號5 struct 1; 2; n; ;結(jié)構(gòu)體的定義以關(guān)鍵字結(jié)構(gòu)體的定義以關(guān)鍵字struct作為標識符,作為標識符,用于說明結(jié)構(gòu)體類型,與用于說明結(jié)構(gòu)體類型,與形成特定結(jié)構(gòu)的類形成特定結(jié)構(gòu)的類型標識符。型標識符。 是由不同類型的數(shù)據(jù)組成的。組成結(jié)構(gòu)體的每個數(shù)據(jù)稱為是由不同類型的數(shù)據(jù)組成的。組成結(jié)構(gòu)體的每個數(shù)據(jù)稱為該結(jié)構(gòu)體的成員項,簡稱成員。結(jié)構(gòu)體定義的一般形式為:該結(jié)構(gòu)體的成員項,簡稱成員。結(jié)構(gòu)體定義的一般形式為:7.1.1 結(jié)構(gòu)體的引出與定義6 結(jié)構(gòu)體由若干結(jié)構(gòu)體由若干 “成員成員” 組成,每一個成員可以是一個基組成,每一個成員可以是一個基本本數(shù)據(jù)類型,也可以是另一個結(jié)構(gòu)體類型,例如數(shù)據(jù)類

5、型,也可以是另一個結(jié)構(gòu)體類型,例如student結(jié)構(gòu)體結(jié)構(gòu)體類型中的類型中的 “年齡年齡” 成員,用成員,用 “出生日期出生日期” 來代替來代替 “年齡年齡”,它包,它包含含3個成員:個成員: year、 month、day。對于。對于student類型可以用類型可以用表表7-2來表示其嵌套結(jié)構(gòu)。來表示其嵌套結(jié)構(gòu)。daydaymonthmonthyearyeartotaltotalscorescoresexsexbirthdaybirthdaynamenamenumnum表表 7-27-2 結(jié)構(gòu)體類型的嵌套結(jié)構(gòu)體類型的嵌套7.1.1 結(jié)構(gòu)體的引出與定義7學(xué)生信息定義成以下類型學(xué)生信息定義成以下

6、類型: :struct student /聲明結(jié)構(gòu)體類型,名為struct studentint num;char name12; char sex; struct date birthday; /生日成員屬于struct date類型 int score3; int tota; struct date /聲明結(jié)構(gòu)體類型,包含下列三個成分 int year; /年 int month; /月 int day; /日;7.1.1 結(jié)構(gòu)體的引出與定義8 在定義結(jié)構(gòu)體時,必須聲明引用該結(jié)構(gòu)體的所有變量,結(jié)在定義結(jié)構(gòu)體時,必須聲明引用該結(jié)構(gòu)體的所有變量,結(jié)構(gòu)體變量的定義方法通??梢圆捎萌缦聵?gòu)體變量的定

7、義方法通??梢圆捎萌缦? 3種。種。 在結(jié)構(gòu)體說明的同時定義結(jié)構(gòu)體變量。在結(jié)構(gòu)體說明的同時定義結(jié)構(gòu)體變量。其語法結(jié)構(gòu)定義其語法結(jié)構(gòu)定義的一般形式為:的一般形式為: struct struct ; 在定義結(jié)構(gòu)體類型的同時聲明變量在定義結(jié)構(gòu)體類型的同時聲明變量 直接定義直接定義 7.1.1 結(jié)構(gòu)體的引出與定義97.1.2 結(jié)構(gòu)體變量的引用與初始化 定義結(jié)構(gòu)體變量后,可引用結(jié)構(gòu)體變量定義結(jié)構(gòu)體變量后,可引用結(jié)構(gòu)體變量, , 例如進行賦值、例如進行賦值、輸入、輸出、運算等操作都是通過結(jié)構(gòu)體變量對其成員的引用輸入、輸出、運算等操作都是通過結(jié)構(gòu)體變量對其成員的引用來實現(xiàn)的。結(jié)構(gòu)體變量中成員引用的一般形式如

8、下:來實現(xiàn)的。結(jié)構(gòu)體變量中成員引用的一般形式如下:圓點圓點“”為結(jié)構(gòu)體成員運算符,運算優(yōu)先為結(jié)構(gòu)體成員運算符,運算優(yōu)先級級最高最高, ,結(jié)合性是自左至右。引用時可以把結(jié)合性是自左至右。引用時可以把 “ “結(jié)構(gòu)體變量名結(jié)構(gòu)體變量名. .成員成員名名” ” 看成一個整體看成一個整體, ,像使用一個簡單變量一樣使用像使用一個簡單變量一樣使用“結(jié)構(gòu)體變結(jié)構(gòu)體變量量名名. .成員名成員名”。107.1.2 結(jié)構(gòu)體變量的引用與初始化 在定義結(jié)構(gòu)體變量的時,可以給它的每個成員賦初值。結(jié)在定義結(jié)構(gòu)體變量的時,可以給它的每個成員賦初值。結(jié)構(gòu)體變量變量初始化的一般形式為:構(gòu)體變量變量初始化的一般形式為: Stru

9、ct Struct 初始數(shù)據(jù);初始數(shù)據(jù);花括號中包圍的初始數(shù)據(jù)之間用逗號花括號中包圍的初始數(shù)據(jù)之間用逗號“,”分分隔,初始數(shù)據(jù)與結(jié)構(gòu)體成員項之間具有邏輯隔,初始數(shù)據(jù)與結(jié)構(gòu)體成員項之間具有邏輯( (數(shù)據(jù)個數(shù)、先后數(shù)據(jù)個數(shù)、先后順序、數(shù)據(jù)類型順序、數(shù)據(jù)類型) )對應(yīng)關(guān)系。對應(yīng)關(guān)系。 117.1.3 結(jié)構(gòu)體數(shù)組 如果有多個學(xué)生的數(shù)據(jù)需要進行處理,顯然應(yīng)該使用數(shù)組如果有多個學(xué)生的數(shù)據(jù)需要進行處理,顯然應(yīng)該使用數(shù)組來完成,這就是結(jié)構(gòu)體數(shù)組。來完成,這就是結(jié)構(gòu)體數(shù)組。 結(jié)構(gòu)體數(shù)組是其元素都是具有相同結(jié)構(gòu)體類型的結(jié)構(gòu)體變結(jié)構(gòu)體數(shù)組是其元素都是具有相同結(jié)構(gòu)體類型的結(jié)構(gòu)體變量。同一般數(shù)組一樣,結(jié)構(gòu)體數(shù)組也必須先

10、定義或說明,然后量。同一般數(shù)組一樣,結(jié)構(gòu)體數(shù)組也必須先定義或說明,然后才能引用。結(jié)構(gòu)體數(shù)組定義的一般形式為:才能引用。結(jié)構(gòu)體數(shù)組定義的一般形式為: Struct Struct 元素個數(shù)元素個數(shù), 元素個數(shù)元素個數(shù) ,“struct“struct”是已定義的結(jié)構(gòu)體類是已定義的結(jié)構(gòu)體類型型, ,結(jié)構(gòu)體數(shù)組的定義方法和結(jié)構(gòu)體變量相似,只需說明它為結(jié)構(gòu)體數(shù)組的定義方法和結(jié)構(gòu)體變量相似,只需說明它為數(shù)組類型即可。數(shù)組類型即可。127.1.3 結(jié)構(gòu)體數(shù)組 一個外部的或靜態(tài)的結(jié)構(gòu)體數(shù)組在定義的同時可以對其初一個外部的或靜態(tài)的結(jié)構(gòu)體數(shù)組在定義的同時可以對其初始化。其一般格式是在定義之后緊跟一組用花括號括起來的

11、初始化。其一般格式是在定義之后緊跟一組用花括號括起來的初始數(shù)據(jù),一般形式如下:始數(shù)據(jù),一般形式如下: struct struct =初始數(shù)據(jù)初始數(shù)據(jù) “struct”是預(yù)先說明(已定義)是預(yù)先說明(已定義)過的結(jié)構(gòu)體類型。在初始化時,應(yīng)當使初始數(shù)據(jù)的個數(shù)與結(jié)構(gòu)過的結(jié)構(gòu)體類型。在初始化時,應(yīng)當使初始數(shù)據(jù)的個數(shù)與結(jié)構(gòu)體數(shù)組的元素個數(shù)以及每個數(shù)組元素的成員個數(shù)相匹配。體數(shù)組的元素個數(shù)以及每個數(shù)組元素的成員個數(shù)相匹配。137.1.3 結(jié)構(gòu)體數(shù)組 struct struct ; =初始數(shù)據(jù)初始數(shù)據(jù) 除此而外,還可以使用下面的定義形式如下除此而外,還可以使用下面的定義形式如下 : 同上面的定義相似。此時可

12、將學(xué)生信息表示如下:同上面的定義相似。此時可將學(xué)生信息表示如下:struct studentstruct student int num int numchar name12char name12;char sexchar sex;int ageint age;float scorefloat score; stu4= 20110001stu4= 20110001,“Zhangrong”Zhangrong”,F(xiàn)F,1717,265265,2011000220110002,“Lizhiyong”Lizhiyong”,TT,1818,266266,2011000320110003,“Chenqia

13、ng”Chenqiang”,TT,1919,264264,2011000420110004,“Huangjing”Huangjing”,TT,1818,289289;147.1.3 結(jié)構(gòu)體數(shù)組 結(jié)構(gòu)體數(shù)組的引用如同結(jié)構(gòu)體變量一樣,也就是對結(jié)構(gòu)體結(jié)構(gòu)體數(shù)組的引用如同結(jié)構(gòu)體變量一樣,也就是對結(jié)構(gòu)體數(shù)組的引用應(yīng)該通過其相應(yīng)元素的成員來實現(xiàn)。數(shù)組的引用應(yīng)該通過其相應(yīng)元素的成員來實現(xiàn)。使用結(jié)構(gòu)體數(shù)組計算使用結(jié)構(gòu)體數(shù)組計算struct student中學(xué)生的平均成績。中學(xué)生的平均成績。在在main函數(shù)之外定義一個外部結(jié)構(gòu)體數(shù)組,將學(xué)生的信息函數(shù)之外定義一個外部結(jié)構(gòu)體數(shù)組,將學(xué)生的信息存放到該數(shù)組相應(yīng)元素當

14、中,然后分別定義存放總成績和平均存放到該數(shù)組相應(yīng)元素當中,然后分別定義存放總成績和平均成績的變量成績的變量,利用循環(huán)語句對每個學(xué)生利用循環(huán)語句對每個學(xué)生(變量變量)的成績的成績(成員項成員項)進進行累加行累加,求總成績求總成績,再求平均成績并輸出。再求平均成績并輸出。157.1.3 結(jié)構(gòu)體數(shù)組 #include struct student int num char name12; char sex; int age; float score; struct student stu=20110001,“Zhangrong”,F(xiàn),17,265, 20110002,“Lizhiyong”,T,18

15、,266, 20110003,“Chenqiang”,T,19,264, 20110004,“Huangjing”,T,18,289;167.1.3 結(jié)構(gòu)體數(shù)組 main() int i; float average,sum=0; for(i=0;i=3;i+) sum=sum+stui.score; printf(“sum=fn”,sum); average=sum/4; printf(“average=fn”,average); 運行程序,輸出結(jié)果:運行程序,輸出結(jié)果: sum=1084.000000 average=271.000000177.1.4 結(jié)構(gòu)體指針結(jié)構(gòu)體變量在內(nèi)存中有對應(yīng)的

16、地址空間,其地址值就是該結(jié)構(gòu)體變量在內(nèi)存中有對應(yīng)的地址空間,其地址值就是該變量所占內(nèi)存空間的起始地址,指針變量存放的值就是結(jié)構(gòu)體變量所占內(nèi)存空間的起始地址,指針變量存放的值就是結(jié)構(gòu)體變量在內(nèi)存中的起始地址,通過結(jié)構(gòu)體指針變量即可訪問該結(jié)變量在內(nèi)存中的起始地址,通過結(jié)構(gòu)體指針變量即可訪問該結(jié)構(gòu)體變量。構(gòu)體變量。 結(jié)構(gòu)體指針變量的定義:結(jié)構(gòu)體指針變量的定義:當一個指針變量用來指向一當一個指針變量用來指向一個結(jié)構(gòu)體變量時,便稱為結(jié)構(gòu)體指針變量,結(jié)構(gòu)體指針變量的個結(jié)構(gòu)體變量時,便稱為結(jié)構(gòu)體指針變量,結(jié)構(gòu)體指針變量的值就是其所指向的結(jié)構(gòu)體變量的起始地址。結(jié)構(gòu)體指針變量定值就是其所指向的結(jié)構(gòu)體變量的起始地

17、址。結(jié)構(gòu)體指針變量定義的一般形式為:義的一般形式為: struct * * 187.1.4 結(jié)構(gòu)體指針或或 () - 結(jié)構(gòu)體指針變量的賦值:結(jié)構(gòu)體指針變量的賦值: 結(jié)構(gòu)體指針變量結(jié)構(gòu)體指針變量也必須先賦也必須先賦值才能使用。值才能使用。 結(jié)構(gòu)體指針變量的引用:結(jié)構(gòu)體指針變量的引用: 定義結(jié)構(gòu)體指針變量后,就定義結(jié)構(gòu)體指針變量后,就可以對該指針變量進行各種操作。引用結(jié)構(gòu)體指針變量的一般可以對該指針變量進行各種操作。引用結(jié)構(gòu)體指針變量的一般形式如下:形式如下:“這兩種形式的功能作用都是一樣的這兩種形式的功能作用都是一樣的, ,事實上事實上, ,它們都等價于:它們都等價于: 197.1.4 結(jié)構(gòu)體指

18、針 結(jié)構(gòu)體指針變量可以用來指向一個結(jié)構(gòu)體數(shù)組,這時結(jié)構(gòu)結(jié)構(gòu)體指針變量可以用來指向一個結(jié)構(gòu)體數(shù)組,這時結(jié)構(gòu)體指針變量的值是結(jié)構(gòu)體數(shù)組的首地址。例如:體指針變量的值是結(jié)構(gòu)體數(shù)組的首地址。例如: struct student stu4,*p; p=stu; /數(shù)組名即為數(shù)組首地址,無須再加取地址符數(shù)組名即為數(shù)組首地址,無須再加取地址符 上述語句表示定義了一個結(jié)構(gòu)體數(shù)組上述語句表示定義了一個結(jié)構(gòu)體數(shù)組stustu,它包含有,它包含有4 4個元個元素,同時定義了一個結(jié)構(gòu)體指針變量素,同時定義了一個結(jié)構(gòu)體指針變量p p, 并將該指針變量指向并將該指針變量指向了結(jié)構(gòu)體數(shù)組了結(jié)構(gòu)體數(shù)組stustu。此時結(jié)構(gòu)體

19、指針變量。此時結(jié)構(gòu)體指針變量p p所指向的是整個結(jié)構(gòu)所指向的是整個結(jié)構(gòu)體數(shù)組的首地址。體數(shù)組的首地址。指向結(jié)構(gòu)體數(shù)組的指針的應(yīng)用。指向結(jié)構(gòu)體數(shù)組的指針的應(yīng)用。207.1.4 結(jié)構(gòu)體指針 struct student int num char name12; char sex; int age; float score; stu4=20110001, “Zhangrong”,F(xiàn),17,265, 20110002,“Lizhiyong”,T,18,266, 20110003,“Chenqiang”,T,19,264, 20110004,“Huangjing”,T,18,289; main( ) s

20、truct student *p; printf(“NambertNamettSextAgetScoretn”); for(p=stu;pnum, p-name, p-sex,p-age,p-score);217.1.4 結(jié)構(gòu)體指針Number Name Sex Age Score20110001 Zhangrong F 17 265.00000020110002 Lizhiyong T 18 266.00000020110003 Chenqiang T 19 264.00000020110004 Huangjing T 18 289.000000227.1.5 結(jié)構(gòu)體與函數(shù) 將一個結(jié)構(gòu)體變量

21、的值傳遞給另外一個函數(shù),通??捎脤⒁粋€結(jié)構(gòu)體變量的值傳遞給另外一個函數(shù),通常可用以下以下3 3種方法。種方法。用結(jié)構(gòu)體變量的成員作函數(shù)實參:用結(jié)構(gòu)體變量的成員作函數(shù)實參:每一個結(jié)構(gòu)體變量每一個結(jié)構(gòu)體變量的成員都相當于一個普通變量。的成員都相當于一個普通變量。用結(jié)構(gòu)體變量作函數(shù)實參:用結(jié)構(gòu)體變量作函數(shù)實參:將結(jié)構(gòu)體變量所占的內(nèi)存將結(jié)構(gòu)體變量所占的內(nèi)存單元的內(nèi)容全部順序傳遞給形參結(jié)構(gòu)體變量,因此要單元的內(nèi)容全部順序傳遞給形參結(jié)構(gòu)體變量,因此要求實參與形參的類型應(yīng)保持一致。求實參與形參的類型應(yīng)保持一致。用指向結(jié)構(gòu)體變量的指針作函數(shù)實參:用指向結(jié)構(gòu)體變量的指針作函數(shù)實參:它是一種它是一種“地地址傳遞址

22、傳遞”方式方式, ,將結(jié)構(gòu)體變量的首地址傳給形參。將結(jié)構(gòu)體變量的首地址傳給形參。1 12 23 3237.1.5 結(jié)構(gòu)體與函數(shù)設(shè)有設(shè)有N個結(jié)構(gòu)體變量個結(jié)構(gòu)體變量stu,內(nèi)含學(xué)號、姓名和內(nèi)含學(xué)號、姓名和3門課門課程的成績,程的成績, 要求輸出平均成績最高的學(xué)生的信息。要求輸出平均成績最高的學(xué)生的信息。 按照功能函數(shù)化的思想,可用按照功能函數(shù)化的思想,可用3個函數(shù)來分別實個函數(shù)來分別實現(xiàn)不同的功能:現(xiàn)不同的功能: 用用input函數(shù)來輸入數(shù)據(jù)和求各學(xué)生平均成績。函數(shù)來輸入數(shù)據(jù)和求各學(xué)生平均成績。 用用max函數(shù)來找平均成績最高的學(xué)生。函數(shù)來找平均成績最高的學(xué)生。 用用print函數(shù)來輸出成績最高學(xué)

23、生的信息。函數(shù)來輸出成績最高學(xué)生的信息。 在主函數(shù)中先后調(diào)用這在主函數(shù)中先后調(diào)用這3個函數(shù),用指向結(jié)構(gòu)體變量的指針個函數(shù),用指向結(jié)構(gòu)體變量的指針作為實參,最后得到結(jié)果。為了簡化操作,本程序只設(shè)作為實參,最后得到結(jié)果。為了簡化操作,本程序只設(shè)3個個 學(xué)生學(xué)生(N3)。為了方便閱讀。為了方便閱讀,在輸出時采用中文字符串提示。在輸出時采用中文字符串提示。 247.1.5 結(jié)構(gòu)體與函數(shù)程序?qū)崿F(xiàn)程序?qū)崿F(xiàn)# include# define N 3 /學(xué)生數(shù)為3struct student /聲明結(jié)構(gòu)體類型structstudent int num; /學(xué)號 char name12; /姓名 float s

24、core3; /3門課成績 float aver; ; /平均成績void main() void input(struct student stu ); /函數(shù)聲明 struct student max(struct student stu ); /函數(shù)聲明 void print(struct student stu); /函數(shù)聲明 struct student stuN,*p=stu; /定義結(jié)構(gòu)體數(shù)組和指針 input(p); /調(diào)用print函數(shù) print(max(p); /調(diào)用print函數(shù),以函數(shù)的返回值作為參數(shù)257.1.5 結(jié)構(gòu)體與函數(shù) void input(struct s

25、tudent stu ) /定義input函數(shù) int i printf(“請輸入各學(xué)生的信息:學(xué)號、姓名、三門課成績:n”); for(i=0;iN;i+) scanf(“dsfff”,&stui.num,,&stui.score0, &stui.score1,&stui.score2); stui.aver=(stui.score01+stui.scorell+stui.score2)/3.0 ; struct student max(struct student stu ) /定義max函數(shù) int i,m=0; /用m存放成績最高的學(xué)生在數(shù)組中的序號 for(i=0;

26、istum.aver) m=i; /找出平均成績最高學(xué)生在數(shù)組中的序號 return stum; /返回包含該生信息的結(jié)構(gòu)體元素267.1.5 結(jié)構(gòu)體與函數(shù) void print(struct student stud) /定義定義print函數(shù)函數(shù) printf(“n成績最高的學(xué)生是成績最高的學(xué)生是:n”); printf(“學(xué)號學(xué)號:dn姓名姓名:sn三門課成績?nèi)T課成績:5.1f,5.1f, 5.1fn平均成績:平均成績:6.2fn”,stud.num,, stud.score0,stud.score1,stud.score2,stud.aver);請輸入各學(xué)生的信息:

27、學(xué)號、姓名、三門課成績:請輸入各學(xué)生的信息:學(xué)號、姓名、三門課成績:10101 Li 88 90 98 10103 Wang 98 87 86 10106 Fun 96.5 89 97 成績最高的學(xué)生是:成績最高的學(xué)生是:98 學(xué)號:學(xué)號:10101 姓名:姓名:Li三門課成績:三門課成績:88.0 90.0 98.0 平均成績:平均成績:92.00277.1.5 結(jié)構(gòu)體與函數(shù)函數(shù)返回值為結(jié)構(gòu)體類型就是在函數(shù)被調(diào)用后可以返回一函數(shù)返回值為結(jié)構(gòu)體類型就是在函數(shù)被調(diào)用后可以返回一個值給主調(diào)函數(shù),這個值可以是整型、實型、字符型,也可以個值給主調(diào)函數(shù),這個值可以是整型、實型、字符型,也可以是一個結(jié)構(gòu)體

28、類型。其一般形式如下:是一個結(jié)構(gòu)體類型。其一般形式如下: (形參表形參表) ) 函數(shù)體;函數(shù)體; 、 (形參表形參表) )和和 函數(shù)體;函數(shù)體; 都是前都是前面已介紹的內(nèi)容。面已介紹的內(nèi)容?!緦嵗龑嵗? 75 5】將學(xué)生的信息(學(xué)號、成績、姓名)輸入到將學(xué)生的信息(學(xué)號、成績、姓名)輸入到結(jié)構(gòu)體數(shù)組中,然后將其輸出。結(jié)構(gòu)體數(shù)組中,然后將其輸出。287.1.5 結(jié)構(gòu)體與函數(shù) # include # define N 10 struct stu int num; char name12; float score; struct stu input(void) /定義的函數(shù)沒有參數(shù)定義的函數(shù)沒有參數(shù)

29、,返回值為結(jié)構(gòu)體類型返回值為結(jié)構(gòu)體類型 struct stu b; /定義一個結(jié)構(gòu)體變量定義一個結(jié)構(gòu)體變量b scanf(“df”,&b.num,&b.score); gets(); return (b) ; /返回結(jié)構(gòu)體變量返回結(jié)構(gòu)體變量b的值的值297.1.5 結(jié)構(gòu)體與函數(shù) struct stu aN; /定義結(jié)構(gòu)體數(shù)組定義結(jié)構(gòu)體數(shù)組a main( ) int i; printf(“請按學(xué)號、成績、姓名的順序輸入請按學(xué)號、成績、姓名的順序輸入d個學(xué)生的信個學(xué)生的信 息息:n”,N); for(i=0;iN;i+) ai=input(); /調(diào)用函數(shù),函數(shù)的返回值賦值給數(shù)組元素調(diào)

30、用函數(shù),函數(shù)的返回值賦值給數(shù)組元素ai for(i=0;iN;i+) printf(“d,s,5.2fn”,ai.num,,ai.score); 307.2 使用結(jié)構(gòu)體指針處理鏈表 鏈表是一種重要的數(shù)據(jù)結(jié)構(gòu),使用這一數(shù)據(jù)結(jié)構(gòu)可以動態(tài)鏈表是一種重要的數(shù)據(jù)結(jié)構(gòu),使用這一數(shù)據(jù)結(jié)構(gòu)可以動態(tài)地進行數(shù)據(jù)的存儲和分配,并可以方便地對數(shù)據(jù)進行插入、刪地進行數(shù)據(jù)的存儲和分配,并可以方便地對數(shù)據(jù)進行插入、刪除等操作,一種簡單的單向鏈表結(jié)構(gòu)。除等操作,一種簡單的單向鏈表結(jié)構(gòu)。結(jié)點結(jié)點1 1 結(jié)點結(jié)點2 2 結(jié)點結(jié)點3 3 結(jié)點結(jié)點4 4 單向鏈表結(jié)構(gòu)圖單向鏈表結(jié)構(gòu)圖數(shù)據(jù)成員數(shù)據(jù)成員指針成員指針成員數(shù)據(jù)

31、成員數(shù)據(jù)成員指針成員指針成員數(shù)據(jù)成員數(shù)據(jù)成員NULLNULL頭指針頭指針數(shù)據(jù)成員數(shù)據(jù)成員指針成員指針成員317.2.2 鏈表結(jié)點定義與動態(tài)存儲 struct ; 鏈表通常被設(shè)計為結(jié)構(gòu)類型,鏈表通常被設(shè)計為結(jié)構(gòu)類型, 并動態(tài)分配存儲空間,即利并動態(tài)分配存儲空間,即利用函數(shù)開辟或回收存儲單元。用函數(shù)開辟或回收存儲單元。 在建立一個鏈表前,必須先定義在建立一個鏈表前,必須先定義鏈表結(jié)點,結(jié)點定義包括普通結(jié)點定義和頭結(jié)點定義。鏈表結(jié)點,結(jié)點定義包括普通結(jié)點定義和頭結(jié)點定義。 普通結(jié)點定義包括數(shù)據(jù)域和引用域兩部分。結(jié)構(gòu)體定義單普通結(jié)點定義包括數(shù)據(jù)域和引用域兩部分。結(jié)構(gòu)體定義單鏈表普通結(jié)點的一般形式為:鏈

32、表普通結(jié)點的一般形式為:32 單鏈表中單鏈表中, ,頭結(jié)點僅含有引用域,通常使用頭結(jié)點僅含有引用域,通常使用headerheader來表示。來表示。因此,頭結(jié)點可以使用一個結(jié)構(gòu)體指針來表示。結(jié)構(gòu)體定義單因此,頭結(jié)點可以使用一個結(jié)構(gòu)體指針來表示。結(jié)構(gòu)體定義單鏈表頭結(jié)點的一般形式為:鏈表頭結(jié)點的一般形式為: struct *header 鏈表是一個動態(tài)的存儲結(jié)構(gòu),鏈表是一個動態(tài)的存儲結(jié)構(gòu), 在建立鏈表時,在建立鏈表時, 鏈表上的鏈表上的每個結(jié)點不是預(yù)先定義好了的,而是需要時可以隨時從內(nèi)存中每個結(jié)點不是預(yù)先定義好了的,而是需要時可以隨時從內(nèi)存中申請,不需要時可以隨時釋放。申請,不需要時可以隨時釋放。

33、 7.2.2 鏈表結(jié)點定義與動態(tài)存儲337.2.3 鏈表的建立 鏈表是一種動態(tài)結(jié)構(gòu),它是通過指向鏈表第一個結(jié)點的鏈表是一種動態(tài)結(jié)構(gòu),它是通過指向鏈表第一個結(jié)點的指針訪問的,它指向鏈表在內(nèi)存中的首地址,其后的結(jié)點是指針訪問的,它指向鏈表在內(nèi)存中的首地址,其后的結(jié)點是通過頭結(jié)點中的通過頭結(jié)點中的next指針成員訪問的。鏈表最后一個結(jié)點中指針成員訪問的。鏈表最后一個結(jié)點中的的next域值通常被設(shè)置為域值通常被設(shè)置為NULL,用來表示鏈表尾。建立鏈,用來表示鏈表尾。建立鏈表通常有兩種方法:表通常有兩種方法: 表尾添加法:表尾添加法:從一個空表開始,將生成的新結(jié)點插入到從一個空表開始,將生成的新結(jié)點插入

34、到當前鏈表的表尾,直至建立所有的結(jié)點。當前鏈表的表尾,直至建立所有的結(jié)點。 表頭添加法:表頭添加法:從一個空表開始,將生成的新結(jié)點插入到從一個空表開始,將生成的新結(jié)點插入到當前鏈表的表頭,直至建立所有的結(jié)點。當前鏈表的表頭,直至建立所有的結(jié)點。 347.2.4 鏈表的輸出 鏈表的輸出就是將鏈表中各結(jié)點的數(shù)據(jù)依次輸出。首先鏈表的輸出就是將鏈表中各結(jié)點的數(shù)據(jù)依次輸出。首先必須知道鏈表中第一個結(jié)點的地址。然后使必須知道鏈表中第一個結(jié)點的地址。然后使p p指向下一結(jié)點指向下一結(jié)點, ,輸出下一結(jié)點數(shù)據(jù)成員的值輸出下一結(jié)點數(shù)據(jù)成員的值, ,其步驟可描述為:其步驟可描述為: Step1:判斷鏈表頭指針:判

35、斷鏈表頭指針head是否為是否為NULL,若,若head為為NULL,則輸出,則輸出“鏈表為空鏈表為空”信息,然后結(jié)束;若信息,然后結(jié)束;若head不為空,則執(zhí)行不為空,則執(zhí)行Step2。Step3:判斷:判斷p是否為是否為NULL,若,若p不為不為NULL,則執(zhí),則執(zhí)行行Stepf,否則結(jié)束循環(huán);,否則結(jié)束循環(huán);Step2:令一指針變量:令一指針變量p,并對并對p賦值為賦值為head,即即p=head;Step4:輸出:輸出p數(shù)據(jù)成員的值數(shù)據(jù)成員的值,然后使然后使p指向下一結(jié)點,指向下一結(jié)點,即即p=p-next;再轉(zhuǎn);再轉(zhuǎn)Step3。 1 14 42 23 3357.2.5 鏈表的插入 鏈

36、表的插入就是將一個新結(jié)點插入到一個已有鏈表的適鏈表的插入就是將一個新結(jié)點插入到一個已有鏈表的適當位置。當位置。 在一個鏈表中插入結(jié)點的具體步驟可描述為:在一個鏈表中插入結(jié)點的具體步驟可描述為: Step1Step1:查找要插入新結(jié)點的位置;若沒有找到要插:查找要插入新結(jié)點的位置;若沒有找到要插入的位置,則插入到表尾;入的位置,則插入到表尾;Step3Step3:將新結(jié)點的:將新結(jié)點的nextnext指向前一個結(jié)點的指向前一個結(jié)點的nextnext指向指向的結(jié)點;的結(jié)點;Step2Step2:用:用mallocmalloc函數(shù)向系統(tǒng)申請分配一個結(jié)點空間函數(shù)向系統(tǒng)申請分配一個結(jié)點空間, ,并賦值;

37、并賦值;Step4Step4:將前一個結(jié)點的:將前一個結(jié)點的nextnext指向新結(jié)點。指向新結(jié)點。1 13 32 24 4367.2.6 鏈表的刪除Step2Step2:將前一個結(jié)點的:將前一個結(jié)點的nextnext指向要刪除結(jié)點的指向要刪除結(jié)點的nextnext指向的結(jié)點。指向的結(jié)點。Step1Step1:判斷鏈表的頭指針:判斷鏈表的頭指針headhead是否為是否為NULLNULL,若,若headhead為為NULLNULL,則輸出,則輸出“鏈表為空鏈表為空” Step3Step3:用:用freefree函數(shù)釋放本結(jié)點。函數(shù)釋放本結(jié)點。1 12 23 3 鏈表的刪除就是將鏈表中的某個指定

38、的結(jié)點從鏈表中分鏈表的刪除就是將鏈表中的某個指定的結(jié)點從鏈表中分離出來,不再與鏈表的其它結(jié)點有任何聯(lián)系,并且釋放已刪離出來,不再與鏈表的其它結(jié)點有任何聯(lián)系,并且釋放已刪除結(jié)點所占據(jù)的內(nèi)存空間。刪除一個鏈表結(jié)點的步驟描述為除結(jié)點所占據(jù)的內(nèi)存空間。刪除一個鏈表結(jié)點的步驟描述為:377.2.7 鏈表的合并 兩個鏈表合并的操作原理類似于站隊,兩排站好的隊伍,兩個鏈表合并的操作原理類似于站隊,兩排站好的隊伍,想合并為一排,則需要依次取每個隊伍中最矮的人排到新隊伍想合并為一排,則需要依次取每個隊伍中最矮的人排到新隊伍的后面,這樣最后完成的隊伍就是兩個隊伍的完美合并。的后面,這樣最后完成的隊伍就是兩個隊伍的

39、完美合并。 合并兩個鏈表。合并兩個鏈表。 建立兩個帶頭結(jié)點的有序建立兩個帶頭結(jié)點的有序單鏈表單鏈表La,Lb(單調(diào)遞增單調(diào)遞增),利用,利用La,Lb的結(jié)點空間,將的結(jié)點空間,將La和和Lb合并成一個按元素值遞增的有序單鏈表合并成一個按元素值遞增的有序單鏈表Lc。 建兩個順序鏈表建兩個順序鏈表La表和表和Lb表,表, 掃描掃描La和和Lb中的元素,比較當前元素的值,將較小者鏈到中的元素,比較當前元素的值,將較小者鏈到*r后,如此后,如此重復(fù)直到重復(fù)直到La和和Lb比較結(jié)束,再將另一個鏈表余下的內(nèi)容鏈到比較結(jié)束,再將另一個鏈表余下的內(nèi)容鏈到r所指的結(jié)點后。程序需要三個指針,分別為所指的結(jié)點后。程

40、序需要三個指針,分別為p,q,r, 其中其中p,q指向指向La表、表、Lb表的首結(jié)點,用表的首結(jié)點,用p遍歷遍歷La表表, q遍歷遍歷Lb表,表,r指指向合并后的新表的最后一個結(jié)點向合并后的新表的最后一個結(jié)點,r的初值指向的初值指向La表的頭結(jié)點。表的頭結(jié)點。387.2.7 鏈表的合并 struct node *Union(struct node *heada, struct node *headb)/合并程序合并程序 struct node *p, *q,*r; /定義幾個結(jié)構(gòu)體指針定義幾個結(jié)構(gòu)體指針 p=heada-next; /p指向鏈表指向鏈表heada的第一個結(jié)點的第一個結(jié)點 q=h

41、eadb-next; /q指向鏈表指向鏈表headb的第一個結(jié)點的第一個結(jié)點 r=heada; /r指向合并后的鏈表的最后一個結(jié)點指向合并后的鏈表的最后一個結(jié)點 while(p!=NuLL)(q! =NULL) if( p-dataq-data) /比較比較p和和q兩個鏈表中的數(shù)據(jù)兩個鏈表中的數(shù)據(jù) r-next=q; / r是新鏈表的最后一個指針是新鏈表的最后一個指針 r=q; /此時此時q比較小,將比較小,將q結(jié)點加入到合并連表中結(jié)點加入到合并連表中 q=q-next; / q后移,檢查新的結(jié)點后移,檢查新的結(jié)點 39 else if (p-datadata) /比較比較p和和q兩個鏈表中的

42、數(shù)據(jù)兩個鏈表中的數(shù)據(jù) r-next=p; / r是新鏈表的最后一個指針是新鏈表的最后一個指針 r=p; /此時此時q比較小比較小,將將q結(jié)點加入到合并連表中結(jié)點加入到合并連表中 p=p-next; / q后移,檢查新的結(jié)點后移,檢查新的結(jié)點 /將數(shù)值較小的結(jié)點鏈入合并后的鏈表將數(shù)值較小的結(jié)點鏈入合并后的鏈表 if (q!=NULL) /將剩余鏈表直接鏈入合并后的鏈表將剩余鏈表直接鏈入合并后的鏈表 r-next=q; else r-next=p; /若若q表中還有剩余則將表中還有剩余則將q中余下結(jié)點全部合并到中余下結(jié)點全部合并到r中中 return heada; void main() stru

43、ct node *La,*Lb,*Lc,*p,aj /定義幾個結(jié)構(gòu)體類型指針及變量定義幾個結(jié)構(gòu)體類型指針及變量 int nl; /nl是鏈表是鏈表La的長度的長度 int n2; /n2是鏈表是鏈表Lb的長度的長度 p=a; /將將a的地址賦給的地址賦給p7.2.7 鏈表的合并40 printf(“Please input the length of the lista:n”); scanf(%d”,n1); /輸入輸入nl的值的值 La=a; /將將a的地址賦給的地址賦給p La=CreateList (nl)j /創(chuàng)建長度為創(chuàng)建長度為nl的鏈表的鏈表La printf(“Please in

44、put the length of the listb:n”); /輸出提示信息輸出提示信息 scanf(“%d”,n2); /輸入輸入n2的值的值 Lb=a; /將將a的地址賦給的地址賦給Lb Lb=CreateList (n2); /創(chuàng)建長度為創(chuàng)建長度為n2的鏈表的鏈表Lb Lc=Union (La, Lb); /合并表合并表La和表和表Lb,得到表,得到表Lc p=Lc-next; /p指向鏈表中的第一個結(jié)點指向鏈表中的第一個結(jié)點 printf(“Now output the union list Lcs data:n”); /輸出提示信息輸出提示信息 while(p!=NULL) pr

45、intf(“%d”,p-data); p=p-next; 7.2.7 鏈表的合并417.3 共用體類型本書中采用本書中采用“共用體共用體”以為言簡意賅,更能反映這種結(jié)構(gòu)以為言簡意賅,更能反映這種結(jié)構(gòu)的的特點,即幾個變量共用一個內(nèi)存區(qū)。使幾個不同的變量共占同特點,即幾個變量共用一個內(nèi)存區(qū)。使幾個不同的變量共占同一段內(nèi)存的結(jié)構(gòu)稱為一段內(nèi)存的結(jié)構(gòu)稱為“共用體共用體”類型的結(jié)構(gòu)類型的結(jié)構(gòu),例如:例如: union department int class; char office10; ; 是一個名為是一個名為department的共用體類型,它包含兩個變量:的共用體類型,它包含兩個變量:一個為整型,

46、成員名為一個為整型,成員名為class;另一個為字符數(shù)組,數(shù)組名為;另一個為字符數(shù)組,數(shù)組名為office。427.3.2 共用體的定義 “ “共用體共用體”與與“結(jié)構(gòu)體結(jié)構(gòu)體”的定義形式相似。與結(jié)構(gòu)定義相同的定義形式相似。與結(jié)構(gòu)定義相同, ,共用體的定義并不為共用體分配具體的內(nèi)存空間,而僅僅說明了共用體的定義并不為共用體分配具體的內(nèi)存空間,而僅僅說明了使用內(nèi)存的模式。定義一個共用體類型的一般形式為使用內(nèi)存的模式。定義一個共用體類型的一般形式為: : union union 1; 1; 1; ;437.3.2 共用體的定義 同結(jié)構(gòu)體一樣,在定義了共用體類型之后,還必須定義共同結(jié)構(gòu)體一樣,在定義

47、了共用體類型之后,還必須定義共用體變量,然后才能被引用。定義共用體變量的方法如同定義用體變量,然后才能被引用。定義共用體變量的方法如同定義結(jié)構(gòu)體一樣結(jié)構(gòu)體一樣, ,有有3 3種形式。種形式。在定義共用體時指出被引用的變量名。在定義共用體時指出被引用的變量名。將類型定義與變量定義分開,并先定義類型后定義變將類型定義與變量定義分開,并先定義類型后定義變量。量。是省略共用體名而直接定義共用體變量。是省略共用體名而直接定義共用體變量。1 12 23 3447.3.3 共用體變量的引用 共用體變量的引用同結(jié)構(gòu)體變量的引用一樣,只有在先定共用體變量的引用同結(jié)構(gòu)體變量的引用一樣,只有在先定義了共用體變量后才

48、能引用,而且只能引用共用體變量中的成義了共用體變量后才能引用,而且只能引用共用體變量中的成員。共用體變量成員引用的一般形式為:員。共用體變量成員引用的一般形式為: . ; 共用體變量與其它變量相比,有相同之共用體變量與其它變量相比,有相同之處處( (先定義先定義再引用再引用) ),但也有許多不同之處。,但也有許多不同之處。設(shè)有一個教師與學(xué)生通用的表格,教師數(shù)據(jù)設(shè)有一個教師與學(xué)生通用的表格,教師數(shù)據(jù)有姓名、年齡、職業(yè)、教研室。學(xué)生有姓名、年齡、職業(yè)、班有姓名、年齡、職業(yè)、教研室。學(xué)生有姓名、年齡、職業(yè)、班級級4項。編程輸入人員數(shù)據(jù),再以表格輸出。項。編程輸入人員數(shù)據(jù),再以表格輸出。 # incl

49、ude # include # include457.3.3 共用體變量的引用void main() struct char name10; int age; char job; union /定義共用體變量定義共用體變量 int class; char office(10); depa; body2; /定義結(jié)構(gòu)體數(shù)組定義結(jié)構(gòu)體數(shù)組 int n,i; for(i=0;i2;i+)467.3.3 共用體變量的引用 printf(“Please input Name,Age,Job and Department:”); scanf(“s d C”,,&bodyi.age,&b

50、odyi.job); if(bodyi.job=s) scanf(“d”,&bodyi.depa.class); else scanf(“s”,bodyi.depa.office); printf(“NametAget Jobt Class/Officen”); for(i=0;i2;i+) if(bodyi.job=s) printf(“st3dt3ctdn”,, bodyi.age,bodyi.job,bodyi.depa.class); else printf(“st3dt3ct sn”,, bodyi.age,bodyi.job,bodyi.de

51、pa.office); 477.3.3 共用體變量的引用Please input Name,Age,Job and Department:Chen 18 S 2 Please input Name,Age,Job and Department:Zhang 5l T prof Name age Job class/officeChen 18 S 2Zhang 5l T Prof487.4 枚舉類型與typedef語句 枚舉類型就是將變量的所有可能取值一一列舉出來,變量枚舉類型就是將變量的所有可能取值一一列舉出來,變量只能取其中之一的值,取其它值是錯誤的。定義枚舉類型的一只能取其中之一的值,取其它

52、值是錯誤的。定義枚舉類型的一般形式如下:般形式如下: enum enum 枚舉常量枚舉常量1 1,枚舉常量,枚舉常量2 2,枚舉常量,枚舉常量n n; enum是是C語言的關(guān)鍵字,是枚舉類型的引導(dǎo)語言的關(guān)鍵字,是枚舉類型的引導(dǎo)字字,用于說明枚舉類型以及定義枚舉變量。用于說明枚舉類型以及定義枚舉變量。是用戶是用戶自定義的類型名自定義的類型名; 花括號中的花括號中的也稱枚舉元素也稱枚舉元素,它們是它們是用戶自定義的標識符,多個枚舉元素之間用逗號分隔。每個枚用戶自定義的標識符,多個枚舉元素之間用逗號分隔。每個枚舉元素是一個用標識符表示的整型常量,所以通常將枚舉元素舉元素是一個用標識符表示的整型常量,

53、所以通常將枚舉元素稱為枚舉常量。稱為枚舉常量。 497.4.1 枚舉類型 上面的定義只描述了枚舉類型的結(jié)構(gòu)形式,枚舉類型數(shù)據(jù)上面的定義只描述了枚舉類型的結(jié)構(gòu)形式,枚舉類型數(shù)據(jù)的引用是通過變量實現(xiàn)的。因此,要使用枚舉類型數(shù)據(jù),必須的引用是通過變量實現(xiàn)的。因此,要使用枚舉類型數(shù)據(jù),必須定義枚舉變量。枚舉變量的定義有如下定義枚舉變量。枚舉變量的定義有如下3 3種形式:種形式: 先定義枚舉類型先定義枚舉類型, 再定義該類型的變量,定義的一般形再定義該類型的變量,定義的一般形式為:式為: enum enum 枚舉常量枚舉常量1 1,枚舉常量,枚舉常量2 2,;enum enum ; 將枚舉類型結(jié)構(gòu)和該類

54、型變量一起定義,定義的一般形將枚舉類型結(jié)構(gòu)和該類型變量一起定義,定義的一般形式為:式為: enum enum 枚舉常量枚舉常量 ;507.4.2 typedef語句 在在C語言中,除了可以使用內(nèi)置的基本類型和上述語言中,除了可以使用內(nèi)置的基本類型和上述3種數(shù)據(jù)種數(shù)據(jù)類型外,還可以使用類型定義語句類型外,還可以使用類型定義語句 typedef為一個已有的數(shù)據(jù)類為一個已有的數(shù)據(jù)類型另外命名型另外命名。 自定義語句的定義方法是通過關(guān)鍵字自定義語句的定義方法是通過關(guān)鍵字typedeftypedef來實現(xiàn)的,其來實現(xiàn)的,其語法結(jié)構(gòu)定義一般如下:語法結(jié)構(gòu)定義一般如下: typedef typedef ;

55、typedef是類型定義的關(guān)鍵字;是類型定義的關(guān)鍵字;是指已是指已存在的類型,存在的類型,是被定義的若干個新類型名,多個新類是被定義的若干個新類型名,多個新類型名之間用逗號分隔。型名之間用逗號分隔。 517.4.2 typedef語句 自定義語句可使用戶定義一種自定義語句可使用戶定義一種 “ “新新”的類型名來代替已有的類型名來代替已有的類型名,雖然這種新類型只是現(xiàn)有類型的同義詞的類型名,雖然這種新類型只是現(xiàn)有類型的同義詞( (或稱現(xiàn)有類或稱現(xiàn)有類型的別名型的別名) ),但卻為程序設(shè)計提供了極大方便。主要體現(xiàn)在:,但卻為程序設(shè)計提供了極大方便。主要體現(xiàn)在: 減少定義變量的過于繁瑣,達到書寫簡練

56、的目的。減少定義變量的過于繁瑣,達到書寫簡練的目的。 改善程序的可讀性,增加所定義變量的信息。改善程序的可讀性,增加所定義變量的信息。 使用使用typedeftypedef有利于程序的通用與移植。有利于程序的通用與移植。 1 12 23 3527.5 7.5 算法案例程序設(shè)計算法案例程序設(shè)計 在選美比賽的現(xiàn)場,有一批選手參加比賽,比賽的規(guī)則是在選美比賽的現(xiàn)場,有一批選手參加比賽,比賽的規(guī)則是最后得分越高,名次越低。當比賽結(jié)束時,要在現(xiàn)場按照選手最后得分越高,名次越低。當比賽結(jié)束時,要在現(xiàn)場按照選手的出場順序號宣布最后得分和最后名次,獲得相同分數(shù)的選手的出場順序號宣布最后得分和最后名次,獲得相同分數(shù)的選手具有相同的名次具有相同的名次,名次連續(xù)編號,不用考慮同名次的選手人數(shù)。

溫馨提示

  • 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論