![《C語言程序設(shè)計教程》第九章結(jié)構(gòu)體和共同體_第1頁](http://file4.renrendoc.com/view/637f8e508a4008e9625f0c6451390d6c/637f8e508a4008e9625f0c6451390d6c1.gif)
![《C語言程序設(shè)計教程》第九章結(jié)構(gòu)體和共同體_第2頁](http://file4.renrendoc.com/view/637f8e508a4008e9625f0c6451390d6c/637f8e508a4008e9625f0c6451390d6c2.gif)
![《C語言程序設(shè)計教程》第九章結(jié)構(gòu)體和共同體_第3頁](http://file4.renrendoc.com/view/637f8e508a4008e9625f0c6451390d6c/637f8e508a4008e9625f0c6451390d6c3.gif)
![《C語言程序設(shè)計教程》第九章結(jié)構(gòu)體和共同體_第4頁](http://file4.renrendoc.com/view/637f8e508a4008e9625f0c6451390d6c/637f8e508a4008e9625f0c6451390d6c4.gif)
![《C語言程序設(shè)計教程》第九章結(jié)構(gòu)體和共同體_第5頁](http://file4.renrendoc.com/view/637f8e508a4008e9625f0c6451390d6c/637f8e508a4008e9625f0c6451390d6c5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第6章數(shù)組
9.1結(jié)構(gòu)體的定義9.2結(jié)構(gòu)體在程序中的使用9.3結(jié)構(gòu)體數(shù)組9.4結(jié)構(gòu)指針9.5結(jié)構(gòu)體與函數(shù)9.6聯(lián)合體第九章結(jié)構(gòu)體與聯(lián)合體關(guān)鍵字結(jié)構(gòu)體聯(lián)合體成員
當(dāng)要把多個數(shù)據(jù)集中處理時,使用數(shù)組比較方便。但是,數(shù)組中的元素必須是具有相同的類型。在實(shí)際問題中,有時需要處理一組具有不同類型的數(shù)據(jù)。例如,在學(xué)生信息中,姓名是字符型的,學(xué)號和年齡是整型的,性別是字符型的,成績是實(shí)型的,無法用一個數(shù)組來存放這一組數(shù)據(jù)。這就要使用另外一種構(gòu)造數(shù)據(jù)類型,這種類型就是結(jié)構(gòu)體。那么如何定義這種數(shù)據(jù)類型?怎樣說明這種數(shù)據(jù)類型的變量?在程序中如何使用這些變量呢?
9.1結(jié)構(gòu)體的定義有時需要將不同類型的數(shù)據(jù)組合成一個有機(jī)的整體,以便于引用。如:一個學(xué)生有學(xué)號/姓名/性別/年齡/地址等屬性intnum;charname[20]; charsex;
intage;intcharaddr[30];聲明一個結(jié)構(gòu)體類型的一般形式為:
struct
結(jié)構(gòu)體名{成員表列};如:struct
student{int
num;charname[20];charsex;
int
age;float
score;charaddr[30];}9.2結(jié)構(gòu)體在程序中的使用
一、定義結(jié)構(gòu)體變量結(jié)構(gòu)體類型定義好后,就增加了一種用戶自己定義的結(jié)構(gòu)類型,與系統(tǒng)定義的標(biāo)準(zhǔn)類型(int、char、float、double等)一樣,可用來定義結(jié)構(gòu)體類型的變量,以便在程序中使用它。下面我們來看一下結(jié)構(gòu)體變量如何定義和使用。定義結(jié)構(gòu)體變量有以下三種方法。1.先定義結(jié)構(gòu),后定義結(jié)構(gòu)變量【程序文本.9.3為學(xué)生的結(jié)構(gòu)體類型定義兩個變量x,y
struct
student
{
int
no
;
/*學(xué)號*/char
name[8];
/*姓名*/float
score
;
/*英語、物理、數(shù)學(xué)的平均成績*/
};……structstudentx,y;2.在定義結(jié)構(gòu)類型的同時定義變量此方法是在定義結(jié)構(gòu)體類型的同時說明結(jié)構(gòu)變量,其一般格式為:struct
結(jié)構(gòu)體名{數(shù)據(jù)類型成員名1;數(shù)據(jù)類型成員名2;數(shù)據(jù)類型成員名3;……數(shù)據(jù)類型成員名n;}變量名列表;程序為學(xué)生的結(jié)構(gòu)體類型定義兩個變量x,y
struct
student
{
int
no
;
/*學(xué)號*/char
name[8];
/*姓名*/float
score
;
/*英語、物理、數(shù)學(xué)的平均成績*/
}x={20091,"liling",78.3},y={20093,"wangli",93.2};這種定義方法是類型定義和變量定義同時進(jìn)行。同樣,可以對兩個變量進(jìn)行賦初值。3.直接說明結(jié)構(gòu)體類型變量直接說明結(jié)構(gòu)體類型變量的一般格式為:struct{數(shù)據(jù)類型成員名1;數(shù)據(jù)類型成員名2;數(shù)據(jù)類型成員名3;……數(shù)據(jù)類型成員名n;}變量名列表;此方法省去了結(jié)構(gòu)體名,但不提倡這種定義方法。程序直接定義兩個學(xué)生類型變量x,ystruct
{
int
no
;
/*學(xué)號*/char
name[8];
/*姓名*/float
score
;
/*英語、物理、數(shù)學(xué)的平均成績*/
}x={20091,"liling",78.3},y={20093,"wangli",93.2};說明:1.結(jié)構(gòu)體類型與結(jié)構(gòu)體變量區(qū)別:定義時先定義結(jié)構(gòu)體類型,然后定義變量。類型不分配空間,變量分配空間。2.結(jié)構(gòu)體的嵌套定義:即定義的結(jié)構(gòu)體成員也可以是結(jié)構(gòu)體變量。二、在程序中使用結(jié)構(gòu)體變量當(dāng)定義好某結(jié)構(gòu)體變量后,就可以在程序中對其進(jìn)行使用。而對于結(jié)構(gòu)變量,往往使用它的單個成員,而不使用整個結(jié)構(gòu)。表示結(jié)構(gòu)變量成員的一般形式是:結(jié)構(gòu)變量名.成員名其中.為成員運(yùn)算符,其運(yùn)算級別是最高的。例如:x.no
y.score9.3結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組是同類型結(jié)構(gòu)體變量的集合,結(jié)構(gòu)體數(shù)組在內(nèi)存中占用一片連續(xù)的存儲單元。結(jié)構(gòu)體數(shù)組的定義與定義結(jié)構(gòu)體變量相類似,只需說明其為數(shù)組即可以,在此不在贅述。對結(jié)構(gòu)體數(shù)組的初始化的一般形式是結(jié)構(gòu)體類型數(shù)組名[常量表達(dá)式]={初值表列};【程序文本.9.8】結(jié)構(gòu)體數(shù)組的定義和初始化structstudent{intnum;charname[20];charsex;intage;floatscore;}stu[3]={{1001,"wangli",'m',20,86.0},{1002,"wangfang",'m',19,78.5},{1003,"liuqiang",'f',20,89.6}}說明:1.對于結(jié)構(gòu)數(shù)組中的每個元素又是結(jié)構(gòu)體類型的變量,因此各元素的初值表列又應(yīng)該包含在{}中。2.結(jié)構(gòu)數(shù)組引用時格式為結(jié)構(gòu)數(shù)組名[下標(biāo)].成員名3.對于結(jié)構(gòu)體數(shù)組的輸入和輸出經(jīng)常利用for循環(huán)結(jié)構(gòu)。9.4結(jié)構(gòu)指針指向結(jié)構(gòu)體類型的指針與前面指向基本類型的指針比較,除了所指向的對象不同以外,在使用上并沒有差別。因此,可以用結(jié)構(gòu)體變量的首地址或結(jié)構(gòu)體數(shù)組的數(shù)組名作為結(jié)構(gòu)體指針的初值,從而使其指向?qū)?yīng)的結(jié)構(gòu)體變量或結(jié)構(gòu)體數(shù)組。程序(指向結(jié)構(gòu)體變量的指針)
structstudent{
intnum;charename[20];
charsex;intage;floatscore;charaddr[30];};structstudentstu_1={1,"cuilin",'M',19,86.4,"Shanghai"};structstudent*p=&stu_1;程序中變量的成員的形式用以下三種表示形式等價(其中第1、2為用指針形式表示)1.(*p).成員名
(*p).num=1;strcpy((*p).ename,"CuiLin");(*p).sex='M';(*p).age=19;(*p).score=86.4;strcpy((*p).addr,"Shanghai");2.p->成員名p->num=1;strcpy(p->ename,"CuiLin");p->sex=‘M’;
p->age=19;p->score=86.4;strcpy(p->addr,"Shanghai");3.結(jié)構(gòu)體變量名.成員名student1.num=1;strcpy(student1.ename,"CuiLin");student1.sex='M';student1.age=19;student1.score=86.4;strcpy(student1.addr,"Shanghai");9.5結(jié)構(gòu)體與函數(shù)一、用結(jié)構(gòu)變量的成員作參數(shù)----值傳遞調(diào)用函數(shù)將單個結(jié)構(gòu)體成員傳遞給被調(diào)用函數(shù)的用法與普通變量做參數(shù)一樣,屬于值傳遞,主要有以下三種形式:(一)如果此結(jié)構(gòu)體成員是簡單變量,則被調(diào)用函數(shù)對應(yīng)的形參應(yīng)該是同類型的簡單變量。(二)如果此結(jié)構(gòu)體成員是變量的地址,剛被調(diào)用函數(shù)對應(yīng)的形參應(yīng)該指針變量。(三)如果此結(jié)構(gòu)體成員是數(shù)組或指向數(shù)組的指針,則被調(diào)用函數(shù)對應(yīng)的形參應(yīng)該是數(shù)組名或指針。程序1設(shè)學(xué)生的三門課成績已經(jīng)保存在一個結(jié)構(gòu)數(shù)組中,要求用子程序計算并返回三門課的總分。在主程序main()中先定義一個結(jié)構(gòu)體類型,再創(chuàng)建一個結(jié)構(gòu)體數(shù)組,并將此數(shù)組的成員score數(shù)組傳遞到子程序add()中,由add()計算總分并返回。
#include<stdio.h>main(){struct
stu{charname[80];intscore[3];inttotal;};struct
stustudent[3];inti;printf("pleaseinputthreestu’nameandscoreforthethreestu:\n");for(i=0;i<3;i++){scanf("%s",student[i].name);scanf("%d%d%d",&student[i].score[0],&student[i].score[1],&student[i].score[2]),student[i].total=add(student[i].score[0],student[i].score[1],student[i].score[2]);}printf("the
score_tableofthethreestudentsis:\n");for(i=0;i<3;i++)printf("%10s%d%d
%d%d\n",student[i].name,student[i].score[0],student[i].score[1],student[i].score[2],student[i].total);}add(int
x,int
y,intz){returnx+y+z;}"pleaseinputthreestu’nameandscoreforthethreestu:輸入Zhangli↙98↙90↙97↙Wanghong↙89↙88↙98↙liufei↙78↙89↙97↙結(jié)果是:Thescore_tableofthethreestudentsis:Zhangli989097Wanghong898898Liufei788997二、用結(jié)構(gòu)變量作參數(shù)----多值傳遞,效率低調(diào)用函數(shù)將結(jié)構(gòu)體變量整體傳遞給被調(diào)用函數(shù)時,采用的是“值傳遞”方式,此時將結(jié)構(gòu)體變量所占內(nèi)存單元的內(nèi)容全部順序傳遞給形參(形參必須是同類型的結(jié)構(gòu)體變量)。具體可以采用以下三種形式:(一)實(shí)參和形參都是結(jié)構(gòu)體變量名(二)實(shí)參是結(jié)構(gòu)體變量的地址,形參是相同結(jié)構(gòu)體類型的指針。(三)實(shí)參和形參都是相同結(jié)構(gòu)體類型的指針。程序從鍵盤輸入學(xué)生信息,輸出學(xué)生的姓名和成績總分。structscore{intscore1;intscore2;intscore3;};structstudent{charname[20];charsex;intage;structscorestscore;};int
total(structstudentstud);main(){inti;structstudents[2];for(i=0;i<2;i++){printf("pleaseinputnameandscores\n");scanf("%s",s[i].name);scanf("%d",&s[i].stscore.score1);scanf("%d",&s[i].stscore.score2);scanf("%d",&s[i].stscore.score3);}for(i=0;i<2;i++)
printf("%s:TotalScoreis%d\n",s[i].name,total(s[i]));}int
total(structstudentstud){return(stud.stscore.score1+stud.stscore.score2+stud.stscore.score3);}三、用指向結(jié)構(gòu)變量或數(shù)組的指針作參數(shù)----地址傳遞結(jié)構(gòu)指針變量作函數(shù)參數(shù)程序計算一組學(xué)生的平均成績和不及格人數(shù)。用結(jié)構(gòu)指針變量作函數(shù)參數(shù)編程。struct
stu{
intnum;char*name;charsex;
floatscore;}boy[5]={{101,"Liping",'M',45},{102,"Zhangping",'M',62.5},{103,"Hefang",'F',92.5},{104,"Chengling",'F',87},{105,"Wangming",'M',58},};main(){
struct
stu*ps;voidave(struct
stu*ps);
ps=boy;
ave(ps);}voidave(struct
stu*ps){
intc=0,i;floatave,s=0;for(i=0;i<5;i++,ps++){s+=ps->score;
if(ps->score<60)c+=1;}
printf("s=%f\n",s);
ave=s/5;
printf("average=%f\ncount=%d\n",ave,c);}結(jié)果是:s=345.000000average=69.000000count=2程序9.13程序中定義了函數(shù)ave,其形參為結(jié)構(gòu)指針變量ps。boy被定義為外部結(jié)構(gòu)數(shù)組,因此在整個源程序中有效。在main函數(shù)中定義說明了結(jié)構(gòu)指針變量ps,并把boy的首地址賦予它,使ps指向boy數(shù)組。然后以ps作實(shí)參調(diào)用函數(shù)ave。在函數(shù)ave中完成計算平均成績和統(tǒng)計不及格人數(shù)的工作并輸出結(jié)果。由于本程序全部采用指針變量作運(yùn)算和處理,故速度更快,程序效率更高。9.6聯(lián)合體一、聯(lián)合類型定義(類型定義不分配內(nèi)存)union聯(lián)合名{類型標(biāo)識符成員名;
類型標(biāo)識符成員名;
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)二年級口算題之一
- 五年級口算競賽題
- 店鋪出租合同范本
- 小區(qū)弱電合同范本
- 2025年度車位物業(yè)管理與社區(qū)老年活動中心服務(wù)合同
- 2025年度智能小區(qū)物業(yè)與業(yè)主服務(wù)合同模板范文
- 二零二五年度離婚后子女撫養(yǎng)費(fèi)及教育支持協(xié)議
- 國際科技合作項目專題合作協(xié)議書范本
- 2025年度電影音樂創(chuàng)作與制作聘用合同
- 二零二五年度環(huán)保監(jiān)測與治理服務(wù)團(tuán)隊聘用協(xié)議
- 周口2024年河南周口市公安機(jī)關(guān)招聘輔警458人筆試歷年參考題庫附帶答案詳解
- 《頭面部穴位按摩》課件
- 2024美團(tuán)簡化版商家合作合同標(biāo)準(zhǔn)文本一
- 2025年貴州黔源電力股份有限公司招聘筆試參考題庫含答案解析
- 《休閑食品加工技術(shù)》 課件 1 休閑食品生產(chǎn)與職業(yè)生活
- 春季開學(xué)安全第一課
- 十大護(hù)理安全隱患
- 深化內(nèi)部改革轉(zhuǎn)換經(jīng)營機(jī)制強(qiáng)推內(nèi)部市場機(jī)制管理
- 稅務(wù)師事務(wù)所收費(fèi)標(biāo)準(zhǔn)
- 商場撤場申請書
- 《建筑固定消防設(shè)施》PPT課件
評論
0/150
提交評論