C語言課件-結(jié)構(gòu)體與共用體_第1頁(yè)
C語言課件-結(jié)構(gòu)體與共用體_第2頁(yè)
C語言課件-結(jié)構(gòu)體與共用體_第3頁(yè)
C語言課件-結(jié)構(gòu)體與共用體_第4頁(yè)
C語言課件-結(jié)構(gòu)體與共用體_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論