語言-課件第9章結構體_第1頁
語言-課件第9章結構體_第2頁
語言-課件第9章結構體_第3頁
語言-課件第9章結構體_第4頁
語言-課件第9章結構體_第5頁
已閱讀5頁,還剩28頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第九章結構體徐秋紅辦公地點:西配樓310室辦公電話:010-62336516E-mail:主要內容為什么引入結構體類型如何定義一個結構體類型如何聲明結構體變量在語句中如何訪問結構體變量結構體數組結構體指針1.為什么引入結構體結構體是除數組以外的又一個構造類型為什么引入結構體的概念例如:學生的成績單這些表格中每行數據的特點是什么?一行中的所有數據在含義上具有相關性但是一行數據中所有數據的類型不完全相同序號班級學號姓名課堂練習1課堂練習2課堂練習31資環13-1130224125李丹101082資環13-2130224226張朦云910103環志威810104環芳宇101010序號班級學號姓名課堂練習1課堂練習2課堂練習3(整型)(字符串)(字符串)(字符串)(實型)(實型)(實型)什么是結構體例如:體檢表姓名性別出生日期身高體重年月日王利男19948201.8181.5(字符串)(字符)(整型)(整型)(整型)(實型)(實型)存儲成組數據的組織結構——結構體具有內在聯系的一組數據稱為一個記錄什么是結構體結構體是一個新的構造類型是由編程者根據自己的需求而設計的一種數據結構形式(或稱為由編程者自己設計的數據類型)——結構體類型通過分析和整理要處理的數據內容,歸納需要哪些數據項,并指出每個數據項的數據類型

——定義結構體類型結構體類型——需要先定義后使用2.結構體類型如何定義

struct結構體類型名{

成員描述/*記錄中的字段*/};structdate{intyear;intmonth;intday;};structcoordinate{doublex;doubley;};定義日期型的結構體類型定義平面坐標型的結構體類型3.聲明結構體變量——聲明記錄4.訪問(引用)結構體變量

(1)可以通過使用結構體變量名來引用整個記錄

(2)引用記錄中的某個成員字段

使用記錄名后面加點“.”,再加成員名的方式

例如:設置a0為原點坐標structcoordinatea0,a1,a2;structdatebirthday;a1xy最高優先級的運算符5.初始化記錄(結構體變量)例如:初始化記錄National_Day初始化記錄a0是原點坐標6.舉例通過執行程序,輸出今天、昨天、明天的日期求任意兩點(如:a1,a2)間的距離.a2(x,y)yx.a1(x,y)6.舉例通過執行程序,輸出今天、昨天、明天的日期求任意兩點(如: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.結構體類型的指針(記錄的指針)指向記錄的指針比記錄本身小的多,而且比記錄本身更容易操作structcoordinate{doublex;doubley;};structcoordinatea1,a2,*pa=&a1,*pb=&a2;a1:a1.x

a1.ya1:pa->xpa->ya1xya1xypa8.為已有的數據類型建立別名關鍵字typedef語法形式

typedef類型名的舊名類型名的新名;typedefstructcoordinatecoord;coorda1,a2,*pa,*pb;9.結構體類型的數組與普通類型的數組一樣區別是數組的元素是記錄(即結構體變量)structcoordinate{doublex;doubley;};typedefstructcoordinatecoord;描述三角形的三個頂點coorda1,a2,a3;可以用數組coorda[3];結構體變量的應用——舉例例如:structach/*定義學生結構體類型*/{charname[20];/*學生姓名*/charsex;/*性別*/intnum;/*學號*/floatscore[3];/*三門課程的考試成績*/};structachstu1={"Jonh",'M',310,75,96,83},stu2={"Lili",'F',217,92,87,80};姓名性別學號英語高數體育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:求每一位學生的平均成績avg_1=應用結構體類型的數組structach/*定義學生結構體類型*/{

charname[20];/*學生姓名*/

charsex;/*性別*/intnum;/*編號*/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]如果要輸出第一位學生的名字和其最后一科的成績?如何初始化數組?結構體變量的應用——舉例namesexheightweightsightcommentleftright例2:下面是一張學生體檢表: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];結構體類型的嵌套聲明結構體變量的應用——舉例對嵌套的結構體變量成員的引用: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]:是結構體數組health的第1個元素Frank結構體變量的應用——舉例例3:根據下面體檢表中的數據,建立一個數組health,要求輸出評定結果(comment)為“good”的學生信息,并分別統計和輸出男女生的平均身高及體重。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}\

};

/*初始化結構體數組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;/*累計女生總身高*/ girl_w+=health[n].weight;/*累計女生總體重*/

girl_cont++;/*統計女生人數*/} else {boy_h+=health[n].height;

/*累計男生總身高*/boy_w+=health[n].weight;/*累計男生總體重*/boy_cont++;/*統計男生人數*/}}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++)/*查找評定結果為“good”的學生*/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程序執行結果如下:girl:height=1.63,weight=59.50boy:height=1.76,weight=71.00LihongFgood1.6054.001.001.20YujanhaiMgood1.8076.501.001.20結構體變量的應用——舉例例4設計函數sort()

完成將運動員信息按成績從大到小排序設計函數prt()

輸出指定的運動員信息運動員編號國籍成績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指向結構體變量swim數組*/for(k=0;k<M;k++,p1++)

prt(p1);

/*打印一個運動員的信息*/printf("-------------\n\n");

sort(swim,M);

/*進行排序處理*/

p1=swim;/*p1重新指向結構體變量swim數組*/for(k=0;k<M;k++,p1++)

prt(p1);

/*打印一個運動員的信息*/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;}選擇排序法小結為什么要引用結構體類型,其特點是什么?如何定義結構體類型?如何聲明結構體變量?

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論