![[課件資料]第8章結(jié)構(gòu)體與共用體_第1頁](http://file.renrendoc.com/FileRoot1/2019-11/24/037ffb5a-5290-4cda-8534-3ae6922d008f/037ffb5a-5290-4cda-8534-3ae6922d008f1.gif)
![[課件資料]第8章結(jié)構(gòu)體與共用體_第2頁](http://file.renrendoc.com/FileRoot1/2019-11/24/037ffb5a-5290-4cda-8534-3ae6922d008f/037ffb5a-5290-4cda-8534-3ae6922d008f2.gif)
![[課件資料]第8章結(jié)構(gòu)體與共用體_第3頁](http://file.renrendoc.com/FileRoot1/2019-11/24/037ffb5a-5290-4cda-8534-3ae6922d008f/037ffb5a-5290-4cda-8534-3ae6922d008f3.gif)
![[課件資料]第8章結(jié)構(gòu)體與共用體_第4頁](http://file.renrendoc.com/FileRoot1/2019-11/24/037ffb5a-5290-4cda-8534-3ae6922d008f/037ffb5a-5290-4cda-8534-3ae6922d008f4.gif)
![[課件資料]第8章結(jié)構(gòu)體與共用體_第5頁](http://file.renrendoc.com/FileRoot1/2019-11/24/037ffb5a-5290-4cda-8534-3ae6922d008f/037ffb5a-5290-4cda-8534-3ae6922d008f5.gif)
已閱讀5頁,還剩95頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1,第8章結(jié)構(gòu)體與共用體,2,教學(xué)目標(biāo),理解結(jié)構(gòu)體及結(jié)構(gòu)體類型的定義掌握結(jié)構(gòu)體成員的引用掌握結(jié)構(gòu)體數(shù)組的聲明和使用方法了解動(dòng)態(tài)鏈?zhǔn)浇Y(jié)構(gòu)鏈表的基本操作掌握枚舉類型了解共用體數(shù)據(jù)類型和基本的位運(yùn)算,8.1問題引導(dǎo),變量(很孤獨(dú))數(shù)組(挨著住,但必須類型一樣)對于類型不同的相關(guān)聯(lián)的數(shù)據(jù)還想挨著住,如何處理?,3,身份證的數(shù)據(jù)成分:姓名、性別、民族、出生日期、住址、身份證號碼、照片等,4,C語言引入一種能集中不同數(shù)據(jù)類型于一體的構(gòu)造類型結(jié)構(gòu)體類型。結(jié)構(gòu)體類型就是將不同數(shù)據(jù)類型的成員組合在一起,因此是不同數(shù)據(jù)類型成員的集合。,8.2結(jié)構(gòu)體的聲明和結(jié)構(gòu)體變量定義,導(dǎo)引InforTable(人員信息)的屬性學(xué)生ScoreTable(成績表)的屬性,5,8.2.1結(jié)構(gòu)體的聲明,用C語言提供的構(gòu)造類型的型描述,6,成績表:structScoreTablechargrade20;longnumber;charname20;floatkc1;floatkc2;,人員信息登記表:structInfoTablecharname20;charsex;charjob40;intage;longnumber;,結(jié)構(gòu)體類型的定義形式:struct結(jié)構(gòu)體名成員項(xiàng)表列;,7,8.2.2結(jié)構(gòu)體變量的聲明,結(jié)構(gòu)體類型變量的定義的三種形式,8,先定義結(jié)構(gòu)體數(shù)據(jù)類型,再定義變量structstudentcharname20;charsex;longnum;floatscore3;/*定義結(jié)構(gòu)體類型變量*/structstudentstu1,stu2;,9,定義結(jié)構(gòu)體類型同時(shí)定義變量structstudentcharname20;charsex;longnum;floatscore3;stu1,stu2;/*定義結(jié)構(gòu)體類型變量*/,10,通過定義無名結(jié)構(gòu)體數(shù)據(jù)類型定義變量structcharname20;charsex;longnum;floatscore3;stu1,stu2;/*定義該結(jié)構(gòu)體類型變量*/,結(jié)構(gòu)體變量stu1的結(jié)構(gòu)如圖:,11,printf(“%d”,sizeof(stu1);,結(jié)構(gòu)體類型的嵌套定義(兩種形式),12,structstudentcharname20;charsex;longnum;structdateintyear;intmoth;intday;birthday;,structdateintyear;intmoth;intday;structstudentcharname20;charsex;longnum;structdatebirthday;,8.2.3結(jié)構(gòu)體成員的引用,成員訪問:域訪問運(yùn)算符“.”,結(jié)構(gòu)體變量是通過運(yùn)算符訪問結(jié)構(gòu)體成員的。結(jié)構(gòu)體類型變量名.成員名,13,structstudentstu1,stu2;stu1.sexstu1.numstu1.score0stu1.score1stu1.score2,結(jié)構(gòu)體類型變量的定義和初始化為:structstudentcharname20;charsex;longnum;floatscore3;structstudentstu=“Wangyi”,f,1308001,98.5,97.0,95.0;,14,用括起,結(jié)構(gòu)體類型變量完成初始化后,各成員的值分別為:,15,strcpy(,Wangyi“)stu.sex=fstu.num=1308001stu.score0=98.5stu.score1=97.0stu.score2=95.0,例8.1:結(jié)構(gòu)體數(shù)據(jù)的輸入與輸出#includestructstudentcharname20;charsex;longnum;floatscore3;intmain()structstudentstu;inti;,16,scanf(“%s%c%ld”,,17,輸入:WangyiM1308001L98.59795輸出:*NameSexNumScore1Score2Score3WangyiM130800198.5097.0095.00,8.2.4結(jié)構(gòu)體變量的賦值,兩個(gè)類型相同的結(jié)構(gòu)體變量可以用賦值符號進(jìn)行相互賦值。structstudentstu1,stu2=“Wangyi”,f,1308001,98.5,97.0,95.0;stu1=stu2是合法的,相當(dāng)于把stu2的成員值賦給stu1對應(yīng)的成員兩個(gè)類型相同的結(jié)構(gòu)體變量不能進(jìn)行算術(shù)運(yùn)算、關(guān)系運(yùn)算和邏輯運(yùn)算。stu1=stu2,stu1stu2等都是不合法的,18,8.1.4結(jié)構(gòu)體變量的賦值,一個(gè)結(jié)構(gòu)體變量在使用時(shí),如果沒有使用成員運(yùn)算符,那么是指整個(gè)結(jié)構(gòu)體變量。通過賦值語句:sut1=stu2;注意:除賦值操作和本質(zhì)是由賦值完成的操作外,不能通過整體去使用結(jié)構(gòu)體變量,19,僅對賦值有效,如:stu1=stu2;或者,stu1stu2;,如:stu1=stu2;或者,stu1stu2;/*非法*/,8.3結(jié)構(gòu)體數(shù)組和結(jié)構(gòu)體指針,結(jié)構(gòu)體數(shù)組的定義和元素的引用結(jié)構(gòu)體類型數(shù)組的定義形式:struct結(jié)構(gòu)體類型名數(shù)組名數(shù)組長度;,20,structstudentcharname20;longnum;floatscore3;structstudentstu30;/*定義了班級同學(xué)的信息*/,8.3.2結(jié)構(gòu)體數(shù)組元素的賦值及引用,同前面數(shù)組一樣,結(jié)構(gòu)體數(shù)組元素也是通過下標(biāo)來引用各元素,并通過成員引用符“.”來引用各自得成員,21,,stu0.num,stu0.scorei;,stu1.num,stu1.scorei;.,stu29.num,stu29.scorei;,例8.2:設(shè)一個(gè)班級有30個(gè)人,填寫如下的登記表,除姓名、學(xué)號外,還有三科成績,編程實(shí)現(xiàn)對表格的計(jì)算,求出班級學(xué)生的單科平均分,求解出每個(gè)人的三科總成績,并按總成績由高分到低分輸出。,22,分析:將問題分解為己基本的輸入、處理和輸出三個(gè)基本的過程:輸入:定義數(shù)據(jù)類型基本信息,實(shí)現(xiàn)均分計(jì)算處理:按學(xué)生的總成績排序。輸出:按表格要求輸出。裝配:定義main()函數(shù),調(diào)用各子程序。,23,24,#include#defineN30voidinputdata();/*輸入學(xué)生信息*/voidsortdata();/*對學(xué)生總分排序*/voidoutputdata();/*輸出學(xué)生信息*/voidoutputaverage();/*輸出課程平均分*/structstudent/*定義結(jié)構(gòu)體*/charname20;/*學(xué)生姓名*/longnum;/*學(xué)號*/floatscore3;/*三科考試成績*/floatsum;/*總成績*/;structstudentstuN;/*定義了一個(gè)班級同學(xué)的信息*/,25,intmain()inputdata();sortdata();outputdata();outputaverage();return0;,26,voidinputdata()inti,j;for(i=0;iN;i+)scanf(%s%ld%f%f%f,,27,voidsortdata()inti,j;studenttemp;for(i=0;iN-1;i+)for(j=0;jN-1-i;j+)if(stuj.sumstuj+1.sum)temp=stuj;/*使用結(jié)構(gòu)體變量的賦值操作*/stuj=stuj+1;stuj+1=temp;,28,voidoutputdata()inti;printf(*n);printf(NameNumScore1Score2Score3Sumn);for(i=0;in;i+)printf(%10s%8ld%8.2f%8.2f%8.2f%8.2fn,,stui.num,stui.score0,stui.score1,stui.score2,stui.sum);,29,voidoutputaverage()inti,j;floataver3=0;printf(*n);for(i=0;i3;i+)for(j=0;jnamep1-nump1-score0p1-score1p1-score2,32,例8.3對指向結(jié)構(gòu)體類型變量的正確使用。輸入一個(gè)結(jié)構(gòu)體類型變量的成員,通過指向結(jié)構(gòu)體變量的指針輸出,33,#includestructstudentcharname20;charsex;longnum;floatscore3;intmain()structstudent*p;inti;,34,p=(structstudent*)malloc(sizeof(structstudent);scanf(%s%c%ld,p-name,指針變量訪問結(jié)構(gòu)體變量的成員的兩種形式(*結(jié)構(gòu)體指針變量名).成員名(*p).name(*p).sex(*p).num結(jié)構(gòu)體指針變量名-成員名p-namep-sexp-num,35,8.3.4結(jié)構(gòu)體數(shù)組和指針的應(yīng)用,例8.4:用指針訪問結(jié)構(gòu)體變量及結(jié)構(gòu)體數(shù)組,36,#includestructstudentintnum;charname20;charsex;intage;floatscore;intmain()structstudentstu3=11302,Wang,F,20,483,11303,Liu,M,19,503,11304,Song,M,19,471.5;structstudentstudent1=11301,Zhang,F,19,496.5,*p,*q;,8.2.4結(jié)構(gòu)體數(shù)組和指針的應(yīng)用,37,inti;p=,運(yùn)行程序結(jié)果:輸出:Zhang,F,86.0Wang,F,98.0Liu,M,90.0Song,M,95.0,8.4結(jié)構(gòu)體與函數(shù),在C語言中允許用結(jié)構(gòu)變量作函數(shù)參數(shù)進(jìn)行傳遞,將結(jié)構(gòu)體成員逐個(gè)復(fù)制到形參中。函數(shù)的返回值也可以是結(jié)構(gòu)體類型的。當(dāng)成員為數(shù)組時(shí)將會(huì)使傳送的時(shí)間和空間開銷很大,嚴(yán)重地降低了程序的效率。使用指針,即用指針變量作函數(shù)參數(shù),可減少時(shí)間和空間的開銷。,38,8.4.1結(jié)構(gòu)體變量作為函數(shù)參數(shù),例8.5:定義一個(gè)復(fù)數(shù)類型的結(jié)構(gòu)體,通過函數(shù)調(diào)用,求兩個(gè)復(fù)數(shù)的和。,39,voidadd(structcomplex_tc1,structcomplex_tc2)structcomplex_tc;c.real=c1.real+c2.real;c.imag=c1.imag+c2.imag;c.modular=sqrt(c.real*c.real+c.imag*c.imag);printf(%lf,%lf,%lfn,c.real,c.imag,c.modular);,40,#include#includestructcomplex_tdoublereal;doubleimag;doublemodular;voidadd(structcomplex_t,structcomplex_t);intmain()structcomplex_tc1,c2;scanf(%lf%lf,結(jié)構(gòu)體數(shù)組作為函數(shù)參數(shù)補(bǔ)充例題:學(xué)生的記錄由學(xué)號和成績組成,N名學(xué)生的數(shù)據(jù)已在主函數(shù)中放入結(jié)構(gòu)體數(shù)組s中,請編寫函數(shù)fun,其功能是:把分?jǐn)?shù)最低的學(xué)生數(shù)據(jù)放在h所指的數(shù)組中。注意:分?jǐn)?shù)最低的學(xué)生可能不止一個(gè),函數(shù)返回分?jǐn)?shù)最低的學(xué)生的人數(shù)。,41,例8.6重新編寫例8.2中的SortData函數(shù),通過結(jié)構(gòu)體數(shù)組作為參數(shù)的形式實(shí)現(xiàn)排序操作,42,voidSortData(student*pstu,intn)inti,j;studenttemp;for(i=0;in-1;i+)for(j=i;jnum=1308001;pnode1-sex=M;pnode1-next=NULL;/*NULL:表示為空的指針*/pnode2=(Node*)malloc(sizeof(Node);strcpy(pnode2-name,”Jerry”);pnode2-num=1308002;pnode2-sex=F;pnode2-next=NULL;/*NULL:表示為空的指針*/,執(zhí)行pnode3=pnode2;,53,下列的表達(dá)式都為真pnode1!=pnode2pnode1!=pnode3pnode2=pnode3,54,定義:若存在一組結(jié)點(diǎn)類型的數(shù)據(jù),在第一個(gè)結(jié)點(diǎn)的指針域內(nèi)存入第二個(gè)結(jié)點(diǎn)的首地址,在第二個(gè)結(jié)點(diǎn)的指針域內(nèi)又存放第三個(gè)結(jié)點(diǎn)的首地址,如此串連下去直到最后一個(gè)結(jié)點(diǎn)。最后一個(gè)結(jié)點(diǎn)因無后續(xù)結(jié)點(diǎn)連接,其指針域可賦為NULL或者0。這樣一種連接方式稱為“鏈表”,55,有三個(gè)結(jié)點(diǎn)指針分別是p1,p2,p3指向三個(gè)不同的結(jié)點(diǎn)數(shù)據(jù)執(zhí)行下列代碼:p1-next=p2;p2-next=p3;p3-next=NULL;,56,8.5.2鏈表的建立,鏈表的創(chuàng)建過程有以下幾步:定義鏈表的數(shù)據(jù)結(jié)構(gòu)。定義頭節(jié)點(diǎn)指針,置指針域?yàn)榭?,表示?chuàng)建了一個(gè)空表。申請一個(gè)節(jié)點(diǎn)存儲(chǔ)單元。將新節(jié)點(diǎn)的指針成員賦值為空。若是空表,將新節(jié)點(diǎn)連接到表頭;若是非空表,將新節(jié)點(diǎn)接到表尾。判斷一下是否有后續(xù)節(jié)點(diǎn)要接入鏈表,若有轉(zhuǎn)到(3),否則結(jié)束。,57,8.4.2鏈表的建立,例8.8創(chuàng)建一個(gè)學(xué)生學(xué)號及姓名的鏈表,即結(jié)點(diǎn)包括學(xué)生學(xué)號、姓名及指向下一個(gè)結(jié)點(diǎn)的指針。,58,#include#includestructNodecharname20;longnum;structNode*next;structNode*create(structNode*);,59,structNode*create(structNode*head)structNode*newnode;structNode*q;newnode=(structNode*)malloc(sizeof(structNode);scanf(%s%ld,newnode-name,60,intmain()structNode*head=NULL,*p;head=create(head);if(head=NULL)printf(CreateListErrorn);exit(0);p=head;while(p-next)/*不輸出最后一個(gè)學(xué)號name,p-num);p=p-next;return0;,鏈表的輸出,鏈表的輸出過程有以下幾步找到表頭。若是非空表,輸出結(jié)點(diǎn)的成員,是空表則退出。移到下一個(gè)結(jié)點(diǎn)。轉(zhuǎn)到(2)。,61,62,voidListshow(structnode*head)structnode*p;p=head;while(p)printf(%s,%ldn,p-name,p-num);p=p-next;,按學(xué)號排序,voidListSort(structnode*head)node*p,*s,*pt;p=head;pt=s=p-next;while(p-next!=NULL)while(s-next!=NULL)if(p-next-nums-next-num)pt-next=p-next;p-next=s-next-next;s-next=pt-next;s=s-next;p=p-next;pt=s;,63,8.5.3鏈表的插入,在鏈表中插入一個(gè)新的結(jié)點(diǎn),64,例8.9:在例8.8創(chuàng)建的鏈表中插入一個(gè)結(jié)點(diǎn),若學(xué)生已存在,輸出其信息,否則插入鏈表中,65,List*insert_node(List*head,Node*node)List*p=head;List*prep=p;if(head=NULL|node=NULL)returnhead;while(p-next!=NULL)if(p-numnum)prep=p;p=p-next;,用于元素的定位,不斷移動(dòng)結(jié)點(diǎn)指針找到合適的插入點(diǎn),elseif(p-num=node-num)printf(%salreadyexist!n,node-name);returnhead;elsebreak;if(head=p)/*若插入點(diǎn)在鏈表的頭部,需改動(dòng)head指針*/node-next=p;head=node;elsenode-next=prep-next;prep-next=node;returnhead;,66,8.5.4鏈表的刪除,鏈表結(jié)點(diǎn)的刪除定位刪除點(diǎn)先將指針接在合適的位置上,在斷開需要?jiǎng)h除的結(jié)點(diǎn)釋放刪除點(diǎn)的存儲(chǔ)單元,67,鏈表結(jié)點(diǎn)的刪除,第一步:p1的指針域指向p3第二步:斷開結(jié)點(diǎn)p2,68,p1-next=p3;free(p2);,structNode*delete_node(structNode*head,longnum)structNode*p=head,*prep=p;if(head=NULL)returnhead;while(p!=NULL)if(p-num!=num)prep=p;p=p-next;elsebreak;/*找到*/,69,70,if(head=p)/*刪除點(diǎn)恰在head指針處,須修改head指針*/head=p-next;elseif(p-next!=NULL)prep-next=p-next;elseprep-next=NULL;/*刪除點(diǎn)在最后一結(jié)點(diǎn),直接將前一個(gè)結(jié)點(diǎn)的next域置空*/if(p=NULL)printf(“Notexist!n”);elsefree(p);returnhead;,8.6共用體,共用體(聯(lián)合體),也是一種構(gòu)造數(shù)據(jù)類型。一個(gè)共用體是幾個(gè)類型不同(也可以相同)的成員的組合,其中每個(gè)成員各有一個(gè)名字在一個(gè)結(jié)構(gòu)體(變量)里,結(jié)構(gòu)體的各成員順序排列存儲(chǔ),每個(gè)成員都有自己獨(dú)立的存儲(chǔ)位置。一個(gè)共用體變量的所有成員共享同一片存儲(chǔ)區(qū)。一個(gè)共用體變量在每個(gè)時(shí)刻里只能保存某一個(gè)成員的值,71,8.6.1共用體的定義,共用體類型定義形式:union共用體名成員表列;,72,uniondatainta;floatb;doublec;chard;obj;,共用體數(shù)據(jù)類型與結(jié)構(gòu)體在形式上非常相似,但其表示的含義及存儲(chǔ)是完全不同的。,例8.11:結(jié)構(gòu)體和共用體的存儲(chǔ)空間對比uniondata/*共用體*/inta;floatb;doublec;chard;structstud/*結(jié)構(gòu)體*/inta;floatb;doublec;chard;,73,intmain()printf(%d,%d,sizeof(structstud),sizeof(uniondata);return0;,程序運(yùn)行結(jié)果:輸出:17,8,74,8.6.2共用體變量的引用,例8.12:共用體變量的使用。#includeuniondatainta;floatb;doublec;chard;uniondatauntest;,75,intmain()untest.a=6;printf(“%dn”,untest.a);untest.c=67.2;printf(“%5.1lfn”,untest.c);untest.d=W;untest.b=34.2;printf(“%5.1lf,%cn”,untest.b,untest.d);printf(“n”);return0;,輸出:667.234.2,?,先前寫入的字符被覆蓋了,所以字符的輸出是無法得知的,由寫入內(nèi)存的數(shù)據(jù)決定。,8.7枚舉型和自定義類型,枚舉類型的定義和枚舉變量的說明枚舉:一系列命名的整型常量。特點(diǎn):枚舉類型的變量的取值是可數(shù)的是一種基本數(shù)據(jù)類型,而不是一種構(gòu)造類型,因?yàn)樗荒茉俜纸鉃槿魏位绢愋汀?76,8.7.1枚舉類型的定義和枚舉變量的說明,枚舉的定義:enum枚舉名枚舉值表;enumWeekdaysun,mon,tue,wed,thu,fri,sat,77,該枚舉名為Weekday,枚舉值共有7個(gè),即一周中的七天。凡被說明為Weekday類型變量的取值只能是七天中的某一天。,幾種聲明形式,先聲明類型,再定義變量enumWeekdaysun,mon,tue,wed,thu,fri,sat;enumWeekdaya,b,c;聲明類型的同時(shí)定義變量enumWeekdaysun,mon,tue,wed,thu,fri,sata,b,c;聲明無名枚舉類型變量enumsun,mon,tue,wed,thu,fri,sata,b,c;,78,8.7.2枚舉類型變量的賦值和使用,枚舉值是常量,不是變量。不能在程序中用賦值語句再對它賦值。sun=5;sun=mon;都是錯(cuò)誤的。枚舉元素:由系統(tǒng)定義了一個(gè)表示序號的數(shù)值,從0開始順序定義為0,1,2。在weekday中,sun值為0,mon值為1,sat值為6。,79,例8.13:枚舉變量的賦值與引用#include#includeenumweekdaysun,mon,tue,wed,thu,fri,sata,b,c;intmain()a=sun;b=mon;c=tue;printf(%d,%d,%d,a,b,c);return0;,80,說明:只能把枚舉值賦予枚舉變量,不能把元素的數(shù)值直接賦予枚舉變量。若a,b均為枚舉變量,有:a=sum;b=mon;/*正確*/a=0;b=1;/*錯(cuò)誤*/用強(qiáng)制類型轉(zhuǎn)換a=(enumweekday)2;/*等價(jià)于a=tue;*/,81,枚舉元素不是字符常量也不是字符串常量,使用時(shí)不要加單、雙引號定義枚舉類型數(shù)據(jù)時(shí),指定了其初始的數(shù)值enumTesta,b=2,c,d;a的值為0,b的值指定為2,c,d的值?C語言規(guī)定:當(dāng)指定了初始數(shù)值時(shí),其后的枚舉值為該數(shù)值之后的整數(shù)。即:c的值是3,d的值是4,82,8.7類型定義符typedef,允許用戶為數(shù)據(jù)類型取“別名”,類型定義符typedef即可用來完成此功能格式為:typedef原類型名新類型名inta,b;int的完整寫法為INTEGER,為了增加程序的可讀性,將int重定義為:typedefintINTEGER,83,typedefcharNAME20;NAMEa1,a2,s1,s2;等價(jià)于:chara120,a220,s120,s220;,84,typedefstructstucharname20;intage;charsex;STU;STUbody1,body2;,可用宏定義來代替typedef的功能,但是宏定義是由預(yù)處理完成的,而typedef則是在編譯時(shí)完成的,后者更為靈活方便,8.8位段*,有些信息在存儲(chǔ)時(shí),并不需要占用一個(gè)完整的字節(jié)。例如在存放一個(gè)開關(guān)量時(shí),只有0和1兩種狀態(tài),用一位二進(jìn)位即可。為了節(jié)省存儲(chǔ)空間,并使處理簡便,C語言提供了一種數(shù)據(jù)類型,稱為“位域”或“位段”“位段”是把一個(gè)字節(jié)中的二進(jìn)位劃分為幾個(gè)不同的區(qū)域,并說明每個(gè)區(qū)域的位數(shù)。每個(gè)域有一個(gè)域名,允許在程序中按域名進(jìn)行操作。,85,8.8.1位域的定義和位域變量的說明,位域定義與結(jié)構(gòu)體定義相仿,其形式為:struct位域結(jié)構(gòu)體名類型說明符位域名:位域長度;,86,如:structbitsecinta:6;intb:2;intc:8;,8.8.1位域的定義和位域變量的說明,位域變量的說明與結(jié)構(gòu)體變量說明的方式相同??刹捎孟榷x后說明,同時(shí)定義說明或者直接說明這三種方式。例如:structbitsecinta:6;intb:2;intc:8;data;,87,說明data為bitsec變量,共占兩個(gè)字節(jié)。其中位域a占8位,位域b占2位,位域c占6位。,說明:一個(gè)位域必須存儲(chǔ)在同一個(gè)字節(jié)中,不能跨兩個(gè)字節(jié)。如一個(gè)字節(jié)所剩空間不夠存放另一位域時(shí),應(yīng)從下一單元起存放該位域。也可以有意使某位域從下一單元開始。舉例structbitsecunsigneda:4;unsigned:0;/*空域,不使用的部分*/unsignedb:4;/*從下一單元開始存放*/unsignedc:4;,88,在這個(gè)位域定義中,a占第一數(shù)的4位,后4位填0表示不使用,b從第二數(shù)開始,占用4位,c占用第三個(gè)數(shù)的4位。,8.8.2位域的使用,位域的使用和結(jié)構(gòu)體成員的使用相同,其一般形式為:位域變量名.位域名位域允許用各種格式輸出。,89,8.8.2位域的使用,例8.14:位域的格式化輸出#includestructbsunsigneda:1;unsignedb:3;unsignedc:4;bit,*pbit;intmain()bit.a=1;bit.b=7;bit.c=15;printf(%d,%d,%dn,bit.a,bit.b,bit.c);pbit=,90,pbit-a=0;pbit-b,8.9結(jié)構(gòu)體的綜合應(yīng)用,例8.15:學(xué)生成績信息包括學(xué)號、姓名、考試課程、平時(shí)成績、期中成績、期末成績、總評成績和等級(優(yōu):90-100、良:80-89、中:70-79、及格:60-69、不及格:60)。建立一個(gè)描述學(xué)生某科成績的數(shù)據(jù)類型,其中總評成績=平時(shí)成績20%+期中成績20%+期末成績60%。要求輸入學(xué)生的平時(shí)成績、期中成績、期末成績。分別用函數(shù)實(shí)現(xiàn)下面功能:計(jì)算課程總評成績并指出成績等級。輸出不及格的學(xué)生信息。按學(xué)生的總評成績進(jìn)行降序排列。,91,結(jié)構(gòu)體聲明,92,#include#include#defineN30typedefstructstudentintid;/*學(xué)生學(xué)號*/charname20;/*學(xué)生姓名*/charsubject20;/*考試科目*/floatperf;/*平時(shí)成績*/floatmid;/*期中成績*/floatfinal;/*期末成績*/f
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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è)管理職業(yè)技術(shù)學(xué)院《外匯交易模擬》2023-2024學(xué)年第二學(xué)期期末試卷
- 福州英華職業(yè)學(xué)院《園林建筑設(shè)計(jì)Ⅱ》2023-2024學(xué)年第二學(xué)期期末試卷
- 寧夏幼兒師范高等??茖W(xué)?!陡苯虒W(xué)訓(xùn)練理論與實(shí)踐(1)》2023-2024學(xué)年第二學(xué)期期末試卷
- 北京理工大學(xué)《建筑消防設(shè)備工程》2023-2024學(xué)年第二學(xué)期期末試卷
- 西安航空職業(yè)技術(shù)學(xué)院《自動(dòng)控制原理B實(shí)驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 濰坊食品科技職業(yè)學(xué)院《德育原理》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣州涉外經(jīng)濟(jì)職業(yè)技術(shù)學(xué)院《意識(shí)形態(tài)前沿問題研究》2023-2024學(xué)年第二學(xué)期期末試卷
- 民辦合肥財(cái)經(jīng)職業(yè)學(xué)院《精神病護(hù)理學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 贛州師范高等??茖W(xué)?!睹嫦?qū)ο蟪绦蛟O(shè)計(jì)-JAVA語言》2023-2024學(xué)年第二學(xué)期期末試卷
- 天津外國語大學(xué)《原理與應(yīng)用實(shí)訓(xùn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 螺栓連接在橫向振動(dòng)下的松動(dòng)機(jī)制與力學(xué)分析
- 101二元一次方程組的概念【9個(gè)必考點(diǎn)】(必考點(diǎn)分類集訓(xùn))(人教版2024)(原卷版)
- 大型心血管造影系統(tǒng)及其DSA質(zhì)量控制
- (高清版)DB33∕T 386-2013 內(nèi)河航道工程質(zhì)量檢驗(yàn)規(guī)范
- 鋁加工深井鑄造培訓(xùn)
- 國家中小學(xué)智慧教育平臺(tái)應(yīng)用指南
- 2024-2025學(xué)年人教版七年級(下)期中數(shù)學(xué)試卷(考試范圍:第7~9章) (含解析)
- 無人機(jī)噴灑系統(tǒng)設(shè)計(jì)-全面剖析
- 人工智能安全監(jiān)控系統(tǒng)開發(fā)協(xié)議
- 非遺檔案資源管理系統(tǒng)建設(shè)與實(shí)施研究
- 工傷賠償私了協(xié)議書范本
評論
0/150
提交評論