版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第九章結(jié)構(gòu)體徐秋紅辦公地點(diǎn):西配樓310室辦公電話:010-62336516E-mail:主要內(nèi)容為什么引入結(jié)構(gòu)體類型如何定義一個(gè)結(jié)構(gòu)體類型如何聲明結(jié)構(gòu)體變量在語句中如何訪問結(jié)構(gòu)體變量結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體指針1.為什么引入結(jié)構(gòu)體結(jié)構(gòu)體是除數(shù)組以外的又一個(gè)構(gòu)造類型為什么引入結(jié)構(gòu)體的概念例如:學(xué)生的成績單這些表格中每行數(shù)據(jù)的特點(diǎn)是什么?一行中的所有數(shù)據(jù)在含義上具有相關(guān)性但是一行數(shù)據(jù)中所有數(shù)據(jù)的類型不完全相同序號(hào)班級(jí)學(xué)號(hào)姓名課堂練習(xí)1課堂練習(xí)2課堂練習(xí)31資環(huán)13-1130224125李丹101082資環(huán)13-2130224226張朦云910103環(huán)志威810104環(huán)芳宇101010序號(hào)班級(jí)學(xué)號(hào)姓名課堂練習(xí)1課堂練習(xí)2課堂練習(xí)3(整型)(字符串)(字符串)(字符串)(實(shí)型)(實(shí)型)(實(shí)型)什么是結(jié)構(gòu)體例如:體檢表姓名性別出生日期身高體重年月日王利男19948201.8181.5(字符串)(字符)(整型)(整型)(整型)(實(shí)型)(實(shí)型)存儲(chǔ)成組數(shù)據(jù)的組織結(jié)構(gòu)——結(jié)構(gòu)體具有內(nèi)在聯(lián)系的一組數(shù)據(jù)稱為一個(gè)記錄什么是結(jié)構(gòu)體結(jié)構(gòu)體是一個(gè)新的構(gòu)造類型是由編程者根據(jù)自己的需求而設(shè)計(jì)的一種數(shù)據(jù)結(jié)構(gòu)形式(或稱為由編程者自己設(shè)計(jì)的數(shù)據(jù)類型)——結(jié)構(gòu)體類型通過分析和整理要處理的數(shù)據(jù)內(nèi)容,歸納需要哪些數(shù)據(jù)項(xiàng),并指出每個(gè)數(shù)據(jù)項(xiàng)的數(shù)據(jù)類型
——定義結(jié)構(gòu)體類型結(jié)構(gòu)體類型——需要先定義后使用2.結(jié)構(gòu)體類型如何定義
struct結(jié)構(gòu)體類型名{
成員描述/*記錄中的字段*/};structdate{intyear;intmonth;intday;};structcoordinate{doublex;doubley;};定義日期型的結(jié)構(gòu)體類型定義平面坐標(biāo)型的結(jié)構(gòu)體類型3.聲明結(jié)構(gòu)體變量——聲明記錄4.訪問(引用)結(jié)構(gòu)體變量
(1)可以通過使用結(jié)構(gòu)體變量名來引用整個(gè)記錄
(2)引用記錄中的某個(gè)成員字段
使用記錄名后面加點(diǎn)“.”,再加成員名的方式
例如:設(shè)置a0為原點(diǎn)坐標(biāo)structcoordinatea0,a1,a2;structdatebirthday;a1xy最高優(yōu)先級(jí)的運(yùn)算符5.初始化記錄(結(jié)構(gòu)體變量)例如:初始化記錄National_Day初始化記錄a0是原點(diǎn)坐標(biāo)6.舉例通過執(zhí)行程序,輸出今天、昨天、明天的日期求任意兩點(diǎn)(如:a1,a2)間的距離.a2(x,y)yx.a1(x,y)6.舉例通過執(zhí)行程序,輸出今天、昨天、明天的日期求任意兩點(diǎn)(如:a1,a2)間的距離#include<stdio.h>structdate{intyear;intmonth;intday;};intmain(void){structdatetoday={2014,6,6},yesterday,tomorrow;yesterday=tomorrow=today;yesterday.day=today.day-1;tomorrow.day=today.day+1; puts("\nOutput:\n\n");printf("yesterday:%d-%d-%d\n",yesterday.year,yesterday.month,yesterday.day);printf("tomorrow:%d-%d-%d\n\n",tomorrow.year,tomorrow.month,tomorrow.day);system("Pause");return0;}7.結(jié)構(gòu)體類型的指針(記錄的指針)指向記錄的指針比記錄本身小的多,而且比記錄本身更容易操作structcoordinate{doublex;doubley;};structcoordinatea1,a2,*pa=&a1,*pb=&a2;a1:a1.x
a1.ya1:pa->xpa->ya1xya1xypa8.為已有的數(shù)據(jù)類型建立別名關(guān)鍵字typedef語法形式
typedef類型名的舊名類型名的新名;typedefstructcoordinatecoord;coorda1,a2,*pa,*pb;9.結(jié)構(gòu)體類型的數(shù)組與普通類型的數(shù)組一樣區(qū)別是數(shù)組的元素是記錄(即結(jié)構(gòu)體變量)structcoordinate{doublex;doubley;};typedefstructcoordinatecoord;描述三角形的三個(gè)頂點(diǎn)coorda1,a2,a3;可以用數(shù)組coorda[3];結(jié)構(gòu)體變量的應(yīng)用——舉例例如:structach/*定義學(xué)生結(jié)構(gòu)體類型*/{charname[20];/*學(xué)生姓名*/charsex;/*性別*/intnum;/*學(xué)號(hào)*/floatscore[3];/*三門課程的考試成績*/};structachstu1={"Jonh",'M',310,75,96,83},stu2={"Lili",'F',217,92,87,80};姓名性別學(xué)號(hào)英語高數(shù)體育JohnM310759683LiliF217928780(stu1.score[0]+stu1.score[1]+stu1.score[2])/3inti;floatavg_2,sum=0.0;for(i=0;i<3;i++)
sum=sum+stu2.score[i];
avg_2=sum/3;例1:求每一位學(xué)生的平均成績avg_1=應(yīng)用結(jié)構(gòu)體類型的數(shù)組structach/*定義學(xué)生結(jié)構(gòu)體類型*/{
charname[20];/*學(xué)生姓名*/
charsex;/*性別*/intnum;/*編號(hào)*/floatscore[3];/*三門課程的考試成績*/}stu1,stu2;structach{
charname[20];
charsex;intnum;floatscore[3];}stu[2]
;stu[2]={{"John",'M',310,75,96,83},{"Lili",'F',217,92,87,80}};printf("\n%s,%f",);stu[0].name,stu[0].score[2]如果要輸出第一位學(xué)生的名字和其最后一科的成績?如何初始化數(shù)組?結(jié)構(gòu)體變量的應(yīng)用——舉例namesexheightweightsightcommentleftright例2:下面是一張學(xué)生體檢表:FrankM
1.78
67.51.00.9青霉素過敏MaryF
1.61
恐高癥structsight_table{floatleft;floatright;};structcase_table{charname[20];charsex;floatheight;floatweight;
structsight_tablesight;charcomment[30];}health[2];結(jié)構(gòu)體類型的嵌套聲明結(jié)構(gòu)體變量的應(yīng)用——舉例對(duì)嵌套的結(jié)構(gòu)體變量成員的引用:strcpy(health[0].name,"Frank");health[0].sex
='M';health[0].sight.left
=
1.0;health[0].sight.right
=
0.9;printf("%.2f,%.2f\n",health[0].sight.left,
health[0].sight.right);
health[0]:是結(jié)構(gòu)體數(shù)組health的第1個(gè)元素Frank結(jié)構(gòu)體變量的應(yīng)用——舉例例3:根據(jù)下面體檢表中的數(shù)據(jù),建立一個(gè)數(shù)組health,要求輸出評(píng)定結(jié)果(comment)為“good”的學(xué)生信息,并分別統(tǒng)計(jì)和輸出男女生的平均身高及體重。namesexheightweightsightcommentleftrightLihongF1.60541.01.2goodJiangwenM1.78700.81.0HanyuM1.72710.50.4YangyunF1.65651.21.2YujanhaiM1.8076.51.01.2goodZhangbingM1.73#include<stdio.h>#include<string.h>structsight_table{floatleft;floatright;};structcase_table{charname[20];charsex;floatheight;floatweight;
structsight_tablesight;charcomment[10];};intmain(void){
structcase_tablehealth[6]={\{"Lihong",'F',1.60,54,1.0,1.2,"good"},\
{"Jiangwen",'M',1.78,70,0.8,1.0},\{"Hanyu",'M',1.72,71,0.5,0.4},\{"Yangyun",'F',1.65,65,1.2,1.2},\{"Yujanhai",'M',1.80,76.5,1.0,1.2,"good"},\{"Zhangbing",'M',1.73,66.5,0.5,0.3}\
};
/*初始化結(jié)構(gòu)體數(shù)組health*/floatgirl_h,girl_w,boy_h,boy_w;intn,girl_cont,boy_cont;system("cls");/*清屏*/girl_h=boy_h=girl_w=boy_w=0.0;girl_cont=boy_cont=0;for(n=0;n<6;n++){
if(health[n].sex=='F'){girl_h+=health[n].height;/*累計(jì)女生總身高*/ girl_w+=health[n].weight;/*累計(jì)女生總體重*/
girl_cont++;/*統(tǒng)計(jì)女生人數(shù)*/} else {boy_h+=health[n].height;
/*累計(jì)男生總身高*/boy_w+=health[n].weight;/*累計(jì)男生總體重*/boy_cont++;/*統(tǒng)計(jì)男生人數(shù)*/}}printf("\tgirl:height=%.2f,weight=%.2f\n",girl_h/girl_cont,girl_w/girl_cont);printf("\tboy:height=%.2f,weight=%.2f\n",boy_h/boy_cont,boy_w/boy_cont);for(n=0;n<6;n++)/*查找評(píng)定結(jié)果為“good”的學(xué)生*/if(strcmp(health[n]ment,"good")==0) {printf("%s%c%s",health[n].name,health[n].sex,health[n]ment); printf("\t%.2f%.2f",health[n].height,health[n].weight); printf("\t%.2f%.2f",health[n].sight.left,health[n].sight.right);printf("\n"); }return0;}Jiegou.c程序執(zhí)行結(jié)果如下:girl:height=1.63,weight=59.50boy:height=1.76,weight=71.00LihongFgood1.6054.001.001.20YujanhaiMgood1.8076.501.001.20結(jié)構(gòu)體變量的應(yīng)用——舉例例4設(shè)計(jì)函數(shù)sort()
完成將運(yùn)動(dòng)員信息按成績從大到小排序設(shè)計(jì)函數(shù)prt()
輸出指定的運(yùn)動(dòng)員信息運(yùn)動(dòng)員編號(hào)國籍成績50023美國59360103中國60980109法國49670110俄羅斯58740301加拿大508#include<stdio.h>#defineM5structplay{charnumber[6];charcountry[20];shortscore;};voidsort(structplay*,int);voidprt(structplay*);intmain(void){structplayswim[M]={{"50023","美國",593},{"60103","中國",609},\{"80109","法國",496},{"70110","俄羅斯",587},\{"40301","加拿大",508}},*p1;intk;p1=swim;/*p1指向結(jié)構(gòu)體變量swim數(shù)組*/for(k=0;k<M;k++,p1++)
prt(p1);
/*打印一個(gè)運(yùn)動(dòng)員的信息*/printf("-------------\n\n");
sort(swim,M);
/*進(jìn)行排序處理*/
p1=swim;/*p1重新指向結(jié)構(gòu)體變量swim數(shù)組*/for(k=0;k<M;k++,p1++)
prt(p1);
/*打印一個(gè)運(yùn)動(dòng)員的信息*/printf("-------------\n\n");
getch();return0;}voidprt(structplay*p){printf("%s%s",p->number,p->country);printf("\t%d\n",p->score);return;}voidsort(structplay*x,intn){inti,j;structplay*max,*p,temp;
for(i=0;i<n-1;i++){max=x+i;p=x+i+1;
for(j=i+1;j<n;j++,p++)if(max->score<p->score)max=p;temp=*max,*max=*(x+i),*(x+i)=temp;}return;}選擇排序法小結(jié)為什么要引用結(jié)構(gòu)體類型,其特點(diǎn)是什么?如何定義結(jié)構(gòu)體類型?如何聲明結(jié)構(gòu)體變量?
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025飯店轉(zhuǎn)包合同范文
- 2025年度養(yǎng)老機(jī)構(gòu)寵物養(yǎng)護(hù)服務(wù)合同示范文本3篇
- 二零二五年度競業(yè)禁止勞動(dòng)合同在文化產(chǎn)業(yè)的關(guān)鍵作用3篇
- 二零二五年度公租房合同簽訂及補(bǔ)貼發(fā)放協(xié)議3篇
- 二零二五年度學(xué)校食堂兼職校醫(yī)食品安全合同2篇
- 二零二五年度素食餐飲技術(shù)加盟經(jīng)營合同2篇
- 二零二五年度土方運(yùn)輸車輛智能化改造與升級(jí)合同3篇
- 二零二五年度新能源電動(dòng)汽車租賃合同2篇
- 2025年度年度租賃車輛保險(xiǎn)責(zé)任協(xié)議3篇
- 2025年度極限運(yùn)動(dòng)賽事委托承辦授權(quán)協(xié)議3篇
- 裝飾裝修工程質(zhì)量保證措施和創(chuàng)優(yōu)計(jì)劃
- 內(nèi)鏡室院感知識(shí)培訓(xùn)
- 吃動(dòng)平衡知識(shí)講座
- 漏工序改善控制方案
- 數(shù)據(jù)維護(hù)方案
- 湖北省部分學(xué)校2023-2024學(xué)年高一上學(xué)期期末考試數(shù)學(xué)試題(解析版)
- 軟件測試人員述職報(bào)告
- 《內(nèi)經(jīng)選讀》期末考試參考題庫(含答案)
- 廣東省佛山市2023-2024學(xué)年高二上學(xué)期期末中教學(xué)質(zhì)量檢測英語試題【含答案解析】
- 器械相關(guān)感染預(yù)防課件
- 2024年度醫(yī)院影像科護(hù)理工作計(jì)劃
評(píng)論
0/150
提交評(píng)論