結(jié)構(gòu)體共用體和用戶定義類型_第1頁
結(jié)構(gòu)體共用體和用戶定義類型_第2頁
結(jié)構(gòu)體共用體和用戶定義類型_第3頁
結(jié)構(gòu)體共用體和用戶定義類型_第4頁
結(jié)構(gòu)體共用體和用戶定義類型_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

結(jié)構(gòu)體共用體和用戶定義類型第一頁,共二十八頁,2022年,8月28日結(jié)構(gòu)體類型結(jié)構(gòu)體類型的定義形式:struct結(jié)構(gòu)體標(biāo)識名{類型名1結(jié)構(gòu)體成員名表1;類型名2結(jié)構(gòu)體成員名表2;};structdate{intyear,month,day;};structstudent{charname[12];charsex;structdatebirthday;floatsc[4];};結(jié)構(gòu)體類型占用字節(jié)數(shù)是成員項(xiàng)所占字節(jié)數(shù)的總和。第二頁,共二十八頁,2022年,8月28日結(jié)構(gòu)體類型變量的定義、賦值、使用結(jié)構(gòu)體類型的變量的定義(3種形式)1.緊跟在結(jié)構(gòu)體類型說明之后進(jìn)行定義。structstudent{charname[12];charsex;structdatebirthday;floatsc[4];}s1,s2;2.結(jié)構(gòu)體類型名可以省略。3.先說明一個結(jié)構(gòu)體類型,再單獨(dú)進(jìn)行變量定義。structstudent{charname[12];charsex;structdatebirthday;floatsc[4];};structstudents1,s2;第三頁,共二十八頁,2022年,8月28日結(jié)構(gòu)體變量的賦值和使用

structstudent{charname[12];charsex;structdatebirthday;floatsc[4];}s1={“LiMing”,’M’,1962,5,10,88,76,85.5,90};賦值時,依次給變量中的各個成員均賦值。printf(“%s,%c,%d,%d,%d,%f,%f,%f,%f”,,s1.sx,s1.birthday.year,s1.birthday.month,s1.birthday.day,s1.sc[0],s1.sc[1],s1.sc[2],s1.sc[3]);結(jié)構(gòu)體變量的引用:結(jié)構(gòu)體變量名.成員名例1.structperson{intID;charname[12];}p;請將scanf("%d",

);語句補(bǔ)充完整,使其能夠?yàn)榻Y(jié)構(gòu)體變量p的成員ID正確讀入數(shù)據(jù)。(2009年9月二級C真題)

&p.ID第四頁,共二十八頁,2022年,8月28日例2.下面結(jié)構(gòu)體的定義語句中,錯誤的是()。(2009年9月二級C真題)A)structord{intx;inty;intz;};structorda;B)structord{intx;inty;intz;}structorda;C)structord{intx;inty;intz;}a;D)struct{intx;inty;intz;}a;例3.有以下程序#include<stdio.h>main(){structSTU{charname[9];charsex;doublescore[2];};structSTUa={"Zhao",'m',85.0,90.0},b={"Qian",'f',95.0,92.0);b=a;printf("%s,%c,%2.0f,%2.0f\n",,b.sex,b.score[0],b.score[1]);}程序的運(yùn)行結(jié)果是()。(2008年9月二級C真題)A)Qian,f,95,92B)Qian,m,85,90C)Zhao,f,95,92D)Zhao,m,85,90BD第五頁,共二十八頁,2022年,8月28日例4.以下程序的運(yùn)行結(jié)果是()main(){structEXAMPLE{struct{intx;inty;}in;inta;intb;}e;e.a=1;e.b=2;e.in.x=e.a*e.b;e.in.y=e.a+e.b;printf(“%d,%d”,e.in.x,e.in.y);}2,3第六頁,共二十八頁,2022年,8月28日結(jié)構(gòu)體指針結(jié)構(gòu)體指針的定義structstudent*p,s;p=&s;p->name,p->sex;例1.若有以下說明語句:structstudent{intage;intnum;}std,*p;p=&std;則以下對結(jié)構(gòu)體變量std中成員age的引用方式不正確的是()A.std.ageB.p->ageC.(*p).ageD.*p.ageD第七頁,共二十八頁,2022年,8月28日例2.設(shè)有如下定義:structsk{intn;floatx;}data,*p;若要使p指向data中的n域,則正確的賦值語句是()A.p=&data.nB.*p=data.nC.p=(structsk*)&data.nD.p=(structsk*)data.nC第八頁,共二十八頁,2022年,8月28日結(jié)構(gòu)體數(shù)組的定義、賦值、使用結(jié)構(gòu)體數(shù)組的定義(3種形式)

1.緊跟在結(jié)構(gòu)體類型說明之后進(jìn)行定義。structstudent{charname[12];charsex;structdatebirthday;floatsc[4];}s[3];2.結(jié)構(gòu)體類型名可以省略。第九頁,共二十八頁,2022年,8月28日3.先說明一個結(jié)構(gòu)體類型,再單獨(dú)進(jìn)行變量定義。

