版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Ch9結(jié)構(gòu)體與共用體結(jié)構(gòu)體共用體類型定義typedefNextChapter書目自動(dòng)檢索系統(tǒng)學(xué)生信息管理系統(tǒng)結(jié)構(gòu)體登錄號(hào):書名:作者名:分類號(hào):出版單位:出版時(shí)間:價(jià)格:書目卡片學(xué)號(hào):姓名:年齡:性別:住址:電話:平均分:學(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)識(shí)符成員名;類型標(biāo)識(shí)符成員名;
…………….};成員類型可以是基本型或構(gòu)造型struct是關(guān)鍵字,不能省略合法標(biāo)識(shí)符可缺省:無名結(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)體變量分配存儲(chǔ)空間大?。簊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)體成員名與程序中變量名可相同,不會(huì)混淆結(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)先級(jí):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í)逐級(jí)引用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)先級(jí):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ù)成績(jī)處理定義一個(gè)結(jié)構(gòu)體類型,從鍵盤輸入20個(gè)學(xué)生的學(xué)號(hào),姓名和數(shù)學(xué)、英語、計(jì)算機(jī)成績(jī),要求:(1)計(jì)算并輸出每一個(gè)學(xué)生三門課的平均成績(jī)。(2)計(jì)算并輸出每門課程的平均成績(jī)。(3)查找并輸出平均成績(jī)最高的學(xué)生的記錄。(4)按平均成績(jī)從高到低輸出學(xué)生的成績(jī)單(學(xué)號(hào)、姓名和數(shù)學(xué)、英語、計(jì)算機(jī)成績(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í)處理簡(jiǎn)單字符置換
為已有類型命名
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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度專利申請(qǐng)合同格式:專利申請(qǐng)項(xiàng)目知識(shí)產(chǎn)權(quán)保護(hù)協(xié)議2篇
- 二零二五年度家具租賃經(jīng)營(yíng)合同樣本3篇
- 正丁基鋰建設(shè)項(xiàng)目可行性研究報(bào)告申請(qǐng)立項(xiàng)備案
- 甘肅省天水市(2024年-2025年小學(xué)六年級(jí)語文)部編版期末考試((上下)學(xué)期)試卷及答案
- 2025年度O2O在線教育平臺(tái)與實(shí)體學(xué)校合作協(xié)議3篇
- 機(jī)場(chǎng)改造項(xiàng)目初步設(shè)計(jì)
- 二零二五年度房屋抵押貸款續(xù)貸合同范本封面2篇
- 二零二五年度多子女共同撫養(yǎng)離婚協(xié)議模板2篇
- 陜西省年儲(chǔ)藏銷售一萬噸果品項(xiàng)目申請(qǐng)報(bào)告
- taft波完整版可編輯
- 2023-2024學(xué)年浙江省富陽市小學(xué)數(shù)學(xué)五年級(jí)上冊(cè)期末通關(guān)試題
- TTAF 092-2022 移動(dòng)終端融合快速充電測(cè)試方法
- GB/T 9410-2008移動(dòng)通信天線通用技術(shù)規(guī)范
- GB/T 5343.2-2007可轉(zhuǎn)位車刀及刀夾第2部分:可轉(zhuǎn)位車刀型式尺寸和技術(shù)條件
- GB/T 32285-2015熱軋H型鋼樁
- GB/T 13772.2-1992機(jī)織物中紗線抗滑移性測(cè)定方法模擬縫合法
- SVG運(yùn)行與維護(hù)課件
- 企業(yè)大學(xué)商學(xué)院建設(shè)方案
- 部編人教版 六年級(jí)下冊(cè)道德與法治課堂作業(yè)(含答案)
- 幼兒園大班數(shù)學(xué):《長(zhǎng)頸鹿的水果店》 課件
評(píng)論
0/150
提交評(píng)論