版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
廈門理工學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系1
1本章主要內(nèi)容結(jié)構(gòu)體類型與結(jié)構(gòu)體變量結(jié)構(gòu)體數(shù)組共用體枚舉類型typedef定義類型
廈門理工學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系2
結(jié)構(gòu)簡(jiǎn)介存儲(chǔ)一個(gè)班級(jí)中5名學(xué)員的信息(學(xué)號(hào)、姓名、性別和成績(jī))問(wèn)題:I.使用數(shù)組MaryJohnPeterRoseKateFMFMF01020304058978.56797.564解決方案:scorenumsexname不能建立數(shù)組間的關(guān)系II.使用多維數(shù)組MaryJohnPeterRoseKateFMFMF01020304058978.56797.564C語(yǔ)言不允許一個(gè)數(shù)組包含多種數(shù)據(jù)類型III.使用結(jié)構(gòu)體numnamesexscoreC語(yǔ)言引入了稱為結(jié)構(gòu)體的數(shù)據(jù)存儲(chǔ)方式“結(jié)構(gòu)體”是一種構(gòu)造數(shù)據(jù)類型,它是由若干數(shù)據(jù)項(xiàng)組合而成的復(fù)雜數(shù)據(jù)對(duì)象,這些數(shù)據(jù)項(xiàng)稱為結(jié)構(gòu)的成員。
廈門理工學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系3
5.1結(jié)構(gòu)體的定義structstructurename{ datatypevariable1; datatypevariable2; ...};結(jié)構(gòu)體成員{};結(jié)構(gòu)體名structstudentintnum;charname[20];charsex;定義結(jié)構(gòu)體floatscore;C語(yǔ)言中的有效數(shù)據(jù)類型
廈門理工學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系4
structstudent{intnum;charname[20];charsex;floatscore;};numnamesexstudent結(jié)構(gòu)體定義放置在程序的開始部分,位于頭文件聲明之后;score結(jié)構(gòu)體定義僅描述了一個(gè)結(jié)構(gòu)的形式。如果要在程序里使用結(jié)構(gòu)體,需要聲明結(jié)構(gòu)體變量。5.1結(jié)構(gòu)體變量的定義
廈門理工學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系5
structstudent{intnum;charname[20];charsex;intage;floatscore;charaddress[50];};結(jié)構(gòu)體類型名結(jié)構(gòu)體各成員定義結(jié)構(gòu)體類型大括號(hào)外要加分號(hào)structstudentstu1,stu2;
系統(tǒng)不為結(jié)構(gòu)體類型的定義開辟內(nèi)存單元,只當(dāng)定義了結(jié)構(gòu)體變量后才會(huì)為變量分配相應(yīng)大小的內(nèi)存單元。stu1和stu2在內(nèi)存占幾個(gè)字節(jié)?聲明一個(gè)類型為student結(jié)構(gòu)的變量,將會(huì)為該變量分配內(nèi)存,大小是大于或等于其所有成員變量的大小之和。
廈門理工學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系6
聲明結(jié)構(gòu)變量structstudent{intnum;charname[20];charsex;floatscore;};structstudentstudent1,student2;I.先定義結(jié)構(gòu),再聲明結(jié)構(gòu)變量structstudent{intnum;charname[20];charsex;floatscore;}student1,student2;II.在定義結(jié)構(gòu)類型的同時(shí)聲明結(jié)構(gòu)變量struct{intnum;charname[20];charsex;floatscore;}student1,student2;III.直接聲明結(jié)構(gòu)變量5.1結(jié)構(gòu)體變量的定義
廈門理工學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系7
幾點(diǎn)說(shuō)明:結(jié)構(gòu)體類型與結(jié)構(gòu)體變量概念不同類型:不分配內(nèi)存;
變量:分配內(nèi)存
類型:不能賦值、存取、運(yùn)算;
變量:可以(2)結(jié)構(gòu)體可以嵌套
例:
structdate{intmonth;intday;intyear;};structstudent{intnum;charname[20];
structdatebirthday;}student1;numnamebirthdaymonthdayyear例:
structstudent{intnum;charname[20];structdate{intmonth;intday;intyear;}
birthday;}student1; numnamebirthdaymonthdayyearstructPoint{intx,y;};structImg{inttag;structImg*pimg;//正確,可以包含自身類型的指針
structImgimg;//錯(cuò)誤,不能包含自身類型的變量};
廈門理工學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系8
structdate{intmonth;intday;intyear;};struct{intnum;charname[20];charsex;
structdatebirthday;floatscore;}student1,student2;表示結(jié)構(gòu)變量成員的一般形式是:結(jié)構(gòu)變量名.成員名例如:student1.num、student2.sex、student1.birthday.month、嵌套結(jié)構(gòu)structStudentstudent1;charname[20];(3)結(jié)構(gòu)類型中的成員名,可以與程序中的變量同名,它們代表不同的對(duì)象,互不干擾
廈門理工學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系9
結(jié)構(gòu)體變量初始化賦值先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量時(shí)賦初值struct
結(jié)構(gòu)體類型名初值表{……};struct結(jié)構(gòu)體類型名變量名={成員1的值,…,成員n的值};
注意:賦初值時(shí),{}中間的數(shù)據(jù)順序必須與結(jié)構(gòu)體成員的定義順序一致,否則就會(huì)出現(xiàn)混亂。structStudentstu={"20020306","ZhangMing",'M',18,1,90};
nonamesexageclassnoscore√structStudentstu={18,"ZhangMing",'M',"20020306",1,90};
×structDate{intyear;//年
intmonth;//月
intday;//日};structStudent{charno[9];//學(xué)號(hào)
charname[20];//姓名
charsex;//性別
structDatebirthday;
//生日
unsignedintclassno;//班級(jí)
floatscore;//成績(jī)};structStudentstu={"20020306","ZhangMing",'M',{1986,12,10},1,90};
5.1結(jié)構(gòu)體變量的賦值
廈門理工學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系10
結(jié)構(gòu)體變量初始化賦值定義結(jié)構(gòu)體類型的同時(shí),定義結(jié)構(gòu)體變量并賦初值struct[結(jié)構(gòu)體類型名]{初值表
……}變量名={成員1的值,成員2的值,…,成員n的值};structDate
{intyear,month,day;}birthday={1986,12,10};
struct
{intyear,month,day;}birthday={1986,12,10};
或structStudent{charno[9];//學(xué)號(hào)
charname[20];//姓名
charsex;//性別
unsignedintage;//年齡
unsignedintclassno;//班級(jí)
floatgrade;//成績(jī)}stu={"20020306","ZhangMing",'M',18,1,90};
廈門理工學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系11
structStudentstu1;
strcpy(stu1.no,"20020306");strcpy(,"ZhangMing");stu1.sex='M';stu1.age=18;stu1.classno=1;stu1.grade=90;structStudentstu2;stu2=stu1;結(jié)構(gòu)體變量在程序中賦值
如果在定義結(jié)構(gòu)體變量時(shí)并未對(duì)其賦初始值,那么在程序中要對(duì)它賦值的話,就只能一個(gè)一個(gè)地對(duì)其成員逐一賦值,或者用已賦值的同類型的結(jié)構(gòu)體變量對(duì)它賦值
逐一賦值利用已賦值的結(jié)構(gòu)體變量賦值(同一結(jié)構(gòu)體的不同變量之間)strcpy(stu2.no,stu1.no);strcpy(,);stu2.sex=stu1.sex;stu2.age=stu1.age;stu2.classno=stu1.classno;stu2.grade=stu1.grade;
廈門理工學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系12
student1student1.num=1;student1.name="ZhangZiLiang";student1.sex=’M’;printf("請(qǐng)輸入年齡:\n");scanf("%d",&student1.age);1ZhangZiLiangM用輸入語(yǔ)句或賦值語(yǔ)句來(lái)給結(jié)構(gòu)體變量的各個(gè)成員賦值1818student2=student1;student21ZhangZiLiangM18
廈門理工學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系13
內(nèi)存student3structstudentstudent3={3,"YaoMing",'M',90.5};
3YaoMingM定義時(shí)賦值的順序應(yīng)與成員聲明時(shí)的順序一樣;允許初始化語(yǔ)句中的值的數(shù)目比結(jié)構(gòu)體成員數(shù)目少。student3.numstudent3.sex90.5student3.score
廈門理工學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系14
例
structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}student1,student2;if(student1==student2)……..(
)引用規(guī)則結(jié)構(gòu)體變量不能整體引用,只能引用變量成員引用方式:結(jié)構(gòu)體變量名.成員名//非指針型結(jié)構(gòu)體變量的引用可以將一個(gè)結(jié)構(gòu)體變量賦值給另一個(gè)結(jié)構(gòu)體變量結(jié)構(gòu)體嵌套時(shí)逐級(jí)引用成員(分量)運(yùn)算符結(jié)合性:從左向右例
structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}student1,student2;
student1.num=10;student1.score=85.5;student1.score+=student2.score;student1.age++;例
structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}student1,student2;printf(“%d,%s,%c,%d,%f,%s\n”,student1);(
)student1={101,“WanLin”,‘M’,19,87.5,“DaLian”};(
)結(jié)構(gòu)體變量名.成員名.子成員名……最低級(jí)子成員名例
structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}student1,student2;student2=student1;(√)5.1結(jié)構(gòu)體變量的引用
廈門理工學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系15
引用規(guī)則可以引用結(jié)構(gòu)體成員的地址,也可以引用結(jié)構(gòu)體變量的地址scanf(“%d”,&student1.num);printf(“%d”,&student1);它們要做什么?可以對(duì)結(jié)構(gòu)體成員進(jìn)行各種有關(guān)的運(yùn)算student1.age++;If(student1.age==student2.age)printf(“thetwoareasolderaseachother.\n”);結(jié)構(gòu)體變量的成員在引用時(shí)和其同類型的普通變量引用方法一致。
廈門理工學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系16
structstudent{intnum;charname[20];charsex;floatscore;}stu[30];元素為結(jié)構(gòu)體類型的數(shù)組稱為結(jié)構(gòu)體數(shù)組。在實(shí)際應(yīng)用中,經(jīng)常用結(jié)構(gòu)體數(shù)組來(lái)表示具有相同數(shù)據(jù)結(jié)構(gòu)體的一個(gè)群體。例如一個(gè)班的學(xué)員檔案,一個(gè)公司的職工檔案等。定義了一個(gè)結(jié)構(gòu)體數(shù)組stu1,共有30個(gè)元素,stu[0]~stu[29]。每個(gè)數(shù)組元素都具有structstudent的結(jié)構(gòu)體形式。5.2結(jié)構(gòu)體數(shù)組
廈門理工學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系17
175.2結(jié)構(gòu)體數(shù)組structstudent{intnum;charname[20];charsex;intage;floatscore;charaddress[50];}stu[3];structstudent{intnum;charname[20];charsex;intage;floatscore;charaddress[50];}stu;A、結(jié)構(gòu)體數(shù)組定義
廈門理工學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系18
numnamesexagescoreaddress1001LinNinF1479103BeijingRoad1002ZhangFanM158046TangshanRoad1003WangYingF148610ZhongshanRoad18結(jié)構(gòu)體數(shù)組示例5.2結(jié)構(gòu)體數(shù)組
廈門理工學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系19
B、結(jié)構(gòu)體數(shù)組初始化structstudent{intnum;charname[20];charsex;intage;floatscore;charaddress[50];}stu[3]={{1001,"LiNin",'M',14,79,"103BeijingRoad"},{1002,,"ZhangFan",'M',15,80,"46TangshanRoad"},{1003,"WangYing",'F',14,86,"10ZhongshanRoad"}};19
廈門理工學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系20
#include<stdio.h>voidmain(){structSTUD{charname[20];longnum;intage;charsex;floatscore;}stud[3];inti;for(i=0;i<3;i++){printf("InputallinformationabouttheNo.%dstudent:\n",i+1);gets(stud[i].name);scanf("%ld,%d,%c,%f",&stud[i].num,&stud[i].age,&stud[i].sex,&stud[i].score);getchar();}printf("\n%-20s%-10s%-4s%-4s%-6s\n","Name","Num","Age","Sex","Scores");for(i=0;i<3;i++) printf("%-20s%-10ld%-4d%-4c%-6.2f\n",stud[i].name,stud[i].num,stud[i].age,stud[i].sex,stud[i].score);}20例5.2由鍵盤輸入學(xué)生信息,并將其輸出。
廈門理工學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系21
5.5共用體學(xué)生的信息:學(xué)號(hào)姓名地址電話班級(jí)10010LiFuzhou125630722老師的信息:工號(hào)姓名地址電話職務(wù)10852WangXiamen35286prof.類別's'類別't'
廈門理工學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系22
使幾個(gè)不同的變量共占同一段內(nèi)存的結(jié)構(gòu)稱為共用體類型的結(jié)構(gòu)。定義共用體類型變量的一般形式為:union共用體名{成員表列}變量表列;structstuTeacher{ intnum; charname[20];charaddr[50]; chartel[8];chartype;
unioninfo { charclass[10]; charjob[20]; };}1.共用體類型的定義
廈門理工學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系23
例如:uniondatauniondata
{inti;{inti;charch;或charch;floatf;floatf;}a,b,c;}; uniondataa,b,c;chif思考:變量a,b,c所占內(nèi)存空間有多少?
廈門理工學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系24
對(duì)于共用體變量的定義:uniondata{ inti; charch; floatf;}a;成員的引用:a.ia.cha.f
廈門理工學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系25
voidmain(){ uniondata { inti; charch; floatf; }a; a.ch=65; a.i=28; printf("i=%d\n",a.i); printf("ch=%c\n",a.ch); printf("f=%4.1f\n",a.f);}對(duì)共用體中的i成員賦值,之前對(duì)成員ch賦值不再起作用,此時(shí)僅成員i起作用,其余成員不起作用。共用體變量和其各成員的地址均是一樣的。對(duì)共用體變量不能初始化,不能對(duì)共用體變量名賦值。共用體和結(jié)構(gòu)體的比較
廈門理工學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系26
5.6枚舉類型如果一個(gè)變量只有幾種可能的值,可以把它定義成枚舉類型。所謂“枚舉”,顧名思義,就是把這種類型數(shù)據(jù)可取的值一一列舉出來(lái)。一個(gè)枚舉型變量取值僅限于列出值的范圍。枚舉數(shù)據(jù)類型通常的定義形式為:enum
枚舉類型名{
枚舉元素表};由多個(gè)標(biāo)識(shí)符組成,標(biāo)識(shí)符之間用逗號(hào)分開定義枚舉類型:enumweekday{sun,mon,tue,wed,thu,fri,sat};定義枚舉類型變量:enumweekday
today,nextday;enumweekday{sun,mon,tue,wed,thu,fri,sat}today,nextday;取值
廈門理工學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系27
enumweekday{sun,mon,tue,wed,thu,fri,sat}today,nextday;today=sun;nextday=mon;if(today==sat)nextday=sun;today=100;
√×
C編譯對(duì)枚舉元素實(shí)際上按整型常量處理,當(dāng)遇到枚舉元素列表時(shí),編譯程序就把其中第一個(gè)標(biāo)識(shí)符賦0值,第二、三、…個(gè)標(biāo)識(shí)符依此賦1,2,…。enumweekday{sun,mon,tue,wed,thu,fri,sat}today,nextday;0123456today=sun;printf("today=%d",today);運(yùn)行結(jié)果:today=0
廈門理工學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系28
if(today==6)nextday=0;if(today==sat)nextday=sun;可以在枚舉類型定義時(shí)指定枚舉元素的值
enumweekday{sun,mon=5,tue,wed=10,thu,fri,sat};05610111213注意:枚舉元素是常量,在程序中不可對(duì)它賦值。例如:sun=0;mon=1;將產(chǎn)生錯(cuò)誤。定義枚舉類型的好處:
用標(biāo)識(shí)符表示數(shù)值,增加了程序的可讀性清晰不清晰
可限制變量的取值范圍
如today只能取sun~sat中的值
廈門理工學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系29
例題5-10枚舉元素序號(hào)Voidmain(){
enumweekday{sun,mon,tue,wed,thu,fri,sat}
a,b,c;a=sun;b=mon;c=tue;printf(“%d,%d,%d”,a,b,c);}思考:運(yùn)行結(jié)果?
廈門理工學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系30
5.8程序設(shè)計(jì)舉例例5-11已知某年的元旦是星期幾,打印該年某一月份的日歷表#include"stdio.h"typedefstruct{ intyear,mon,day; enumweekday {nun,mon,tue,wed,thu,fri,sat}week;}daily;
voidmain(){dailydays;
printf("Whichyear?");scanf("%d",&days.year);/*哪年日歷*/printf("year%4d,Month1,day1isweekday?\n",days.year);printf("-Sun,1-Mon,2-Tue,3-Wed,4-Thu,5-Fri,6-Sat:");scanf("%d",&days.week);days.mon=days.day=1;montable(days);}30
廈門理工學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系31
monta
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度離婚雙方子女撫養(yǎng)責(zé)任分配協(xié)議書3篇
- 配股協(xié)議書三篇
- 二零二五年度個(gè)人傭金收益分成合同3篇
- 二零二五版?zhèn)€人合伙教育培訓(xùn)機(jī)構(gòu)退伙分割協(xié)議4篇
- 二零二五年度個(gè)人與個(gè)人教育貸款合同
- 2025版綠色環(huán)保家庭析產(chǎn)分家協(xié)議書:綠色財(cái)富傳承計(jì)劃3篇
- 二零二五年度城市軌道交通項(xiàng)目投資合作協(xié)議范本2篇
- 二零二五年度國(guó)際商務(wù)日語(yǔ)談判團(tuán)隊(duì)建設(shè)與管理合同3篇
- 二零二五版物流配送勞務(wù)合同標(biāo)準(zhǔn)文本3篇
- 2025版物業(yè)公司崗位安全責(zé)任書:物業(yè)服務(wù)安全責(zé)任書(2025年)3篇
- 杭州市房地產(chǎn)經(jīng)紀(jì)服務(wù)合同
- 2024年大宗貿(mào)易合作共贏協(xié)議書模板
- 新聞?dòng)浾咦C600道考試題-附標(biāo)準(zhǔn)答案
- TSG ZF001-2006《安全閥安全技術(shù)監(jiān)察規(guī)程》
- 中考語(yǔ)文二輪復(fù)習(xí):記敘文閱讀物象的作用(含練習(xí)題及答案)
- 老年外科患者圍手術(shù)期營(yíng)養(yǎng)支持中國(guó)專家共識(shí)(2024版)
- 子宮畸形的超聲診斷
- 2024年1月高考適應(yīng)性測(cè)試“九省聯(lián)考”數(shù)學(xué) 試題(學(xué)生版+解析版)
- (正式版)JBT 11270-2024 立體倉(cāng)庫(kù)組合式鋼結(jié)構(gòu)貨架技術(shù)規(guī)范
- DB11∕T 2035-2022 供暖民用建筑室溫?zé)o線采集系統(tǒng)技術(shù)要求
- 《復(fù)旦大學(xué)》課件
評(píng)論
0/150
提交評(píng)論