欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    第9章自订型态–结构、联合和列举课件.ppt

    • 资源ID:2109633       资源大小:274.95KB        全文页数:43页
    • 资源格式: PPT        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第9章自订型态–结构、联合和列举课件.ppt

    第9章 自訂資料型態 結構、聯合和列舉,9-1 結構資料型態9-2 結構陣列9-3 指標與結構9-4 動態記憶體配置9-5 聯合與列舉資料型態9-6 建立C語言的新型態9-7 位元欄位,第9章 自訂資料型態 結構、聯合和列舉9-1 結構資料型,9-1 結構資料型態,9-1-1 結構的基礎9-1-2 結構宣告與基本使用9-1-3 巢狀結構9-1-4 結構與函數,9-1 結構資料型態9-1-1 結構的基礎,9-1-1 結構的基礎-說明,結構(Structures)是C語言的延伸資料型態,它和聯合、列舉都屬於自定資料型態(User-Defined Types),可以讓程式設計者自行在程式碼定義新的資料型態。結構是由一或多個不同資料型態(當然也可以是相同資料型態)所組成的集合,然後使用一個新名稱來代表,新名稱是一個新的資料型態,我們可以使用此新資料型態來宣告結構變數。,9-1-1 結構的基礎-說明結構(Structures),9-1-1 結構的基礎-C語言的結構,C語言的結構如同資料庫的記錄,可以將複雜且相關的資料組合成一個記錄來方便存取。例如:圖形的點是由X軸和Y軸的座標(x,y)所組成,如下所示:struct point int x;int y;結構point可以代表圖形上的一個點的座標(x,y),當圖形是由數十到百點組成時,使用結構處理時,就能夠清楚分別哪一個x值是搭配哪一個y值的座標。,9-1-1 結構的基礎-C語言的結構C語言的結構如同資料庫的,9-1-2 結構宣告與基本使用-語法,在C程式宣告結構是使用struct關鍵字來定義新的資料型態,其語法如下所示:struct 結構名稱 資料型態 變數1;資料型態 變數2;語法定義名為【結構名稱】的新資料型態,程式設計者可以使用C語言的命名原則替結構命名,在結構中宣告的變數稱為該結構的成員(Members)。,9-1-2 結構宣告與基本使用-語法在C程式宣告結構是使用s,9-1-2 結構宣告與基本使用-範例,例如:宣告學生資料的student結構,如下所示:struct student int stdId;char name20;int mathScore;int englishScore;上述結構是由學號stdId、學生姓名name字元陣列的字串、數學成績mathScore和英文成績englishScore成員變數組成。,9-1-2 結構宣告與基本使用-範例例如:宣告學生資料的st,9-1-2 結構宣告與基本使用-宣告結構變數與初始值(說明),當宣告student結構後,因為結構是一種自訂型態,換句話說,我們就可以在程式碼使用新型態來宣告變數,其語法如下所示:struct 結構名稱 變數名稱;上述宣告使用struct關鍵字(C語言一定需要struct)開頭加上結構名稱來宣告結構變數,以student結構為例的結構變數宣告,如下所示:struct student std1;struct student std2=9402,小龍女,65,88;struct student std3;,9-1-2 結構宣告與基本使用-宣告結構變數與初始值(說明),9-1-2 結構宣告與基本使用-宣告結構變數與初始值(圖例),例如:結構變數std2在等號之後使用大括號括起的內容依序是成員變數的初始值,如下圖所示:,9-1-2 結構宣告與基本使用-宣告結構變數與初始值(圖例),9-1-2 結構宣告與基本使用-結構與成員變數的運算,在建立好結構變數後,就可以使用.運算子存取結構成員變數的值,如下所示:std1.stdId=9401;strcpy(std1.name,楊過);std1.mathScore=90;std1.englishScore=77;上述程式碼存取結構的成員變數,因為name是字串,所以使用strcpy()函數來指定成員變數值。ANSI-C語言支援結構變數的指定敘述,如下所示:std3=std2;,9-1-2 結構宣告與基本使用-結構與成員變數的運算在建立好,9-1-3 巢狀結構-說明,巢狀結構(Nested Structures)是在宣告的結構中擁有其他結構,如下所示:struct quiz int mathScore;int englishScore;struct student int stdId;char name20;struct quiz score;,9-1-3 巢狀結構-說明巢狀結構(Nested Str,9-1-3 巢狀結構-存取結構變數,我們可以在宣告student結構變數時,指定結構的初值,如下所示:struct student std2=9402,小龍女,65,88;因為score是student結構的成員變數,所以在存取score結構的成員變數時,需要先存取結構變數score,然後才能存取成員變數mathScore和englishScore,如下所示:std1.score.math=90;std1.score.english=77;,9-1-3 巢狀結構-存取結構變數我們可以在宣告studen,9-1-4 結構與函數-結構宣告,結構是一種自訂資料型態,所以結構變數不只可以作為函數參數,還可以作為函數的傳回值,如下所示:struct point int x;int y;上述結構擁有x和y共2個成員變數。,9-1-4 結構與函數-結構宣告結構是一種自訂資料型態,所以,9-1-4 結構與函數-函數宣告,接著建立函數指定點座標和計算位移,函數的原型宣告,如下所示:struct point setXY(int,int);struct point offset(struct point,int);上述2個函數的傳回值都是point結構,offset()函數使用point結構作為參數,使用的是傳值呼叫。因為ANSI-C支援結構變數的指定敘述,所以可以將函數傳回值指定給其它結構變數,如下所示:p1=offset(p,10);,9-1-4 結構與函數-函數宣告接著建立函數指定點座標和計算,9-2 結構陣列-建立,結構陣列(Arrays of Structure)是結構資料型態的陣列。首先我們需要宣告結構,例如:宣告quiz結構,如下所示:struct quiz int mathScore;int englishScore;上述結構擁有2個成員變數,因為quiz是一種新資料型態,所以可以使用此型態建立一維陣列,如下所示:#define MAXSIZE 3struct quiz studentsMAXSIZE;,9-2 結構陣列-建立結構陣列(Arrays of St,9-2 結構陣列-存取,因為結構陣列是一種陣列,所以存取陣列索引i元素結構的成員變數,如下所示:studentsi.mathScorestudentsi.englishScore,9-2 結構陣列-存取因為結構陣列是一種陣列,所以存取陣列索,9-3 指標與結構,9-3-1 結構的指標變數9-3-2 標準函式庫的tm日期/時間結構,9-3 指標與結構9-3-1 結構的指標變數,9-3-1 結構的指標變數-宣告,如同C語言其它資料型態的指標變數,指標也可以指向結構,我們可以建立指標變數指向一個結構,如下所示:struct time int hours;int minutes;int seconds;因為指標需要指向結構變數的位址,所以需要先宣告結構變數,然後才能建立指向結構的指標,如下所示:struct time now,*ptr;,9-3-1 結構的指標變數-宣告如同C語言其它資料型態的指標,9-3-1 結構的指標變數-指定結構變數值,接著將結構指標指向結構,如下所示:ptr=,9-3-1 結構的指標變數-指定結構變數值接著將結構指標指向,9-3-2 標準函式庫的tm日期/時間結構-結構宣告,struct tm int tm_sec;/*秒:0-59*/int tm_min;/*分:0-59*/int tm_hour;/*時:0-23*/int tm_mday;/*日:1-31*/int tm_mon;/*月:0-11*/int tm_year;/*年:從1900年起算*/int tm_wday;/*星期:從星期日起(0-6)*/int tm_yday;/*天數:從1/1日起算:0-365*/int tm_isdst;/*是否是日光節約時間,1是,0不是,-1不知*/;,9-3-2 標準函式庫的tm日期/時間結構-結構宣告stru,9-3-2 標準函式庫的tm日期/時間結構-常用的日期/時間函數,9-3-2 標準函式庫的tm日期/時間結構-常用的日期/時間,9-4 動態記憶體配置,9-4-1 動態記憶體配置-malloc()和free()函數9-4-2 配置陣列的記憶體9-4-3 配置結構的記憶體,9-4 動態記憶體配置9-4-1 動態記憶體配置,9-4-1 動態記憶體配置-malloc()函數(說明),配置記憶體:malloc()函數在C語言程式碼呼叫malloc()函數,可以向作業系統取得一塊可用的記憶體空間,其說明如下表所示:,9-4-1 動態記憶體配置-malloc()函數(說明),9-4-1 動態記憶體配置-malloc()函數(語法),當程式需要配置size尺寸的記憶體空間時,因為函數傳回void通用型指標,所以需要加上型態迫換,將函數傳回的指標轉換成指定資料型態的指標,其語法如下所示:fp=(資料型態*)malloc(sizeof(資料型態);程式碼使用sizeof運算子取得指定資料型態的大小,在此的型態包括整數、字元、浮點數等基本資料型態和結構等延伸資料型態。,9-4-1 動態記憶體配置-malloc()函數(語法),9-4-1 動態記憶體配置-malloc()函數(範例),例如:配置一個浮點數變數的記憶空間,如下所示:fp=(float*)malloc(sizeof(float);上述程式碼配置一塊浮點數的記憶空間,fp是浮點數的指標變數。傳回值經過型態迫換成float指標後,malloc()函數傳回一個浮點的記憶體指標且指定給指標fp。如果記憶體空間不足,函數malloc()傳回空指標NULL,程式需確定記憶體配置成功,傳回有效指標後才能使用配置的記憶體,如下所示:if(fp!=NULL).,9-4-1 動態記憶體配置-malloc()函數(範例),9-4-1 動態記憶體配置-free()函數(說明),釋放配置的記憶體:free()函數在C程式需要自行將配置的記憶體空間歸還,以便歸還的記憶體空間可以在下次呼叫malloc()函數時再重新配置,free()函數和malloc()函數的功能相反,可以釋放配置的記憶體空間,其說明如下表所示:,9-4-1 動態記憶體配置-free()函數(說明)釋放,9-4-1 動態記憶體配置-free()函數(範例),例如:指標fp是指向malloc()傳回的浮點數記憶空間的指標,然後就可以呼叫free()函數釋放此塊記憶體,如下所示:free(fp);上述程式碼的指標fp以此例是float浮點數,它就是malloc()函數傳回的指標或結構指標。,9-4-1 動態記憶體配置-free()函數(範例)例如,9-4-2 配置陣列的記憶體,陣列是相同型態的變數集合,在C程式只需配置一整塊連續的記憶空間就可以當成陣列來使用。首先宣告一個陣列資料型態的指標變數,如下所示:int*score;上述整數指標可以用來指向整數陣列,接著呼叫malloc()函數配置所需的記憶體空間,如下所示:score=(int*)malloc(num*sizeof(int);上述程式碼的num變數是陣列元素的個數,記憶體空間大小是以個數num乘以sizeof運算子的整數型態大小,即num*sizeof(int)計算而得。,9-4-2 配置陣列的記憶體陣列是相同型態的變數集合,在C程,9-4-3 配置結構的記憶體,結構或結構陣列也一樣可以使用動態記憶體配置來配置記憶體空間,筆者準備直接修改第9-2節的Ch9-2.c程式範例,改為動態記憶體配置建立結構陣列,如下所示:struct quiz*students;students=(struct quiz*)malloc(num*sizeof(struct quiz);上述程式碼在宣告結構指標students後,呼叫malloc()函數配置結構陣列的記憶空間,其大小是num*sizeof(struct quiz),num是結構陣列的元素個數。,9-4-3 配置結構的記憶體結構或結構陣列也一樣可以使用動態,9-5 聯合與列舉資料型態,9-5-1 聯合資料型態9-5-2 列舉資料型態,9-5 聯合與列舉資料型態9-5-1 聯合資料型態,9-5 聯合與列舉資料型態,C語言的聯合(Unions)資料型態類似結構,只不過結構可以存取不同的成員變數,聯合只能存取其中一個成員變數,如此就可以在同一塊記憶體儲存不同型態的資料。列舉資料型態(Enumerations)是使用符號名稱代表一組整數資料型態的值,如同符號常數使用名稱取代固定值。,9-5 聯合與列舉資料型態C語言的聯合(Unions)資,9-5-1 聯合資料型態-語法,C語言結構的成員變數是佔用前後相連的記憶空間,聯合的記憶空間是疊起來的,其大小是成員變數中最大的哪一個資料型態。聯合使用union關鍵字進行宣告,其語法如下所示:union 聯合名稱 資料型態 變數1;資料型態 變數2;上述語法定義名為【聯合名稱】的新資料型態。,9-5-1 聯合資料型態-語法C語言結構的成員變數是佔用前後,9-5-1 聯合資料型態-宣告聯合,例如:宣告儲存數值資料的聯合number,如下所示:union number char c;short value;,9-5-1 聯合資料型態-宣告聯合例如:宣告儲存數值資料的聯,9-5-1 聯合資料型態-宣告結構,如果宣告擁有相同成員變數的結構,如下所示:struct number char c;short value;,9-5-1 聯合資料型態-宣告結構如果宣告擁有相同成員變數的,9-5-1 聯合資料型態-宣告聯合變數,union如同結構也是一種自訂資料型態,在程式碼可以直接使用新型態宣告變數,其語法如下所示:union 聯合名稱 變數名稱;上述宣告使用union關鍵字開頭加上聯合名稱來宣告聯合變數。例如:使用number聯合型態宣告聯合變數,如下所示:union number no;上述程式碼宣告聯合變數no。,9-5-1 聯合資料型態-宣告聯合變數union如同結構也是,9-5-1 聯合資料型態-存取成員變數,在建立好聯合變數後,就可以存取聯合的成員變數,如下所示:no.value=num;上述程式碼使用.運算子存取聯合的成員變數,請注意!聯合變數的成員都佔用同一塊記憶體,當指定其中一個成員變數值,例如:no.value後,存取其它成員變數,不見得能夠取得有意義的資料。,9-5-1 聯合資料型態-存取成員變數在建立好聯合變數後,就,9-5-2 列舉資料型態-語法,列舉資料型態(Enumerations)是使用符號名稱代表一組整數資料型態的值,使用一組名稱來取代一組整數常數。它是使用enum關鍵字進行宣告,其語法如下所示:enum 列舉名稱 成員名稱,成員名稱=常數值,成員名稱,;,9-5-2 列舉資料型態-語法列舉資料型態(Enumer,9-5-2 列舉資料型態-範例,例如:宣告色彩名稱的列舉,如下所示:enum color White=1,Red,Blue=5,Green,Black=Green;上述宣告名為color的列舉型態,White、Red、Blue和Green等是成員名稱,以此例White使用指定敘述指定常數值1,Red沒有指定,預設是前一個常數值加1,即2,Blue指定成5,Green為5+1,即6,Black指定成Green,表示和Green擁有相同值6。,9-5-2 列舉資料型態-範例例如:宣告色彩名稱的列舉,如下,9-5-2 列舉資料型態-宣告,enum如同結構或聯合也屬於自訂資料型態,在程式碼可以直接使用新型態宣告變數,其語法如下所示:enum 列舉名稱 變數名稱;上述宣告使用enum關鍵字開頭加上列舉名稱來宣告列舉變數,以本節的範例為例,列舉變數的宣告,如下所示:enum color a,b,c,d,e;,9-5-2 列舉資料型態-宣告enum如同結構或聯合也屬於自,9-6 建立C語言的新型態-語法,在宣告結構、聯合或列舉型態(其它基本資料型態也可以)後,為了方便宣告(不用再加上struct、union或enum),可以使用一個別名來取代此新型態,這個別名是新增的識別字,用來定義全新的資料型態,其語法如下所示:typedef 資料型態 識別字;上述識別字代表資料型態,可以直接使用此識別字宣告變數。,9-6 建立C語言的新型態-語法在宣告結構、聯合或列舉型態(,9-6 建立C語言的新型態-宣告變數,例如:本節程式範例的item結構,就可以使用typedef指令定義新識別字的型態和宣告變數,如下所示:typedef struct item inventory;inventory book;上述程式碼在定義新型態inventory識別字後,就可以直接使用inventory宣告變數book(不再需要struct關鍵字),此時的變數book是一個item結構變數。,9-6 建立C語言的新型態-宣告變數例如:本節程式範例的it,9-6 建立C語言的新型態-建立C語言基本資料型態的新型態,對於現成的C語言資料型態,我們也可以將它改頭換面建立成為一種新型態的名稱,如下所示:typedef int onHand;struct item char name30;float cost;onHand quantity;上述程式碼定義新型態onHand識別字為整數int資料型態後,就可以使用onHand宣告變數quantity。,9-6 建立C語言的新型態-建立C語言基本資料型態的新型態對,9-7 位元欄位-說明,位元欄位(Bit-fields)可以存取變數的位元資料,資料不是以位元組為單位來存取,而是每一個位元。位元欄位的宣告也是使用結構宣告,只是成員變數的宣告不同,例如:宣告bitfields的位元欄位,如下所示:struct bitfields unsigned int x:1;unsigned int y:1;unsigned int z:2;,9-7 位元欄位-說明位元欄位(Bit-fields)可,9-7 位元欄位-宣告與存取,位元欄位的變數宣告和存取方式和結構相同,也是使用.運算子,如下所示:struct bitfields bits;printf(x=%xn,bits.x);printf(y=%xn,bits.y);不過因為位元欄位宣告的位元變數並不能單獨進行運算,以此例因為只有4位元,並不能使用指定敘述指定其值。,9-7 位元欄位-宣告與存取位元欄位的變數宣告和存取方式和結,

    注意事项

    本文(第9章自订型态–结构、联合和列举课件.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开