版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
廈門理工學(xué)院計算機科學(xué)與技術(shù)系1
1本章主要內(nèi)容結(jié)構(gòu)體類型與結(jié)構(gòu)體變量結(jié)構(gòu)體數(shù)組共用體枚舉類型typedef定義類型
廈門理工學(xué)院計算機科學(xué)與技術(shù)系2
結(jié)構(gòu)簡介存儲一個班級中5名學(xué)員的信息(學(xué)號、姓名、性別和成績)問題:I.使用數(shù)組MaryJohnPeterRoseKateFMFMF01020304058978.56797.564解決方案:scorenumsexname不能建立數(shù)組間的關(guān)系II.使用多維數(shù)組MaryJohnPeterRoseKateFMFMF01020304058978.56797.564C語言不允許一個數(shù)組包含多種數(shù)據(jù)類型III.使用結(jié)構(gòu)體numnamesexscoreC語言引入了稱為結(jié)構(gòu)體的數(shù)據(jù)存儲方式“結(jié)構(gòu)體”是一種構(gòu)造數(shù)據(jù)類型,它是由若干數(shù)據(jù)項組合而成的復(fù)雜數(shù)據(jù)對象,這些數(shù)據(jù)項稱為結(jié)構(gòu)的成員。
廈門理工學(xué)院計算機科學(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語言中的有效數(shù)據(jù)類型
廈門理工學(xué)院計算機科學(xué)與技術(shù)系4
structstudent{intnum;charname[20];charsex;floatscore;};numnamesexstudent結(jié)構(gòu)體定義放置在程序的開始部分,位于頭文件聲明之后;score結(jié)構(gòu)體定義僅描述了一個結(jié)構(gòu)的形式。如果要在程序里使用結(jié)構(gòu)體,需要聲明結(jié)構(gòu)體變量。5.1結(jié)構(gòu)體變量的定義
廈門理工學(xué)院計算機科學(xué)與技術(shù)系5
structstudent{intnum;charname[20];charsex;intage;floatscore;charaddress[50];};結(jié)構(gòu)體類型名結(jié)構(gòu)體各成員定義結(jié)構(gòu)體類型大括號外要加分號structstudentstu1,stu2;
系統(tǒng)不為結(jié)構(gòu)體類型的定義開辟內(nèi)存單元,只當(dāng)定義了結(jié)構(gòu)體變量后才會為變量分配相應(yīng)大小的內(nèi)存單元。stu1和stu2在內(nèi)存占幾個字節(jié)?聲明一個類型為student結(jié)構(gòu)的變量,將會為該變量分配內(nèi)存,大小是大于或等于其所有成員變量的大小之和。
廈門理工學(xué)院計算機科學(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)類型的同時聲明結(jié)構(gòu)變量struct{intnum;charname[20];charsex;floatscore;}student1,student2;III.直接聲明結(jié)構(gòu)變量5.1結(jié)構(gòu)體變量的定義
廈門理工學(xué)院計算機科學(xué)與技術(shù)系7
幾點說明:結(jié)構(gòu)體類型與結(jié)構(gòu)體變量概念不同類型:不分配內(nèi)存;
變量:分配內(nèi)存
類型:不能賦值、存取、運算;
變量:可以(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;//錯誤,不能包含自身類型的變量};
廈門理工學(xué)院計算機科學(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)類型中的成員名,可以與程序中的變量同名,它們代表不同的對象,互不干擾
廈門理工學(xué)院計算機科學(xué)與技術(shù)系9
結(jié)構(gòu)體變量初始化賦值先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量時賦初值struct
結(jié)構(gòu)體類型名初值表{……};struct結(jié)構(gòu)體類型名變量名={成員1的值,…,成員n的值};
注意:賦初值時,{}中間的數(shù)據(jù)順序必須與結(jié)構(gòu)體成員的定義順序一致,否則就會出現(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é)號
charname[20];//姓名
charsex;//性別
structDatebirthday;
//生日
unsignedintclassno;//班級
floatscore;//成績};structStudentstu={"20020306","ZhangMing",'M',{1986,12,10},1,90};
5.1結(jié)構(gòu)體變量的賦值
廈門理工學(xué)院計算機科學(xué)與技術(shù)系10
結(jié)構(gòu)體變量初始化賦值定義結(jié)構(gòu)體類型的同時,定義結(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é)號
charname[20];//姓名
charsex;//性別
unsignedintage;//年齡
unsignedintclassno;//班級
floatgrade;//成績}stu={"20020306","ZhangMing",'M',18,1,90};
廈門理工學(xué)院計算機科學(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)體變量時并未對其賦初始值,那么在程序中要對它賦值的話,就只能一個一個地對其成員逐一賦值,或者用已賦值的同類型的結(jié)構(gòu)體變量對它賦值
逐一賦值利用已賦值的結(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é)院計算機科學(xué)與技術(shù)系12
student1student1.num=1;student1.name="ZhangZiLiang";student1.sex=’M’;printf("請輸入年齡:\n");scanf("%d",&student1.age);1ZhangZiLiangM用輸入語句或賦值語句來給結(jié)構(gòu)體變量的各個成員賦值1818student2=student1;student21ZhangZiLiangM18
廈門理工學(xué)院計算機科學(xué)與技術(shù)系13
內(nèi)存student3structstudentstudent3={3,"YaoMing",'M',90.5};
3YaoMingM定義時賦值的順序應(yīng)與成員聲明時的順序一樣;允許初始化語句中的值的數(shù)目比結(jié)構(gòu)體成員數(shù)目少。student3.numstudent3.sex90.5student3.score
廈門理工學(xué)院計算機科學(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)體變量的引用可以將一個結(jié)構(gòu)體變量賦值給另一個結(jié)構(gòu)體變量結(jié)構(gòu)體嵌套時逐級引用成員(分量)運算符結(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)體變量名.成員名.子成員名……最低級子成員名例
structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}student1,student2;student2=student1;(√)5.1結(jié)構(gòu)體變量的引用
廈門理工學(xué)院計算機科學(xué)與技術(shù)系15
引用規(guī)則可以引用結(jié)構(gòu)體成員的地址,也可以引用結(jié)構(gòu)體變量的地址scanf(“%d”,&student1.num);printf(“%d”,&student1);它們要做什么?可以對結(jié)構(gòu)體成員進(jìn)行各種有關(guān)的運算student1.age++;If(student1.age==student2.age)printf(“thetwoareasolderaseachother.\n”);結(jié)構(gòu)體變量的成員在引用時和其同類型的普通變量引用方法一致。
廈門理工學(xué)院計算機科學(xué)與技術(shù)系16
structstudent{intnum;charname[20];charsex;floatscore;}stu[30];元素為結(jié)構(gòu)體類型的數(shù)組稱為結(jié)構(gòu)體數(shù)組。在實際應(yīng)用中,經(jīng)常用結(jié)構(gòu)體數(shù)組來表示具有相同數(shù)據(jù)結(jié)構(gòu)體的一個群體。例如一個班的學(xué)員檔案,一個公司的職工檔案等。定義了一個結(jié)構(gòu)體數(shù)組stu1,共有30個元素,stu[0]~stu[29]。每個數(shù)組元素都具有structstudent的結(jié)構(gòu)體形式。5.2結(jié)構(gòu)體數(shù)組
廈門理工學(xué)院計算機科學(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é)院計算機科學(xué)與技術(shù)系18
numnamesexagescoreaddress1001LinNinF1479103BeijingRoad1002ZhangFanM158046TangshanRoad1003WangYingF148610ZhongshanRoad18結(jié)構(gòu)體數(shù)組示例5.2結(jié)構(gòu)體數(shù)組
廈門理工學(xué)院計算機科學(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é)院計算機科學(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é)院計算機科學(xué)與技術(shù)系21
5.5共用體學(xué)生的信息:學(xué)號姓名地址電話班級10010LiFuzhou125630722老師的信息:工號姓名地址電話職務(wù)10852WangXiamen35286prof.類別's'類別't'
廈門理工學(xué)院計算機科學(xué)與技術(shù)系22
使幾個不同的變量共占同一段內(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é)院計算機科學(xué)與技術(shù)系23
例如:uniondatauniondata
{inti;{inti;charch;或charch;floatf;floatf;}a,b,c;}; uniondataa,b,c;chif思考:變量a,b,c所占內(nèi)存空間有多少?
廈門理工學(xué)院計算機科學(xué)與技術(shù)系24
對于共用體變量的定義:uniondata{ inti; charch; floatf;}a;成員的引用:a.ia.cha.f
廈門理工學(xué)院計算機科學(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);}對共用體中的i成員賦值,之前對成員ch賦值不再起作用,此時僅成員i起作用,其余成員不起作用。共用體變量和其各成員的地址均是一樣的。對共用體變量不能初始化,不能對共用體變量名賦值。共用體和結(jié)構(gòu)體的比較
廈門理工學(xué)院計算機科學(xué)與技術(shù)系26
5.6枚舉類型如果一個變量只有幾種可能的值,可以把它定義成枚舉類型。所謂“枚舉”,顧名思義,就是把這種類型數(shù)據(jù)可取的值一一列舉出來。一個枚舉型變量取值僅限于列出值的范圍。枚舉數(shù)據(jù)類型通常的定義形式為:enum
枚舉類型名{
枚舉元素表};由多個標(biāo)識符組成,標(biāo)識符之間用逗號分開定義枚舉類型:enumweekday{sun,mon,tue,wed,thu,fri,sat};定義枚舉類型變量:enumweekday
today,nextday;enumweekday{sun,mon,tue,wed,thu,fri,sat}today,nextday;取值
廈門理工學(xué)院計算機科學(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編譯對枚舉元素實際上按整型常量處理,當(dāng)遇到枚舉元素列表時,編譯程序就把其中第一個標(biāo)識符賦0值,第二、三、…個標(biāo)識符依此賦1,2,…。enumweekday{sun,mon,tue,wed,thu,fri,sat}today,nextday;0123456today=sun;printf("today=%d",today);運行結(jié)果:today=0
廈門理工學(xué)院計算機科學(xué)與技術(shù)系28
if(today==6)nextday=0;if(today==sat)nextday=sun;可以在枚舉類型定義時指定枚舉元素的值
enumweekday{sun,mon=5,tue,wed=10,thu,fri,sat};05610111213注意:枚舉元素是常量,在程序中不可對它賦值。例如:sun=0;mon=1;將產(chǎn)生錯誤。定義枚舉類型的好處:
用標(biāo)識符表示數(shù)值,增加了程序的可讀性清晰不清晰
可限制變量的取值范圍
如today只能取sun~sat中的值
廈門理工學(xué)院計算機科學(xué)與技術(shù)系29
例題5-10枚舉元素序號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);}思考:運行結(jié)果?
廈門理工學(xué)院計算機科學(xué)與技術(shù)系30
5.8程序設(shè)計舉例例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é)院計算機科學(xué)與技術(shù)系31
monta
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版國際貨物物流跟蹤與查詢服務(wù)合同2篇
- 二零二五年度船舶甲板設(shè)備檢修與維護(hù)合同4篇
- 二零二五年度門樓鋼結(jié)構(gòu)檢測與加固服務(wù)合同4篇
- 2025年工業(yè)機器人研發(fā)中心場地租賃合同2篇
- 2025年度智能櫥柜系統(tǒng)研發(fā)與集成合同4篇
- 二零二五年度智能控制大棚系統(tǒng)集成合同4篇
- 2025年度汽車保險代理加盟合同3篇
- 二零二四年嬰幼兒奶粉市場分析與競爭策略合同3篇
- 專利代理服務(wù)詳細(xì)合同范本版B版
- 二零二五年度豪華游輪交易合同模板4篇
- 寒潮雨雪應(yīng)急預(yù)案范文(2篇)
- 垃圾車駕駛員聘用合同
- 變壓器搬遷施工方案
- 單位轉(zhuǎn)賬個人合同模板
- 八年級語文下冊 成語故事 第十五課 諱疾忌醫(yī) 第六課時 口語交際教案 新教版(漢語)
- EPC項目采購階段質(zhì)量保證措施
- T-NAHIEM 101-2023 急診科建設(shè)與設(shè)備配置標(biāo)準(zhǔn)
- 四川2024年專業(yè)技術(shù)人員公需科目“數(shù)字經(jīng)濟與驅(qū)動發(fā)展”參考答案(通用版)
- 煤炭裝卸服務(wù)合同
- 廣東省佛山市順德區(qū)2023學(xué)年中考一模物理試題(含答案解析)
- 高考英語真題100個長難句(語法填空)
評論
0/150
提交評論