structstudent{charname[12];charsex;structdatebirthday;floatsc[4];};structstudents1[2]={{“LiMing”,’M’,1962,5,10,88,76,85.5,90},{“WangMei”,’F’,1980,5,3,42,51,23,56}};結(jié)構(gòu)體數(shù)組的引用s[0].name,s[0].sex,s[0].birthday.months[1].name,s[1].sex,s[1].birthday.month第十頁,共二十八頁,2022年,8月28日例1.根據(jù)下面的定義,能打印出字幕M的語句是()structperson{charname[9];intage;};structpersonclass[10]={“John”,17,”Paul”,19,”Mary”,18,”adam”,16};A.printf(“%c\n”,class[3].name);B.printf(“%c\n”,class[3].name[1]);C.printf(“%c\n”,class[2].name[1]);D.printf(“%c\n”,class[2].name[0]);D第十一頁,共二十八頁,2022年,8月28日例1.已定義且初始化好結(jié)構(gòu)體數(shù)組如上,計(jì)算平均成績,并輸出不及格學(xué)生的姓名。voidmain(){inti;floatave,sum=0;printf("不及格學(xué)生有:\n");for(i=0;i<5;i++){sum+=s[i].score;if(s[i].score<60)printf("%s,",s[i].name);}ave=sum/5;printf("\n平均值為%f\n",ave);}

