![分校C課件第14講結(jié)構(gòu)體32(72)_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/11/5da9e264-52e6-4d33-b1ed-1d7505710d87/5da9e264-52e6-4d33-b1ed-1d7505710d871.gif)
![分校C課件第14講結(jié)構(gòu)體32(72)_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/11/5da9e264-52e6-4d33-b1ed-1d7505710d87/5da9e264-52e6-4d33-b1ed-1d7505710d872.gif)
![分校C課件第14講結(jié)構(gòu)體32(72)_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/11/5da9e264-52e6-4d33-b1ed-1d7505710d87/5da9e264-52e6-4d33-b1ed-1d7505710d873.gif)
![分校C課件第14講結(jié)構(gòu)體32(72)_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/11/5da9e264-52e6-4d33-b1ed-1d7505710d87/5da9e264-52e6-4d33-b1ed-1d7505710d874.gif)
![分校C課件第14講結(jié)構(gòu)體32(72)_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/11/5da9e264-52e6-4d33-b1ed-1d7505710d87/5da9e264-52e6-4d33-b1ed-1d7505710d875.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、1第十四講第十四講 結(jié)構(gòu)體結(jié)構(gòu)體相關(guān)數(shù)據(jù)的集合。相關(guān)數(shù)據(jù)的集合。數(shù)據(jù)的類型可以不相同。數(shù)據(jù)的類型可以不相同。用來定義保存在文件中的記錄。用來定義保存在文件中的記錄。與指針一起創(chuàng)建動態(tài)的數(shù)據(jù)結(jié)構(gòu):與指針一起創(chuàng)建動態(tài)的數(shù)據(jù)結(jié)構(gòu):鏈表鏈表隊列隊列棧棧樹樹2第十四講第十四講 結(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)體數(shù)組結(jié)構(gòu)體數(shù)組C C語言程序設(shè)計語言程序設(shè)計本講是教材第11章,但我們由于課時和全國C的大綱關(guān)系,第四至10節(jié)不講,有興趣者,自己學(xué)習(xí).本課件后面還有一些有趣的例子,如冼牌,選舉計票程序, 有興趣者
2、也可以自學(xué).結(jié)構(gòu)體是派生的數(shù)據(jù)類型結(jié)構(gòu)體是派生的數(shù)據(jù)類型使用其他類型的對象來構(gòu)造使用其他類型的對象來構(gòu)造結(jié)構(gòu)體。結(jié)構(gòu)體。3結(jié)構(gòu)體結(jié)構(gòu)體結(jié)構(gòu)體結(jié)構(gòu)體數(shù)組是由相同類型的數(shù)據(jù)構(gòu)成,而現(xiàn)實生活中由一些不相數(shù)組是由相同類型的數(shù)據(jù)構(gòu)成,而現(xiàn)實生活中由一些不相同類型的數(shù)據(jù)構(gòu)成的一組數(shù)據(jù)是相當(dāng)多的,例如學(xué)號、姓名和同類型的數(shù)據(jù)構(gòu)成的一組數(shù)據(jù)是相當(dāng)多的,例如學(xué)號、姓名和學(xué)生成績。學(xué)生成績。C C語言提供了這種數(shù)據(jù)結(jié)構(gòu)稱為語言提供了這種數(shù)據(jù)結(jié)構(gòu)稱為結(jié)構(gòu)體,它是一種結(jié)構(gòu)體,它是一種較為復(fù)雜而又非常靈活的構(gòu)造型的數(shù)據(jù)類型。較為復(fù)雜而又非常靈活的構(gòu)造型的數(shù)據(jù)類型。一個結(jié)構(gòu)體類型可以由若干個成員(或域)的成分組成,一個結(jié)
3、構(gòu)體類型可以由若干個成員(或域)的成分組成,不同的結(jié)構(gòu)體類型其成員不同。不同的結(jié)構(gòu)體類型其成員不同。對于一個具體的結(jié)構(gòu)體而言其成員的數(shù)量是固定的(同數(shù)對于一個具體的結(jié)構(gòu)體而言其成員的數(shù)量是固定的(同數(shù)組),各成員的數(shù)據(jù)類型可以不同,這是結(jié)構(gòu)體與數(shù)組的重要組),各成員的數(shù)據(jù)類型可以不同,這是結(jié)構(gòu)體與數(shù)組的重要相同和不同點。相同和不同點。4結(jié)構(gòu)體類型定義的一般形式為:結(jié)構(gòu)體類型定義的一般形式為:struct struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 類型名類型名1 1 成員名成員名1 1; 類型名類型名2 2 成員名成員名2 2; 類型名類型名n n 成員名成員名n n; ;結(jié)構(gòu)體結(jié)構(gòu)體其中,其中,stru
4、ctstruct是關(guān)鍵字,是結(jié)構(gòu)體類型的標志。結(jié)構(gòu)體名是是關(guān)鍵字,是結(jié)構(gòu)體類型的標志。結(jié)構(gòu)體名是由用戶定義的標識符,它規(guī)定了所定義的結(jié)構(gòu)體類型的名稱。由用戶定義的標識符,它規(guī)定了所定義的結(jié)構(gòu)體類型的名稱。結(jié)構(gòu)體類型的組成成分稱為成員,成員名的命名規(guī)則與變量名結(jié)構(gòu)體類型的組成成分稱為成員,成員名的命名規(guī)則與變量名相同。相同。如果成員的類型相同,則可以同變量一樣在一個類型名后寫如果成員的類型相同,則可以同變量一樣在一個類型名后寫出幾個成員名,他們之間用逗號分隔。出幾個成員名,他們之間用逗號分隔。 struct struct student long int xuhao long int xuhao
5、; char name8char name8; int eng ,coup,sum;int eng ,coup,sum; float ave; float ave; ;5struct dateint year; int month; int day;也可以寫成:也可以寫成:struct dateint year,month,day;struct student int num; char name8,sex; float score4; ;struct:引入結(jié)構(gòu)體定義。:引入結(jié)構(gòu)體定義。date:結(jié)構(gòu)體的名稱,必須與:結(jié)構(gòu)體的名稱,必須與 struct 一起使用。一起使用。struct dat
6、e 結(jié)構(gòu)體包含結(jié)構(gòu)體包含3個個 int * 類型的類型的成員成員:yearMonthday例如例如A:這里struct student結(jié)構(gòu)體包含有:Int 型num(學(xué)號)char name8(姓名),sex(性別)Float score4(成績數(shù)組)例如例如B:6結(jié)構(gòu)體類型的定義結(jié)構(gòu)體類型的定義結(jié)構(gòu)體定義說明結(jié)構(gòu)體定義說明同一個結(jié)構(gòu)體內(nèi)不可以有同名的成員。同一個結(jié)構(gòu)體內(nèi)不可以有同名的成員。不同結(jié)構(gòu)體的成員名可以相同,不互相沖突。不同結(jié)構(gòu)體的成員名可以相同,不互相沖突。結(jié)構(gòu)體結(jié)構(gòu)體struct date int year,month,day; ;struct Book char title50
7、,writer20,publisher50; int year,month;int year,month,day;7結(jié)構(gòu)體類型的定義結(jié)構(gòu)體類型的定義結(jié)構(gòu)體定義說明結(jié)構(gòu)體定義說明結(jié)構(gòu)體的成員可以是基本類型和構(gòu)造類型(數(shù)組和其他結(jié)構(gòu)體)。結(jié)構(gòu)體的成員可以是基本類型和構(gòu)造類型(數(shù)組和其他結(jié)構(gòu)體)。結(jié)構(gòu)體結(jié)構(gòu)體struct dateint year,month,day; birthday;struct StuRec int num;char name20;/這里包含了數(shù)組這里包含了數(shù)組 struct date birthday;/這里包含了上面的結(jié)構(gòu)體這里包含了上面的結(jié)構(gòu)體,稱稱結(jié)構(gòu)體的嵌套結(jié)構(gòu)體的嵌
8、套;結(jié)構(gòu)體的成員不可以包含自身結(jié)構(gòu)體的成員不可以包含自身但可以包含自身的指針但可以包含自身的指針struct student char name20; char gender; float scores4; struct student next; /*error*/ struct student *nextPtr; /*correct*/; 8結(jié)構(gòu)體變量結(jié)構(gòu)體變量結(jié)構(gòu)體定義說明結(jié)構(gòu)體定義說明只是創(chuàng)建了新的數(shù)據(jù)類型,并不能保留內(nèi)存空間。只是創(chuàng)建了新的數(shù)據(jù)類型,并不能保留內(nèi)存空間。必須定義結(jié)構(gòu)體變量來獲得內(nèi)存空間。必須定義結(jié)構(gòu)體變量來獲得內(nèi)存空間。定義定義(聲明聲明)結(jié)構(gòu)體變量結(jié)構(gòu)體變量 有三種
9、方法有三種方法:1.定義結(jié)構(gòu)體類型后,像聲明普通變量一樣聲明結(jié)構(gòu)體變量。定義結(jié)構(gòu)體類型后,像聲明普通變量一樣聲明結(jié)構(gòu)體變量。結(jié)構(gòu)體結(jié)構(gòu)體struct date int year,month,day;struct date birth;yearmonthdayFF00FF04FF08birthbirth 的存儲形式的存儲形式TC中與中與VC中的不同中的不同9結(jié)構(gòu)體變量結(jié)構(gòu)體變量定義聲明結(jié)構(gòu)體變量定義聲明結(jié)構(gòu)體變量2.在定義結(jié)構(gòu)體類型的同時,聲明結(jié)構(gòu)體變量在定義結(jié)構(gòu)體類型的同時,聲明結(jié)構(gòu)體變量結(jié)構(gòu)體結(jié)構(gòu)體struct date int year,month,day; birth, days4, *
10、bPtr;struct int year,month,day; birth, days4, *bPtr;沒有結(jié)構(gòu)體名,沒有結(jié)構(gòu)體名,無法再次使用。無法再次使用。3.直接(只)聲明結(jié)構(gòu)體變量直接(只)聲明結(jié)構(gòu)體變量省略類型名。省略類型名。類型與變量是不同的概念,注意區(qū)分。系統(tǒng)能對變量賦值、存取、運算,類型與變量是不同的概念,注意區(qū)分。系統(tǒng)能對變量賦值、存取、運算,而類型則不能,編譯時,系統(tǒng)只對變量分配存儲空間,而類型則不分配。而類型則不能,編譯時,系統(tǒng)只對變量分配存儲空間,而類型則不分配。結(jié)構(gòu)體中的成員也可以是一個結(jié)構(gòu)體變量,即結(jié)構(gòu)體的嵌套。結(jié)構(gòu)體中的成員也可以是一個結(jié)構(gòu)體變量,即結(jié)構(gòu)體的嵌套。
11、10struct student /* student是結(jié)構(gòu)體名,結(jié)構(gòu)體成員有是結(jié)構(gòu)體名,結(jié)構(gòu)體成員有num,name,sex,date,scre4 */ int num; char name8,sex; struct date /*date是結(jié)構(gòu)體名,其結(jié)構(gòu)體變量表是是結(jié)構(gòu)體名,其結(jié)構(gòu)體變量表是birthday,成員包括年月日,成員包括年月日*/ int year,month,day; birthday; float score4; /*score4是數(shù)組,數(shù)組成員類型浮點型是數(shù)組,數(shù)組成員類型浮點型 */ xuesh;結(jié)構(gòu)體中的成員名可以和程序中的變量同名;不同結(jié)構(gòu)體結(jié)構(gòu)體中的成員名可以和
12、程序中的變量同名;不同結(jié)構(gòu)體中的成員名也可以同名。中的成員名也可以同名。11結(jié)構(gòu)體的操作結(jié)構(gòu)體的操作結(jié)構(gòu)體變量可以執(zhí)行的操作結(jié)構(gòu)體變量可以執(zhí)行的操作將結(jié)構(gòu)體變量賦給相同類型的結(jié)構(gòu)體變量。將結(jié)構(gòu)體變量賦給相同類型的結(jié)構(gòu)體變量。得到結(jié)構(gòu)體變量的地址。得到結(jié)構(gòu)體變量的地址。訪問結(jié)構(gòu)體變量的成員。訪問結(jié)構(gòu)體變量的成員。使用使用 sizeof 確確(測測)定結(jié)構(gòu)體變量的大小。定結(jié)構(gòu)體變量的大小。結(jié)構(gòu)體結(jié)構(gòu)體12結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體變量的初始化給全部成員賦初值給全部成員賦初值結(jié)構(gòu)體結(jié)構(gòu)體struct student int num; char name8,sex; struct date int ye
13、ar,month ,day ; birthday; float sco 4;xuesh=101,“王小寧”,F,1975,5,21,83.6,88,75.5,90;將結(jié)構(gòu)體變量各成員的初值順序地放在一對大括號中,并用逗號分隔。對將結(jié)構(gòu)體變量各成員的初值順序地放在一對大括號中,并用逗號分隔。對結(jié)構(gòu)體類型變量賦初值時,按每個成員在結(jié)構(gòu)體中的順序一一對應(yīng)賦值。結(jié)構(gòu)體類型變量賦初值時,按每個成員在結(jié)構(gòu)體中的順序一一對應(yīng)賦值。同變量一樣結(jié)構(gòu)體變量在定義時也可以進行初始化。同變量一樣結(jié)構(gòu)體變量在定義時也可以進行初始化。13結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體變量的初始化初始化結(jié)構(gòu)體變量初始化結(jié)構(gòu)體變量給部分成員賦初值
14、。給部分成員賦初值。結(jié)構(gòu)體結(jié)構(gòu)體struct StuRec int num; char name20; struct date int year,month,day; birthday; float score; student=101, “王小寧”;num(2B)name(20B)birthday(6B)score(4B)yearmonthday101王小寧0000.014結(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)體的指針用于指向結(jié)構(gòu)體的指
15、針等價于等價于 (*cardPtr).face結(jié)構(gòu)體結(jié)構(gòu)體struct card myCard;printf(“%s”, myCard.face);struct card *cardPtr;printf(“%s”, cardPtr-face);struct card char *face; char *suit; myCard.face;15案例分析:結(jié)構(gòu)體變量的成員案例分析:結(jié)構(gòu)體變量的成員問題:訪問結(jié)構(gòu)體變量的成員。問題:訪問結(jié)構(gòu)體變量的成員。(cw1301.c)結(jié)構(gòu)體結(jié)構(gòu)體#include struct card char *face; char *suit;a;Int main() s
16、truct card a, *aPtr; a.face = Ace; a.suit = Spades; aPtr = &a;printf(%s%s%sn%s%s%sn%s%s%sn, a.face, of , a.suit, aPtr-face, of , aPtr-suit, (*aPtr).face, of , (*aPtr).suit);與數(shù)組的不同:與數(shù)組的不同:結(jié)構(gòu)變量名不是指針結(jié)構(gòu)變量名不是指針Ace of SpadesAce of SpadesAce of Spades注意:注意:結(jié)構(gòu)不能作為整體輸入輸出。結(jié)構(gòu)不能作為整體輸入輸出。必須逐個成員輸入輸出。必須逐個成員輸入輸
17、出。16案例分析:結(jié)構(gòu)體作為函數(shù)的參數(shù)案例分析:結(jié)構(gòu)體作為函數(shù)的參數(shù)問題:編寫函數(shù)實現(xiàn)結(jié)構(gòu)體的復(fù)制。問題:編寫函數(shù)實現(xiàn)結(jié)構(gòu)體的復(fù)制。結(jié)構(gòu)體結(jié)構(gòu)體#include#include structstruct date date int year, month, day; ; int year, month, day; ;voidvoid show(char show(char * *, struct date);, struct date);voidvoid copy(struct date, struct date); copy(struct date, struct date);voidvoi
18、d clone(struct date, struct date clone(struct date, struct date * *););intint main() main() structstruct date d1, d2, d3, d4; date d1, d2, d3, d4; d1.year = 2004; d1.year = 2004; d1.month = 5; d1.month = 5; d1.day = 1; d1.day = 1; show(“d1”, d1); show(“d1”, d1); /結(jié)構(gòu)體變量作實參,值傳遞結(jié)構(gòu)體變量作實參,值傳遞 d2 = d1;d2
19、= d1; show(d2, d2); show(d2, d2); 實現(xiàn)實現(xiàn)(cw1302.c)17案例分析:結(jié)構(gòu)體作為函數(shù)的參數(shù)案例分析:結(jié)構(gòu)體作為函數(shù)的參數(shù)結(jié)構(gòu)體結(jié)構(gòu)體 copy(d1, d3); copy(d1, d3); show(d3, d3); show(d3, d3); clone(d1, &d4); clone(d1, &d4); show(d4, d4); show(d4, d4); voidvoid show(char show(char * *name, struct date d)name, struct date d) printf(%s: %d-%d
20、-%dn, name, d.year, d.month, d.day); printf(%s: %d-%d-%dn, name, d.year, d.month, d.day); voidvoid copy(struct date s, copy(struct date s, struct date dstruct date d) ) d = s; d = s; voidvoid clone(struct date s, clone(struct date s, struct date struct date * *dPtrdPtr) ) * *dPtr = s; dPtr = s; d1:
21、2004-5-1d2: 2004-5-1d3: 0-0-24 (TC)在在VC中運行的結(jié)果不一樣中運行的結(jié)果不一樣-858993460-858993460-858993460d4: 2004-5-1用指針作形參用地址作實參傳遞/結(jié)構(gòu)體變量作實參,值傳遞,d3未賦值作實參值不確定空返回,無值返回(cw1302.c)續(xù))續(xù)18結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組一、結(jié)構(gòu)體數(shù)組的定義一、結(jié)構(gòu)體數(shù)組的定義定義結(jié)構(gòu)體數(shù)組的方法和定義結(jié)構(gòu)體變量的方法一樣,只定義結(jié)構(gòu)體數(shù)組的方法和定義結(jié)構(gòu)體變量的方法一樣,只是必須說明其為數(shù)組。是必須說明其為數(shù)組。定義結(jié)構(gòu)體變量的三種方法都可以用來定義結(jié)構(gòu)體數(shù)組。定義結(jié)構(gòu)體變量的三種方法都
22、可以用來定義結(jié)構(gòu)體數(shù)組。二、結(jié)構(gòu)體數(shù)組的初始化二、結(jié)構(gòu)體數(shù)組的初始化和一般數(shù)組一樣,結(jié)構(gòu)體數(shù)組也可以進行初始化。和一般數(shù)組一樣,結(jié)構(gòu)體數(shù)組也可以進行初始化。數(shù)組每個元素的初值都放在一對大括號中,括號中依次排數(shù)組每個元素的初值都放在一對大括號中,括號中依次排列元素各成員的初始值列元素各成員的初始值三、結(jié)構(gòu)體數(shù)組的引用三、結(jié)構(gòu)體數(shù)組的引用對結(jié)構(gòu)體數(shù)組的引用一般是對數(shù)組元素的成員進行引用。對結(jié)構(gòu)體數(shù)組的引用一般是對數(shù)組元素的成員進行引用。引用只要遵循對數(shù)組元素的引用規(guī)則和對結(jié)構(gòu)體變量成員的引用只要遵循對數(shù)組元素的引用規(guī)則和對結(jié)構(gòu)體變量成員的引用規(guī)則即可。引用規(guī)則即可。19結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)
23、組結(jié)構(gòu)體數(shù)組數(shù)組的元素是結(jié)構(gòu)體變量。數(shù)組的元素是結(jié)構(gòu)體變量。常用結(jié)構(gòu)體來表示記錄,那么結(jié)構(gòu)體數(shù)組就可以表示一組記常用結(jié)構(gòu)體來表示記錄,那么結(jié)構(gòu)體數(shù)組就可以表示一組記錄。錄。案例分析案例分析全班全班 N 個學(xué)生,每個學(xué)生有學(xué)號、姓名、四門課的成績。個學(xué)生,每個學(xué)生有學(xué)號、姓名、四門課的成績。結(jié)構(gòu)體結(jié)構(gòu)體學(xué)號學(xué)號姓名姓名成績成績1成績成績2成績成績3成績成績4101WangHai80787681102ZhaoFei68667175130LiRui8276818420結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組案例分析案例分析那么,可以定義結(jié)構(gòu)體數(shù)組來保存那么,可以定義結(jié)構(gòu)體數(shù)組來保存 N 個學(xué)生的數(shù)據(jù)
24、。個學(xué)生的數(shù)據(jù)。這樣,每個學(xué)生的數(shù)據(jù)就對應(yīng)一個結(jié)構(gòu)體變量(一條記錄),便于這樣,每個學(xué)生的數(shù)據(jù)就對應(yīng)一個結(jié)構(gòu)體變量(一條記錄),便于編程處理。編程處理。結(jié)構(gòu)體結(jié)構(gòu)體struct student int num; char name20; float scores4;struct student students30;21程序舉例程序舉例設(shè)某班有設(shè)某班有N名學(xué)生,每個學(xué)生數(shù)據(jù)包括學(xué)號,姓名,性別,年齡,平均成績。名學(xué)生,每個學(xué)生數(shù)據(jù)包括學(xué)號,姓名,性別,年齡,平均成績。要求輸入任意一個學(xué)號,輸出該學(xué)生的所有數(shù)據(jù)。要求輸入任意一個學(xué)號,輸出該學(xué)生的所有數(shù)據(jù)。分析:從一組數(shù)據(jù)中查找所需要的具有某特征
25、的內(nèi)容,最簡單的是順序查找。分析:從一組數(shù)據(jù)中查找所需要的具有某特征的內(nèi)容,最簡單的是順序查找。直到找到或找完為止。直到找到或找完為止。/*Cw1303.c 教材教材P171L11-1*/#include #define N 2struct student /定義結(jié)構(gòu)體定義結(jié)構(gòu)體 long int num;/學(xué)號學(xué)號 char name7;/姓名姓名 char sex3;/性別性別 int age,score;/成績成績stuN;/定義結(jié)構(gòu)體數(shù)組定義結(jié)構(gòu)體數(shù)組main() int i,t=-1;/t=-1為未查找到時的標志為未查找到時的標志 long int xuehao;/查找學(xué)號變量查找學(xué)
26、號變量 struct student stuN; /定義結(jié)構(gòu)體類型數(shù)組定義結(jié)構(gòu)體類型數(shù)組(cw1303.c)案例分析:結(jié)構(gòu)體數(shù)組案例分析:結(jié)構(gòu)體數(shù)組22printf(請按下列順序輸入請按下列順序輸入%d個學(xué)生的信息個學(xué)生的信息:n,N); /為結(jié)構(gòu)體變量賦值為結(jié)構(gòu)體變量賦值printf(t學(xué)號學(xué)號 姓名姓名 性別性別 年齡年齡 平均平均n);for (i=0;iN;i+) printf(NO%d:t,i+1);scanf(%ld%s%s%d%d,&stui.num,&,&stui.sex,&stui.age,&stui.score);p
27、rintf(請輸入需查找學(xué)生的學(xué)號:請輸入需查找學(xué)生的學(xué)號:);scanf(%ld,&xuehao);for(i=0;iN;i+) if(xuehao=stui.num) t=i;break; if (t!=-1) /*以下輸出檢索結(jié)果以下輸出檢索結(jié)果*/printf(%ld%8s%4s%4d%4dn,stut.num,,stut.sex,stut.age,stut.score);else printf(查無此人查無此人!n);(cw1303.c)續(xù))續(xù)23案例分析:結(jié)構(gòu)體數(shù)組案例分析:結(jié)構(gòu)體數(shù)組檢索檢索問題:問題:某班有某班有 n 個學(xué)生,每個學(xué)生的數(shù)據(jù)包括學(xué)號、姓
28、名、年齡和性別。個學(xué)生,每個學(xué)生的數(shù)據(jù)包括學(xué)號、姓名、年齡和性別。要求給定任意一個學(xué)號,程序能輸出檢索的結(jié)果,并顯示對應(yīng)的學(xué)要求給定任意一個學(xué)號,程序能輸出檢索的結(jié)果,并顯示對應(yīng)的學(xué)生的數(shù)據(jù)。生的數(shù)據(jù)。分析分析定義結(jié)構(gòu)體表示學(xué)生定義結(jié)構(gòu)體表示學(xué)生用結(jié)構(gòu)體數(shù)組保存學(xué)生數(shù)據(jù)用結(jié)構(gòu)體數(shù)組保存學(xué)生數(shù)據(jù)采用順序查找法采用順序查找法結(jié)構(gòu)體結(jié)構(gòu)體輸入學(xué)生信息輸入學(xué)生信息輸入查詢條件輸入查詢條件查找學(xué)生信息,報告結(jié)果查找學(xué)生信息,報告結(jié)果24案例分析:結(jié)構(gòu)體數(shù)組案例分析:結(jié)構(gòu)體數(shù)組檢索檢索實現(xiàn)實現(xiàn)(cw1304.c)結(jié)構(gòu)體結(jié)構(gòu)體#include #define MAX 20int main() struct
29、StuRec int num; char name20; char gender; int age; studentMAX; int i, N, num;25案例分析:結(jié)構(gòu)體數(shù)組案例分析:結(jié)構(gòu)體數(shù)組檢索檢索實現(xiàn)實現(xiàn)結(jié)構(gòu)體結(jié)構(gòu)體printf(tInput a integer as the number of students:);scanf(%d, &N);printf(tInput %d students information:n,N);printf(ntNo.tNametGendertAgen);for (i=0;iN;i+) printf(student %d:nt, i+1);
30、 scanf(%d %s %c %d, &studenti.num, , &studenti.gender, &studenti.age);(cw1304.c)續(xù))續(xù)26案例分析:結(jié)構(gòu)體數(shù)組案例分析:結(jié)構(gòu)體數(shù)組檢索檢索實現(xiàn)實現(xiàn)結(jié)構(gòu)體結(jié)構(gòu)體 printf(ntInput a number:); scanf(%d, &num); printf(ntPlease wait. Searching.n); for (i=0;iN;i+) if (num=studenti.num) break; if (iN) printf(ntNo.:%dntN
31、ame:%sntGender:%cntAge:%dn, studenti.num, , studenti.gender, studenti.age); else printf(ntNot found!n);輸入查找條件輸入查找條件查找查找(cw1304.c)續(xù))續(xù)27案例分析:結(jié)構(gòu)體數(shù)組案例分析:結(jié)構(gòu)體數(shù)組檢索檢索問題:問題:可以多次查找??梢远啻尾檎摇=Y(jié)構(gòu)體結(jié)構(gòu)體輸入學(xué)生信息輸入學(xué)生信息輸入查詢條件輸入查詢條件查找學(xué)生信息,報告結(jié)果查找學(xué)生信息,報告結(jié)果是否繼續(xù)查詢是否繼續(xù)查詢YN人機交互人機交互28案例分析:結(jié)構(gòu)體數(shù)組案例分析:結(jié)構(gòu)體數(shù)組檢索檢索實現(xiàn)實現(xiàn)(cw13
32、04m.c)部分代碼部分代碼結(jié)構(gòu)體結(jié)構(gòu)體 do scanf(%d, &num); for (i=0;iN;i+) if (num=studenti.num)break; if (iN) /* Found! */ else printf(ntNot found!n); printf(ntContinue?(y/n); c=getchar(); while (c=y|c=Y);1001y(cw1304.c)續(xù))續(xù)29小結(jié):知識要點小結(jié):知識要點 結(jié)構(gòu)體是由若干個不同類型數(shù)據(jù)項構(gòu)成的集合。結(jié)構(gòu)體是由若干個不同類型數(shù)據(jù)項構(gòu)成的集合。結(jié)構(gòu)體類型的定義:結(jié)構(gòu)體類型的定義:1. 結(jié)構(gòu)體類型定義的一般
33、形式結(jié)構(gòu)體類型定義的一般形式2. 結(jié)構(gòu)體類型定義中的注意事項結(jié)構(gòu)體類型定義中的注意事項結(jié)構(gòu)體類型變量:結(jié)構(gòu)體類型變量:結(jié)構(gòu)體數(shù)組:結(jié)構(gòu)體數(shù)組:1. 結(jié)構(gòu)體數(shù)組定義的三種方法結(jié)構(gòu)體數(shù)組定義的三種方法2. 結(jié)構(gòu)體數(shù)組的初始化結(jié)構(gòu)體數(shù)組的初始化3. 對結(jié)構(gòu)體數(shù)組元素的成員進行引用對結(jié)構(gòu)體數(shù)組元素的成員進行引用 1. 結(jié)構(gòu)體類型變量定義的三種方法結(jié)構(gòu)體類型變量定義的三種方法2. 結(jié)構(gòu)體類型變量的初始化結(jié)構(gòu)體類型變量的初始化3. 對結(jié)構(gòu)體變量中成員的引用對結(jié)構(gòu)體變量中成員的引用4. 對整個結(jié)構(gòu)體變量的引用對整個結(jié)構(gòu)體變量的引用 30#include /預(yù)處理調(diào)用輸入輸出頭文件預(yù)處理調(diào)用輸入輸出頭文件#i
34、nclude /#define N 10/定義符號常量定義符號常量struct stu/定義結(jié)構(gòu)體定義結(jié)構(gòu)體long int sno;/學(xué)號長整型學(xué)號長整型int score4;/成績浮點數(shù)一維數(shù)組三元素成績浮點數(shù)一維數(shù)組三元素studN;/定義結(jié)構(gòu)體數(shù)組定義結(jié)構(gòu)體數(shù)組void sort(struct stu arr)/定義結(jié)構(gòu)體數(shù)組成績排序定義結(jié)構(gòu)體數(shù)組成績排序int i,j; /定義循環(huán)變量定義循環(huán)變量struct stu temp; /定義結(jié)構(gòu)體臨時變量定義結(jié)構(gòu)體臨時變量for(i=0;iN;i+) /外循環(huán)外循環(huán)for(j=i+1;jN;j+) /內(nèi)循環(huán)內(nèi)循環(huán) if(arri.scor
35、e3arrj.score3) /比較前后兩行比較前后兩行 temp=arri;arri=arrj;arrj=temp;/排序交換排序交換輸入一個班輸入一個班10個學(xué)生的學(xué)號和每個學(xué)生考試三門功課(數(shù)學(xué)、英語、計算機基礎(chǔ))個學(xué)生的學(xué)號和每個學(xué)生考試三門功課(數(shù)學(xué)、英語、計算機基礎(chǔ))的成績。編程計算出每個學(xué)生的總分和平均分,并按學(xué)生成績優(yōu)劣排序,最后打的成績。編程計算出每個學(xué)生的總分和平均分,并按學(xué)生成績優(yōu)劣排序,最后打印一張按高分到低分名次排序的成績單。要求:印一張按高分到低分名次排序的成績單。要求:1)排序用一個函數(shù)實現(xiàn)。排序用一個函數(shù)實現(xiàn)。2)打印的成績單表項包括:序號,學(xué)號、數(shù)學(xué)、英語、計
36、算機、總分、平均分。打印的成績單表項包括:序號,學(xué)號、數(shù)學(xué)、英語、計算機、總分、平均分。 31int main()/主函數(shù)主函數(shù)int i;printf(請輸入學(xué)號和數(shù)學(xué)、英語、計算機的成績請輸入學(xué)號和數(shù)學(xué)、英語、計算機的成績n); for(i=0;iN;i+)/輸入數(shù)據(jù)輸入數(shù)據(jù)printf(“NO:%d”,i+1);scanf(%ld%d%d%d, &studi.sno,&studi.score0,&studi.score1,&studi.score2); studi.score3=studi.score0+studi.score1+studi.score2;
37、 sort(stud);/調(diào)用排序函數(shù)調(diào)用排序函數(shù)printf(“名次名次t學(xué)號學(xué)號t數(shù)學(xué)數(shù)學(xué)t英語英語t計算機計算機t總分總分t平均分平均分n); /輸出題頭輸出題頭for(i=0;iN;i+)/順序輸出整行順序輸出整行printf(%dt%ld%t%dt%dt%dt%dt%.1fn,i+1,studi.sno,studi.score0,studi.score1,studi.score2,studi.score3,(float)studi.score3/3); 這是用結(jié)構(gòu)體做實驗報告這是用結(jié)構(gòu)體做實驗報告,思路方法同數(shù)組是一致的思路方法同數(shù)組是一致的.32本章到此結(jié)束,謝謝您的光臨!本章到此
38、結(jié)束,謝謝您的光臨!THANK YOU VERY THANK YOU VERY MUCH MUCH !33案例分析:結(jié)構(gòu)體數(shù)組案例分析:結(jié)構(gòu)體數(shù)組高性能的洗牌和發(fā)牌程序高性能的洗牌和發(fā)牌程序數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)用一個紙牌結(jié)構(gòu)體數(shù)組保存一副牌。用一個紙牌結(jié)構(gòu)體數(shù)組保存一副牌。紙牌的花色和號碼名依然保存在字符串?dāng)?shù)組中。紙牌的花色和號碼名依然保存在字符串?dāng)?shù)組中。這樣,數(shù)組中的紙牌儼然已有一個順序了,則可以改進算這樣,數(shù)組中的紙牌儼然已有一個順序了,則可以改進算法。法。洗牌:隨機打亂紙牌在數(shù)組中的位置。洗牌:隨機打亂紙牌在數(shù)組中的位置。 不存在無限延期。不存在無限延期。發(fā)牌:按紙牌在數(shù)組中的順序顯示輸出。
39、發(fā)牌:按紙牌在數(shù)組中的順序顯示輸出。 數(shù)組遍歷一次。數(shù)組遍歷一次。結(jié)構(gòu)體結(jié)構(gòu)體34案例分析:結(jié)構(gòu)體數(shù)組案例分析:結(jié)構(gòu)體數(shù)組高性能的洗牌和發(fā)牌程序高性能的洗牌和發(fā)牌程序?qū)崿F(xiàn)實現(xiàn)(cw1304a.c)結(jié)構(gòu)體結(jié)構(gòu)體#include #include #include struct card char *face; char *suit;typedef struct card Card;void fillDeck(Card*, char*, char*);void shuffle(Card*);void deal(Card*);35案例分析:結(jié)構(gòu)體數(shù)組案例分析:結(jié)構(gòu)體數(shù)組高性能的洗牌和發(fā)牌程序高性能的
40、洗牌和發(fā)牌程序?qū)崿F(xiàn)實現(xiàn)結(jié)構(gòu)體結(jié)構(gòu)體int main() Card deck52; char *face = Ace,Deuce,Three, Four,Five, Six,Seven,Eight, Nine,Ten, Jack,Queen,King; char *suit = Hearts,Diamonds,Clubs,Spades; srand(time(NULL); fillDeck(deck, face, suit); shuffle(deck); deal(deck);36案例分析:結(jié)構(gòu)體數(shù)組案例分析:結(jié)構(gòu)體數(shù)組高性能的洗牌和發(fā)牌程序高性能的洗牌和發(fā)牌程序?qū)崿F(xiàn)實現(xiàn)結(jié)構(gòu)體結(jié)構(gòu)體void
41、fillDeck(Card *wDeck, char *wFace, char *wSuit) int i; for (i=0; i=51; i+) wDecki.face = wFacei%13; wDecki.suit = wSuiti/13; 37案例分析:結(jié)構(gòu)體數(shù)組案例分析:結(jié)構(gòu)體數(shù)組高性能的洗牌和發(fā)牌程序高性能的洗牌和發(fā)牌程序?qū)崿F(xiàn)實現(xiàn)結(jié)構(gòu)體結(jié)構(gòu)體void shuffle(Card *wDeck) int i, j; Card temp; for (i=0; i=51; i+) j = rand()%52; temp = wDecki; wDecki = wDeckj; wDeckj
42、= temp; 38案例分析:結(jié)構(gòu)體數(shù)組案例分析:結(jié)構(gòu)體數(shù)組高性能的洗牌和發(fā)牌程序高性能的洗牌和發(fā)牌程序?qū)崿F(xiàn)實現(xiàn)結(jié)構(gòu)體結(jié)構(gòu)體void deal(Card *wDeck)int i; for (i=0; i=51; i+) printf(%5s of %-8s%c, wDecki.face, wDecki.suit, (i+1)%2 ? t : n); 39案例分析:結(jié)構(gòu)體數(shù)組案例分析:結(jié)構(gòu)體數(shù)組點票程序點票程序問題問題有三個候選人,有三個候選人,N個選舉人,每次輸入一個得票的候選人的名字,個選舉人,每次輸入一個得票的候選人的名字,要求最后輸出各人的得票結(jié)果。要求最后輸出各人的得票結(jié)果。定義數(shù)據(jù)
43、結(jié)構(gòu)定義數(shù)據(jù)結(jié)構(gòu)結(jié)構(gòu)體結(jié)構(gòu)體struct candidate char name20; /*姓名姓名*/ int count; /*得票數(shù)得票數(shù)*/ cand3;40案例分析:結(jié)構(gòu)體數(shù)組案例分析:結(jié)構(gòu)體數(shù)組點票程序點票程序算法算法結(jié)構(gòu)體結(jié)構(gòu)體輸入候選人信息輸入候選人信息輸入選票輸入選票查找得票人信息查找得票人信息找到否?找到否?得票人的票數(shù)增一得票人的票數(shù)增一輸出點票結(jié)果輸出點票結(jié)果點完否?點完否?YNNY41案例分析:結(jié)構(gòu)體數(shù)組案例分析:結(jié)構(gòu)體數(shù)組點票程序點票程序?qū)崿F(xiàn)實現(xiàn)(cw1305.c)結(jié)構(gòu)體結(jié)構(gòu)體 do printf(Vote:t); gets(name); for (i=0;iM;i
44、+) if (strcmp(name, )=0) candi.count+; vote+; break; printf(tContinue?(y/n); c=getchar(); i=getchar(); while (c=y|c=Y);42案例分析:結(jié)構(gòu)體數(shù)組案例分析:結(jié)構(gòu)體數(shù)組改進點票程序改進點票程序問題:問題:假設(shè)選舉人都是候選人假設(shè)選舉人都是候選人分析點票過程中數(shù)組的變化分析點票過程中數(shù)組的變化結(jié)構(gòu)體結(jié)構(gòu)體litaolitao wanghai litao zhaofei litaowanghailitaowanghaizhaofei43案例分析:結(jié)構(gòu)體數(shù)組案例分析:
45、結(jié)構(gòu)體數(shù)組改進點票程序改進點票程序數(shù)據(jù)結(jié)構(gòu)和算法數(shù)據(jù)結(jié)構(gòu)和算法結(jié)構(gòu)體結(jié)構(gòu)體struct candidate char name20; int count; candM;輸入選票輸入選票查找得票人信息查找得票人信息找到否?找到否?得票人的票數(shù)增一得票人的票數(shù)增一輸出點票結(jié)果輸出點票結(jié)果點完否?點完否?YNNY加入新的候選人;加入新的候選人;其得票數(shù)為其得票數(shù)為1。44案例分析:結(jié)構(gòu)體數(shù)組案例分析:結(jié)構(gòu)體數(shù)組改進點票程序改進點票程序?qū)崿F(xiàn)實現(xiàn)(cw1306.c)結(jié)構(gòu)體結(jié)構(gòu)體。 printf(Vote:t); gets(name); found=0; for (i=0;ilen;i+) if (str
46、cmp(name, )=0) candi.count+; found=1; break; if (!found) strcpy(,name); candi.count=1; len+; 。出現(xiàn)新的候選人出現(xiàn)新的候選人45案例分析:結(jié)構(gòu)體數(shù)組案例分析:結(jié)構(gòu)體數(shù)組增強點票程序增強點票程序問題問題要求按候選人得票數(shù)要求按候選人得票數(shù)從高到低順序輸出結(jié)果。從高到低順序輸出結(jié)果。修改算法修改算法結(jié)構(gòu)體結(jié)構(gòu)體輸入選票輸入選票查找得票人信息查找得票人信息找到否?找到否?得票人的票數(shù)增一得票人的票數(shù)增一輸出點票結(jié)果輸出點票結(jié)果點完否?點完否?YNNY加入新的候選人;加入
47、新的候選人;其得票數(shù)賦值其得票數(shù)賦值“1”。按得票數(shù)進行排序按得票數(shù)進行排序46案例分析:結(jié)構(gòu)體數(shù)組案例分析:結(jié)構(gòu)體數(shù)組增強點票程序增強點票程序?qū)崿F(xiàn)實現(xiàn)(cw1307.c)排序部分排序部分結(jié)構(gòu)體結(jié)構(gòu)體 for (i=0;ilen-1;i+) for (j=0;jlen-1-i;j+) if (candj.countcandj+1.count) tmp=candj;candj=candj+1;candj+1=tmp; 47案例分析:結(jié)構(gòu)體數(shù)組案例分析:結(jié)構(gòu)體數(shù)組優(yōu)化點票程序優(yōu)化點票程序問題問題如果候選人的信息較多,為了提高排序過程中數(shù)據(jù)交換的性能,增如果候選人的信息較多,為了提高排序過程中數(shù)據(jù)交
48、換的性能,增設(shè)一數(shù)組設(shè)一數(shù)組order,用來保存排序結(jié)果。,用來保存排序結(jié)果。分析分析結(jié)構(gòu)體結(jié)構(gòu)體01234530514220Wanghai M 43 P 12Zhaofei F 41 P 6Lilan F 38 N 35Huangjin M 52 P 9Wuma M 29 N 15Hecheng M 36 P order的初態(tài)的初態(tài)order的末態(tài)的末態(tài)從高到低從高到低01234548案例分析:結(jié)構(gòu)體數(shù)組案例分析:結(jié)構(gòu)體數(shù)組優(yōu)化點票程序優(yōu)化點票程序?qū)崿F(xiàn)實現(xiàn)(cw1308.c)結(jié)構(gòu)體結(jié)構(gòu)體 for (i=0;ilen;i+) orderi=i; for (i=0;ilen-1;i+) for
49、(j=0;jlen-1-i;j+) if (candorderj.countcandorderj+1.count) tmp=orderj; orderj=orderj+1; orderj+1=tmp; for (i=0;ilen;i+) printf(t%st%dn, , candorderi.count);交換序號交換序號排序數(shù)組賦初值排序數(shù)組賦初值按照按照order保存的順序輸出候選人信息。保存的順序輸出候選人信息。49結(jié)構(gòu)體作為函數(shù)的參數(shù)結(jié)構(gòu)體作為函數(shù)的參數(shù)把結(jié)構(gòu)體的單個成員傳遞給函數(shù)把結(jié)構(gòu)體的單個成員傳遞給函數(shù)值傳遞。值傳遞。被調(diào)用函數(shù)不能修改調(diào)用函數(shù)中的
50、結(jié)構(gòu)體成員。被調(diào)用函數(shù)不能修改調(diào)用函數(shù)中的結(jié)構(gòu)體成員。把整個結(jié)構(gòu)體傳遞給函數(shù)把整個結(jié)構(gòu)體傳遞給函數(shù)值傳遞。值傳遞。被調(diào)用函數(shù)不能修改調(diào)用函數(shù)中的結(jié)構(gòu)體。被調(diào)用函數(shù)不能修改調(diào)用函數(shù)中的結(jié)構(gòu)體。把結(jié)構(gòu)體指針傳遞給函數(shù)把結(jié)構(gòu)體指針傳遞給函數(shù)模擬引用傳遞。模擬引用傳遞。被調(diào)用函數(shù)能修改調(diào)用函數(shù)中的結(jié)構(gòu)體。被調(diào)用函數(shù)能修改調(diào)用函數(shù)中的結(jié)構(gòu)體。結(jié)構(gòu)體結(jié)構(gòu)體50在函數(shù)中使用結(jié)構(gòu)體在函數(shù)中使用結(jié)構(gòu)體把整個結(jié)構(gòu)體作為單個數(shù)據(jù)返回把整個結(jié)構(gòu)體作為單個數(shù)據(jù)返回因為結(jié)構(gòu)體變量之間可以賦值。因為結(jié)構(gòu)體變量之間可以賦值。按值傳遞把數(shù)組傳遞給函數(shù)按值傳遞把數(shù)組傳遞給函數(shù)把數(shù)組作為結(jié)構(gòu)體的成員,然后把結(jié)構(gòu)體傳遞給函數(shù)。把數(shù)組
51、作為結(jié)構(gòu)體的成員,然后把結(jié)構(gòu)體傳遞給函數(shù)。被調(diào)用函數(shù)不能修改調(diào)用函數(shù)中的數(shù)組。被調(diào)用函數(shù)不能修改調(diào)用函數(shù)中的數(shù)組。結(jié)構(gòu)體結(jié)構(gòu)體51共用體共用體或稱為或稱為聯(lián)合聯(lián)合(Union)使幾個不同的變量共占同一段內(nèi)存的結(jié)構(gòu)稱為使幾個不同的變量共占同一段內(nèi)存的結(jié)構(gòu)稱為 “ “共用體共用體”或者或者“聯(lián)合聯(lián)合”類型的結(jié)構(gòu)。類型的結(jié)構(gòu)。1、共用體的概念 union number short x; char ch; float y;基本上和基本上和struct一樣一樣x、ch和和y處于處于同樣的地址同樣的地址sizeof(union xxx)取決于占空間最多的那個成員變量。取決于占空間最多的那個成員變量。11.
52、852共用體共用體 union data int i; char ch; float f;a,b,c; 同一內(nèi)存單元在每一瞬時只能存放其中一種類型的成員;同一內(nèi)存單元在每一瞬時只能存放其中一種類型的成員;并非同時都起作用,起作用的成員是最后一次存放的成員并非同時都起作用,起作用的成員是最后一次存放的成員不能作為函數(shù)參數(shù)不能作為函數(shù)參數(shù)union data int i; char ch; float f;; union data a,b,c;或:共用體和結(jié)構(gòu)體的比較:共用體和結(jié)構(gòu)體的比較:結(jié)構(gòu)體變量所占內(nèi)存長度是各成員占的內(nèi)存長度之和。每個成員結(jié)構(gòu)體變量所占內(nèi)存長度是各成員占的內(nèi)存長度之和。每個
53、成員分別占有其自己的內(nèi)存單元。分別占有其自己的內(nèi)存單元。共用體變量所占的內(nèi)存長度等于最長的成員的長度。共用體變量所占的內(nèi)存長度等于最長的成員的長度。上面定義的上面定義的“共用共用體體”變量、變量、各占個字節(jié)各占個字節(jié)(因為一個實型變(因為一個實型變量占個字節(jié)),量占個字節(jié)),而不是各占而不是各占個字節(jié)。個字節(jié)。例如:53共用體共用體 只有先定義了共用體變量才能引用它,而且不能引用共用只有先定義了共用體變量才能引用它,而且不能引用共用體變量,而只能引用共用體變量中的成員。體變量,而只能引用共用體變量中的成員。例如:前面定義了a、b、c為共用體變量 a.i a.i (引用共用體變量中的整型變量)引
54、用共用體變量中的整型變量) a.cha.ch(引用共用體變量中的字符變量)引用共用體變量中的字符變量) a.f a.f (引用共用體變量中的實型變量)引用共用體變量中的實型變量)2 共用體變量的引用方式 54共用體共用體 (1)(1)同一個內(nèi)存段可以用來存放幾種不同類型的成員,但在每一同一個內(nèi)存段可以用來存放幾種不同類型的成員,但在每一瞬時只能存放其中一種,而不是同時存放幾種。瞬時只能存放其中一種,而不是同時存放幾種。(2) (2) 共用體變量中起作用的成員是最后一次存放的成員,在存共用體變量中起作用的成員是最后一次存放的成員,在存入一個新的成員后原有的成員就失去作用。入一個新的成員后原有的成
55、員就失去作用。 (3) (3) 共用體變量的地址和它的各成員的地址都是同一地址。共用體變量的地址和它的各成員的地址都是同一地址。(4) (4) 不能對共用體變量名賦值,也不能企圖引用變量名來得到不能對共用體變量名賦值,也不能企圖引用變量名來得到一個值,又不能在定義共用體變量時對它初始化。一個值,又不能在定義共用體變量時對它初始化。(5) (5) 不能把共用體變量作為函數(shù)參數(shù),也不能使函數(shù)帶回共用不能把共用體變量作為函數(shù)參數(shù),也不能使函數(shù)帶回共用體變量,但可以使用指向共用體變量的指針體變量,但可以使用指向共用體變量的指針 (6) (6) 共用體類型可以出現(xiàn)在結(jié)構(gòu)體類型定義中,也可以定義共共用體類
56、型可以出現(xiàn)在結(jié)構(gòu)體類型定義中,也可以定義共用體數(shù)組。反之,結(jié)構(gòu)體也可以出現(xiàn)在共用體類型定義中,用體數(shù)組。反之,結(jié)構(gòu)體也可以出現(xiàn)在共用體類型定義中,數(shù)組也可以作為共用體的成員。數(shù)組也可以作為共用體的成員。 3 共用體類型數(shù)據(jù)的特點55共用體共用體設(shè)有若干個人員的數(shù)據(jù),其中有學(xué)生和教師。學(xué)生的數(shù)據(jù)中包設(shè)有若干個人員的數(shù)據(jù),其中有學(xué)生和教師。學(xué)生的數(shù)據(jù)中包括:姓名、號碼、性別、職業(yè)、括:姓名、號碼、性別、職業(yè)、班級班級。教師的數(shù)據(jù)包括:姓名、。教師的數(shù)據(jù)包括:姓名、號碼、性別、職業(yè)、號碼、性別、職業(yè)、職務(wù)職務(wù)??梢钥闯?,學(xué)生和教師所包含的數(shù)??梢钥闯觯瑢W(xué)生和教師所包含的數(shù)據(jù)是不同的?,F(xiàn)要求把它們放在
57、同一表格中。據(jù)是不同的。現(xiàn)要求把它們放在同一表格中。圖圖11-2511-25例56用指針處理鏈表用指針處理鏈表 圖圖11-2611-26 算法:算法:57共用體共用體 #include #include structstruct int num; int num; char name10; char name10; char sex; char sex; char job; char job; union union int banji; int banji;char position10;char position10; category; category;person2;person2;
58、/ /* *先設(shè)人數(shù)為先設(shè)人數(shù)為2 2* */ /int main() int i; for(i=0;i2;i+) scanf(%d %s %c %c, &personi.num, &, &personi.sex, &personi.job);Cw1308.c58共用體共用體 if(personi.job = S)if(personi.job = S)scanf(%d, &personi.category.banji);scanf(%d, &personi.category.banji);else if(personi.j
59、ob = T)else if(personi.job = T)scanf(%s, personi.category.position);scanf(%s, personi.category.position);else printf(“Input error!”); printf(n);else printf(“Input error!”); printf(n);printf(No. name sex job class/positionn);printf(No. name sex job class/positionn);for(i=0;i2;i+)for(i=0;i2;i+)if (per
60、soni.job = S)if (personi.job = S)printf(“%-6d%-10s%-3c%-3c%-6dn”,personi.num, printf(“%-6d%-10s%-3c%-3c%-6dn”,personi.num, , personi.sex, personi.job, , personi.sex, personi.job, personi.category.banji); personi.category.banji);else printf(“%-6d%-10s%-3c%-3c%-6sn”,personi.num, else printf(“%-6d%-10s%-3c%-3c%-6sn”,personi.num, ,personi.sex, personi.job, per
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中小學(xué)校教師職稱晉升水平能力檢測試題梳理
- 地方導(dǎo)游基礎(chǔ)知識-地方導(dǎo)游基礎(chǔ)知識模擬考題
- 初級銀行管理-銀行專業(yè)初級《銀行管理》模擬試卷8
- 申請書的正確格式
- 加強風(fēng)險管理保障企業(yè)穩(wěn)健運營
- DB2201-T 30-2023 城市智能體政策直達平臺管理規(guī)范
- 2024-2025學(xué)年山東省齊魯名校聯(lián)盟大聯(lián)考高三上學(xué)期12月月考物理試題(解析版)
- 線路工程占地及附著物補償委托合同(2篇)
- 管理人員報銷路費等合同(2篇)
- 電影CG特效在教育領(lǐng)域的應(yīng)用與創(chuàng)新
- 2024年中國陪診服務(wù)行業(yè)市場發(fā)展趨勢預(yù)測報告-智研咨詢重磅發(fā)布
- 藝術(shù)欣賞與實踐(高職)全套教學(xué)課件
- 轉(zhuǎn)基因調(diào)查分析報告
- 英語-時文閱讀-7年級(8篇)
- 只有偏執(zhí)狂才能生存讀書心得
- 數(shù)據(jù)挖掘(第2版)全套教學(xué)課件
- 產(chǎn)學(xué)研融合創(chuàng)新合作機制
- 胃早癌-經(jīng)典課件
- 安裝門窗施工方案
- 茉莉花的生長習(xí)性及栽培管理辦法
- 人教版九年級英語動詞時態(tài)專項練習(xí)(含答案和解析)
評論
0/150
提交評論