




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Ch9結(jié)構(gòu)體與共用體結(jié)構(gòu)體共用體類型定義typedefNextChapter書目自動(dòng)檢索系統(tǒng)學(xué)生信息管理系統(tǒng)結(jié)構(gòu)體登錄號:書名:作者名:分類號:出版單位:出版時(shí)間:價(jià)格:書目卡片學(xué)號:姓名:年齡:性別:住址:電話:平均分:學(xué)生信息邏輯上相關(guān)數(shù)據(jù)類型不同結(jié)構(gòu)體是一種構(gòu)造數(shù)據(jù)類型用途:把邏輯相關(guān)且數(shù)據(jù)類型不同的數(shù)據(jù)組合成一個(gè)整體
用戶自定義數(shù)據(jù)類型便于組織復(fù)雜數(shù)據(jù)提高可讀性,便于維護(hù)結(jié)構(gòu)體類型的定義struct
[結(jié)構(gòu)體名]{
類型標(biāo)識符成員名;類型標(biāo)識符成員名;
…………….};成員類型可以是基本型或構(gòu)造型struct是關(guān)鍵字,不能省略合法標(biāo)識符可缺省:無名結(jié)構(gòu)體結(jié)構(gòu)體類型定義描述結(jié)構(gòu)的組織形式struct
student{intnum;charname[20];chargender;intage;floatscore;charaddr[30];};namenumgenderagescoreaddr2字節(jié)2字節(jié)20字節(jié)1字節(jié)4字節(jié)30字節(jié)……..定義了一種新的數(shù)據(jù)類型描述了結(jié)構(gòu)的組織形式?jīng)]有定義任何變量不分配內(nèi)存結(jié)構(gòu)體類型的作用域結(jié)構(gòu)體類型的定義struct
student{intnum;charname[20];chargender;intage;floatscore;charaddr[30];};structstudent
stu1,stu2;#defineSTUDENTstructstudentSTUDENT{intnum;charname[20];char
gender;intage;floatscore;charaddr[30];};STUDENT
stu1,stu2;為結(jié)構(gòu)體變量分配存儲空間大?。簊izeof(struct
student)結(jié)構(gòu)體變量的定義先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量結(jié)構(gòu)體變量的定義定義結(jié)構(gòu)體類型同時(shí)定義結(jié)構(gòu)體變量struct
student{intnum;charname[20];chargender;intage;floatscore;charaddr[30];}stu1,stu2;結(jié)構(gòu)體變量的定義直接定義結(jié)構(gòu)體變量struct
{intnum;charname[20];chargender;intage;floatscore;charaddr[30];}stu1,stu2;用無名結(jié)構(gòu)體類型直接定義變量,只能一次結(jié)構(gòu)體變量的定義說明結(jié)構(gòu)體類型與結(jié)構(gòu)體變量概念不同類型:不分配內(nèi)存;變量:分配內(nèi)存類型:不能賦值、存取、運(yùn)算;
變量:可以結(jié)構(gòu)體類型可嵌套結(jié)構(gòu)體成員名與程序中變量名可相同,不會混淆結(jié)構(gòu)體類型及變量的作用域與生存期structdate{intmonth;intday;intyear;};structstudent{intnum;charname[20];
structdatebirthday;}stu;numnamebirthdaymonthdayyearstructstudent{intnum;charname[20];
structdate{intmonth;intday;intyear;}birthday;}stu;numnamebirthdaymonthdayyear結(jié)構(gòu)體變量的引用引用規(guī)則結(jié)構(gòu)體變量不能整體引用,只能引用其變量成員成員(分量)運(yùn)算符優(yōu)先級:1結(jié)合性:從左向右引用方式:結(jié)構(gòu)體變量名.成員名structstudent{intnum;charname[20];chargender;intage;floatscore;charaddr[30];}stu1,stu2;stu1.num=10;stu1.score=85.5;stu1.score+=stu2.score;
stu1.age++;可以將一個(gè)結(jié)構(gòu)體變量賦值給另一個(gè)結(jié)構(gòu)體變量stu2=stu1;()printf(“%d,%s,%c,%d,%f,%s\n”,stu1);()stu1={101,“WanLin”,‘M’,19,87.5,“DaLian”};()結(jié)構(gòu)體嵌套時(shí)逐級引用structstudent{intnum;charname[20];structdate{intmonth;intday;intyear;}birthday;}stu1,stu2;numnamebirthdaymonthdayyearstu1.birthday.month=12;struct
student{intnum;charname[20];chargender;intage;charaddr[30];};structstudent
stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};結(jié)構(gòu)體變量的初始化struct
student{intnum;charname[20];chargender;intage;charaddr[30];}stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};struct{intnum;charname[20];chargender;intage;charaddr[30];}stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};結(jié)構(gòu)體數(shù)組的定義struct
student{intnum;charname[20];charsex;intage;};struct
student
stu[2];struct
student{intnum;charname[20];charsex;intage;}stu[2];struct{intnum;charname[20];chargender;intage;}stu[2];numnamegenderagenumnamegenderagestu[0]stu[1]結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組初始化struct{intnum;charname[20];charsex;intage;}stu[]={{100,“WangLin”,‘M’,20},
{101,“LiGang”,‘M’,19},
{110,“LiuYan”,‘F’,19}};
順序初始化:struct
student{intnum;charname[20];charsex;intage;};struct
student
stu[]={100,“WangLin”,‘M’,20,101,“LiGang”,‘M’,19,110,“LiuYan”,‘F’,19};struct
student{intnum;charname[20];charsex;intage;}stu[]={{100,“WangLin”,‘M’,20},
{101,“LiGang”,‘M’,19},
{110,“LiuYan”,‘F’,19}};
分行初始化:struct
student{intnum;charname[20];charsex;intage;};struct
student
stu[]={{100,“WangLin”,‘M’,20},
{101,“LiGang”,‘M’,19},
{110,“LiuYan”,‘F’,19}};全部初始化時(shí)維數(shù)可省結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組引用結(jié)構(gòu)體數(shù)組引用方式:結(jié)構(gòu)體數(shù)組名[下標(biāo)].成員名struct
student{intnum;charname[20];charsex;intage;}stu[3];stu[1].age++;strcpy(stu[0].name,"ZhaoDa");例統(tǒng)計(jì)后選人選票voidmain(){inti,j;charleader_name[20];for(i=1;i<=10;i++){scanf("%s",leader_name);for(j=0;j<3;j++) if(strcmp(leader_name,leader[j].name)==0)
leader[j].count++;}for(i=0;i<3;i++)printf("%5s:%d\n",leader[i].name,leader[i].count);}namecountLiZhangWang000structcandidate{charname[20];intcount;}leader[3]={"Li",0,"Zhang",0,"Wang",0};指向結(jié)構(gòu)體變量的指針定義形式:struct
結(jié)構(gòu)體名
*結(jié)構(gòu)體指針名;例struct
student*p;存放結(jié)構(gòu)體變量的起始地址numnamesexagestupstruct
student{intnum;charname[20];charsex;intage;}stu;struct
student
*p=&stu;結(jié)構(gòu)體與指針p指向結(jié)構(gòu)體變量的指針使用結(jié)構(gòu)體指針變量引用成員形式結(jié)構(gòu)體指針名->成員名結(jié)構(gòu)體變量名.成員名指向運(yùn)算符優(yōu)先級:1結(jié)合方向:從左向右intn;int*p=&n;*p=10;n=10struct
student
stu1;struct
student
*p=&stu1;stu1.num=101;
struct
student{longintnum;charname[20];charsex;floatscore;}stu,*p;p=&stu;stu.num=89101;strcpy(stu.name,"LiLin");p->sex='M';p->score=89.5;(*p).nump->namestu.sex結(jié)構(gòu)體與指針(*結(jié)構(gòu)體指針名).成員名(*p).num=101指向結(jié)構(gòu)體數(shù)組的指針structstudent{intnum;charname[20];chargender;intage;}stu[3]={{10101,"LiLin",'M',18},{10102,"ZhangFun",'M',19}, {10104,"WangMin",'F',20}};voidmain(){struct
student
*p;for(;;)
printf("%d%s%c%d\n",p->num,p->name,p->gender,p->age);}pnumnamegenderagestu[0]stu[1]stu[2]p結(jié)構(gòu)體與指針p=stup<stu+3p++stu+3pstu用指向結(jié)構(gòu)體的指針作函數(shù)參數(shù)用結(jié)構(gòu)體變量的成員作參數(shù)----值傳遞用結(jié)構(gòu)體變量作參數(shù)----多值傳遞,效率低用指向結(jié)構(gòu)體變量或數(shù)組的指針作參數(shù)----地址傳遞結(jié)構(gòu)體與指針struct
data{inta,b,c;};voidmain(){voidfunc(structdata);
struct
data
arg;
arg.a=27;arg.b=3;arg.c=arg.a+arg.b;printf("%d%d%d\n",arg.a,arg.b,arg.c);
func(arg);printf("%d%d%d\n",arg.a,arg.b,arg.c);}voidfunc(struct
data
parm){printf("%d%d%d\n",parm.a,parm.b,parm.c);
parm.a=18;parm.b=5;parm.c=parm.a*parm.b;printf("%d%d%d\n",parm.a,parm.b,parm.c);}arga:27b:3c:30(main)(func)parma:27b:3c:30copyarga:27b:3c:30(main)18590例用結(jié)構(gòu)體變量作函數(shù)參數(shù)例用結(jié)構(gòu)體變量作函數(shù)參數(shù)struct
data{inta,b,c;};voidmain(){voidfunc(structdata);
struct
data
arg;
arg.a=27;arg.b=3;arg.c=arg.a+arg.b;printf("%d%d%d\n",arg.a,arg.b,arg.c);
func(arg);printf("%d%d%d\n",arg.a,arg.b,arg.c);}voidfunc(struct
data
parm){printf("%d%d%d\n",parm.a,parm.b,parm.c);
parm.a=18;parm.b=5;parm.c=parm.a*parm.b;printf("%d%d%d\n",parm.a,parm.b,parm.c);}arga:27b:3c:30(main)多值傳遞struct
data{inta,b,c;};voidmain(){voidfunc(structdata*);
struct
data
arg;
arg.a=27;arg.b=3;arg.c=arg.a+arg.b;printf("%d%d%d\n",arg.a,arg.b,arg.c);
func(&arg);printf("%d%d%d\n",arg.a,arg.b,arg.c);}voidfunc(struct
data
*parm){printf("%d%d%d\n",parm->a,parm->b,parm->c);
parm->a=18;parm->b=5;parm->c=parm->a*parm->b;printf("%d%d%d\n",parm->a,parm->b,parm->c);}arga:27b:3c:30(main)arga:27b:3c:30(main)(func)parm****18590例用結(jié)構(gòu)體指針變量作函數(shù)參數(shù)struct
data{inta,b,c;};voidmain(){voidfunc(structdata*);
struct
data
arg;
arg.a=27;arg.b=3;arg.c=arg.a+arg.b;printf("%d%d%d\n",arg.a,arg.b,arg.c);
func(&arg);printf("%d%d%d\n",arg.a,arg.b,arg.c);}voidfunc(struct
data
*parm){printf("%d%d%d\n",parm->a,parm->b,parm->c);
parm->a=18;parm->b=5;parm->c=parm->a*parm->b;printf("%d%d%d\n",parm->a,parm->b,parm->c);}arga:18b:5c:90(main)地址傳遞例用結(jié)構(gòu)體指針變量作函數(shù)參數(shù)成績處理定義一個(gè)結(jié)構(gòu)體類型,從鍵盤輸入20個(gè)學(xué)生的學(xué)號,姓名和數(shù)學(xué)、英語、計(jì)算機(jī)成績,要求:(1)計(jì)算并輸出每一個(gè)學(xué)生三門課的平均成績。(2)計(jì)算并輸出每門課程的平均成績。(3)查找并輸出平均成績最高的學(xué)生的記錄。(4)按平均成績從高到低輸出學(xué)生的成績單(學(xué)號、姓名和數(shù)學(xué)、英語、計(jì)算機(jī)成績和平均成績)struct
student{longnum;charname[20];floatscore[M];floataverage;};#defineN4#defineM3voidmain(){inti,j;structstudents[N];for(i=0;i<N;i++){scanf("%ld%s",&s[i].num,s[i].name);for(j=0;j<M;j++) scanf("%f",&s[i].score[j]);}calstuave(s);calcourseave(s);find(s);sort(s);output(s);}voidcalstuave(structstudents[]){inti,j;for(i=0;i<N;i++){s[i].average=0;for(j=0;j<M;j++)s[i].average+=s[i].score[j];s[i].average/=M;}}voidcalcourseave(structstudent*s){floatave[M];inti,j;for(j=0;j<M;j++){ave[j]=0;for(i=0;i<N;i++)
ave[j]+=s[i].score[j];
ave[j]/=N;}printf("MathAverage:%.2f\nEnglishAverage:%.2f\nComputerAverage:%.2f\n",ave[0],ave[1],ave[2]);}voidfind(structstudent*s){inti,max=0;for(i=1;i<N;i++){ if(s[i].average>s[max].average)
max=i;}puts("Thehighestaveragestudentis:\n");printf("%ld%s%.2f%.2f%.2f%.2f\n",s[max].num,s[max].name,s[max].score[0],s[max].score[1],s[max].score[2],s[max].average);}voidsort(structstudent*s){inti,j,k;structstudentt;for(i=0;i<N-1;i++){k=i;for(j=i+1;j<N;j++)if(s[j].average>s[k].average)
k=j;if(i!=k){ t=s[i];s[i]=s[k];s[k]=t;}}}voidsort(structstudent*s){inti,j;structstudentt;for(i=0;i<N-1;i++){for(j=0;j<N-i-1;j++)if(s[j].average<s[j+1].average){t=s[j];s[j]=s[j+1];s[j+1]=t;}}}功能:用自定義名字為已有數(shù)據(jù)類型命名類型定義形式:typedef
type
name;例typedef
int
INTEGER;類型定義語句關(guān)鍵字已有數(shù)據(jù)類型名用戶定義的類型名例
typedef
float
REAL;類型定義后,與已有類型一樣使用例INTEGERa,b,c;
REALf1,f2;
inta,b,c;floatf1,f2;說明:typedef
沒有創(chuàng)造新數(shù)據(jù)類型typedef
是定義類型,不是定義變量typedef
與define
不同
define
typedef預(yù)編譯時(shí)處理編譯時(shí)處理簡單字符置換
為已有類型命名
typedef類型定義typedef定義類型步驟按定義變量方法先寫出定義體如inti;將變量名換成新類型名如int
INTEGER;最前面加typedef
如
typedef
int
INTEGER;
用新類型名定義變量如INTEGERi,j;
例定義含有100個(gè)整型元素的一維數(shù)組類型
inta[100];
int
ARRAY[100];
typedef
int
ARRAY[100];
ARRAYa,b,c;typedef類型定義inta[100],b[100],c[100];typedef定義類型步驟按定義變量方法先寫出定義體如inti;將變量名換成新類型名如
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 液壓與液力技術(shù)在地質(zhì)勘探設(shè)備中的應(yīng)用考核試卷
- 派遣員工關(guān)系管理考核試卷
- 租賃設(shè)備選型與配置考核試卷
- 紡紗工藝對紗線柔軟性的調(diào)控考核試卷
- 上海高三語文各區(qū)作文題
- 毛皮制品的工傷保險(xiǎn)制度考核試卷
- 毛皮制品加工車間布局設(shè)計(jì)考核試卷
- 有機(jī)化學(xué)原料的綠色化學(xué)標(biāo)準(zhǔn)制定考核試卷
- 電視設(shè)備智能安全防范技術(shù)考核試卷
- 胰島素皮下注射團(tuán)體標(biāo)準(zhǔn)解讀
- 藏毛竇護(hù)理業(yè)務(wù)查房課件
- 普通高等學(xué)校軍事理論教程
- 水土保持-新時(shí)代水土保持重點(diǎn)工作課件
- 礦井有計(jì)劃停電停風(fēng)通風(fēng)安全技術(shù)措施
- 醫(yī)院評審員工應(yīng)知應(yīng)會手冊2
- 新《用字母表示數(shù)》說課
- 河南省礦山儲量動(dòng)態(tài)檢測技術(shù)指南
- 光學(xué)系統(tǒng)的像質(zhì)評價(jià)和像差公差
- :AHA心肺復(fù)蘇和心血管急救指南(完整版)
- 垃圾焚燒爐渣綜合利用方案
- 12J1 工程做法 天津市建筑標(biāo)準(zhǔn)設(shè)計(jì)圖集(2012版)
評論
0/150
提交評論