第十二頁,共二十八頁,2022年,8月28日結(jié)構(gòu)體數(shù)組和指針例1.若有以下定義和語句:structstudent{intage;intnum;};structstudentstu[3]={{1001,20},{1002,19},{1003,21}};main(){structstudent*p;p=stu;}則以下不正確的引用形式是()A.(p++)->numB.p++C.(*p).numD.p=&stu.ageD第十三頁,共二十八頁,2022年,8月28日例2.設(shè)有以下定義和語句,以下引用形式不合法的是()structs{inti1;structs*i2,*i0;};staticstructa[3]={2,&a[1],’\0’,4,&a[2],&a[0],6,’\0’,&a[1]},*ptr;ptr=a;ptr->i1++B.*ptr->i2C.++ptr->i0D.*ptr->i1例3.設(shè)有如下定義:structREC{intnum;charflag;charadr[20];}rec[10],*pr=rec;下面各輸入語句中錯誤的是()A.scanf(“%s”,&rec.adr);B.scanf(“%d”,&(*pr).num);C.scanf(“%c”,&(pr->flag));D.scanf(“%c”,&rec[1].flag);}DA第十四頁,共二十八頁,2022年,8月28日例4.以下程序的輸出結(jié)果是()structstu{intx;int*y;}*p;intdt[4]={10,20,30,40};structstua[4]={50,&da[0],60,&dt[1],70,&dat[2],80,&dt[3]};main(){p=a;printf(“%d,”,++p->x);printf(“%d,”(++p)->x);printf(“%d\n”,++(*p->y));}A.10,20,20B.50,60,21C.51,60,21D.60,70,31C第十五頁,共二十八頁,2022年,8月28日例5.以下程序用來按學(xué)生姓名查詢其排名和平均成績。查詢可連續(xù)進(jìn)行,直到輸入0時結(jié)束。請?zhí)羁铡?defineNUM4structstudent{intrank;char*name;floatscore;};______stu[]={3,”Tom”,89.3,4,”Mary”,78.2,1,”Jack”,95.1,2,”Jim”,90.6};main(){charstr[10];inti;do{scanf(“%s”,str);for(i=0;i<NUM;i++)if(_____){printf(“name:%8s\n”,stu[i].name);printf(“rank:%3s\n”,stu[i].rank);printf(“average:%5.1f\n”,stu[i].score);________;}if(i>=NUM)printf(“Notfoune\n”);}while(strcmp(str,”0”)!=0);}structstudentstrcmp(str,stu[i].name)==0break;第十六頁,共二十八頁,2022年,8月28日例6.設(shè)有3人的姓名和年齡存在結(jié)構(gòu)數(shù)組中,以下程序輸出3人中年齡居中者的姓名和年齡。請?zhí)羁?。staticstructman{charname[20];intage;}person[]={“l(fā)i-ming”,18,”wang-hua”,19,”zhang-ping”,20};main(){inti,j,max,min;max=min=person[0].age;for(i=1;i<3;i++)if(person[i].age>max)_______;elseif(person[i].age<min)________;for(i=0;i<3;i++)if(person[i].age!=max_____if(person[i].age!=min){printf(“%s%s\n”,person[i].name,person[i].age);break;}}max=person[i].agemin=person[i].age&&第十七頁,共二十八頁,2022年,8月28日結(jié)構(gòu)體普通變量做函數(shù)參數(shù)結(jié)構(gòu)體普通變量做實(shí)參時,形參也應(yīng)是一個結(jié)構(gòu)體變量,傳遞時將實(shí)參的值傳遞給形參,實(shí)參和形參占用不同的內(nèi)存空間。例.以下程序的運(yùn)行結(jié)果是()structn{intx;charc;};voidfunc(structn);main(){structna={10,’x’};func(a);printf(“%d,%c”,a.x,a.c);}func(structnb){b.x=20;b.c=‘y’;}10,x第十八頁,共二十八頁,2022年,8月28日結(jié)構(gòu)體指針變量做實(shí)參例1.以下程序的輸出結(jié)果是()structabc{charc;floatv;};voidfun1(structabcb){b.c=‘A’;b.v=80.7;}voidfun2(structabc*b){(*b).c=‘C’;(*b).v=92.5;}voidmain(){structabca={‘B’,98.5};fun1(a);printf(“%c,%4.1f\n”,a.c,a.v);fun2(&a);printf(“%c,%4.1f\n”,a.c,a.v);}B,98.5C,92.5第十九頁,共二十八頁,2022年,8月28日例2.有下列程序:structS{intn;inta[20];};voidf(structS*p){inti,j,t;for(i=0;i<p->n-1;i++)for(j=i+1;j<p->n;j++)if(p->a[i]>p->a[j]){t=p->a[i];p->a[i]=p->a[j];p->a[j]=t;}}main(){inti;structSs={10,{2,3,l,6,8,7,5,4,10,9}};f(&s);for(i=0;i<s.n;i++)printf("%d,",s.a[i]);}程序運(yùn)行后的輸出結(jié)果是()。(2007年4月二級C真題)A)1,2,3,4,5,6,7,8,9,10,B)10,9,8,7,6,5,4,3,2,1,C)2,3,1,6,8,7,5,4,10,9,D)10,9,8,7,6,1,2,3,4,5,A第二十頁,共二十八頁,2022年,8月28日結(jié)構(gòu)體數(shù)組做參數(shù)結(jié)構(gòu)體數(shù)組做實(shí)參,形參可以是結(jié)構(gòu)體數(shù)組或者結(jié)構(gòu)體指針變量。例1.函數(shù)stdave的功能是:計(jì)算N個學(xué)生M門課的平均分,請?zhí)羁铡?defineM5#defineN30structstudent{intnum;charname[10];floatscore[M];floatave;};voidstdave(structstudents[],intn){inti,j;floatsum;for(i=0;i<n;i++){sum=______;for(j=0;j<M;j++)sum=sum+______;________=sum/M;}}voidmain(){structstudentpers[N];stdave(pers,N);}0pers[i].score[j]pers[i].ave第二十一頁,共二十八頁,2022年,8月28日例2:有以下程序的輸出結(jié)果是:structSTU{charname[10];intnum;floatTotalScore;};voidf(structSTU*p){structSTUs[2]={{“SunDan”,20044,550},{“Penghua”,20045,537}},*q=s;++p;++q;*p=*q;}main(){structSTUs[3]={{“YangSan”,20041,703},{“LiSiGuo”,20042,580}};f(s);printf(“%s%d%3.0f\n”,s[1].name,s[1].num,s[1].TotalScore);}第二十二頁,共二十八頁,2022年,8月28日用typedef定義類型typedefintINTEGER;typedeffloatREAL;聲明一個新的類型名的方法是:(1)先按定義變量的方法寫出定義體(如inti;)(2)將變量名換成新類型名。(3)在最前面加typedef。(4)用新類型名去定義變量。例如:structabc{charc;floatv;}st;等價(jià)于:typedefstructabc{charc;floatv;}S;等價(jià)于:typedefstruct{charc;floatv;}S;structabcs1;等價(jià)于Ss1;第二十三頁,共二十八頁,2022年,8月28日例2.以下對結(jié)構(gòu)體變量st的定義中,不正確的是()A.struct{charc;inta;}st;B.struct{charc;inta;}TT;structTTst;C.typedefstruct{charc;inta;}TT;TTst;D.#defineTTstructTT{charc;inta;}st;例3.設(shè)有以下說明語句:Typedefstruct{intn;charch[8];}PER;則下面敘述中正確的是()A.PER是結(jié)構(gòu)體變量名B.PER是結(jié)構(gòu)體類型名C.Typedefstruct是結(jié)構(gòu)體類型D.struct是結(jié)構(gòu)體類型名BB第二十四頁,共二十八頁,2022年,8月28日例3.某學(xué)生的記錄由學(xué)號、8門課程成績和平均分組成,學(xué)號和8門課程的成績已在主函數(shù)中給出,請編寫函數(shù)fun,其功能是:求出該學(xué)生的平均分,并放入記錄的ave成員中。#defineN8typedefstruct{charnum[10];doubles[N];doubleave;}STREC;voidfun(STREC*a){}voidmain(){STRECs={“GA005”,85.5,7

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論