程序設(shè)計基礎(chǔ)8結(jié)構(gòu)體共用體和枚舉類型(2015春)_第1頁
程序設(shè)計基礎(chǔ)8結(jié)構(gòu)體共用體和枚舉類型(2015春)_第2頁
程序設(shè)計基礎(chǔ)8結(jié)構(gòu)體共用體和枚舉類型(2015春)_第3頁
程序設(shè)計基礎(chǔ)8結(jié)構(gòu)體共用體和枚舉類型(2015春)_第4頁
程序設(shè)計基礎(chǔ)8結(jié)構(gòu)體共用體和枚舉類型(2015春)_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第第8 8章章 結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體第第8章章 結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體開開 始始1第第8 8章章 結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體本學(xué)期課程計劃本學(xué)期課程計劃 授課主要內(nèi)容授課主要內(nèi)容: : 8 8 結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體 9 9 文件文件 10 10 鏈表鏈表 11 11 遞推與遞歸遞推與遞歸 12 12 貪心法與動態(tài)規(guī)劃貪心法與動態(tài)規(guī)劃 課時安排:課時安排:24+824+8,共,共3232學(xué)時學(xué)時 成績構(gòu)成:實驗抽查成績構(gòu)成:實驗抽查40+40+機考機考30+30+在線考試在線考試3030 平時成績:平時成績:0 0分,出勤、討論等,分,出勤、討論等,- 5 +5- 5 +

2、52第第8 8章章 結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體結(jié)構(gòu)體、共用體、枚舉類型結(jié)構(gòu)體、共用體、枚舉類型主要內(nèi)容主要內(nèi)容 結(jié)構(gòu)體定義和使用結(jié)構(gòu)體定義和使用共用體定義和使用共用體定義和使用枚舉類型的使用枚舉類型的使用 3第第8 8章章 結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體本章本章OJOJ練習(xí)題目練習(xí)題目4第第8 8章章 結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體8.1 8.1 結(jié)構(gòu)體類型結(jié)構(gòu)體類型結(jié)構(gòu)體概念結(jié)構(gòu)體概念 一組邏輯相關(guān)但類型不同的變量的集合,也稱為一組邏輯相關(guān)但類型不同的變量的集合,也稱為記錄記錄。在程序里如何表示一個學(xué)生在程序里如何表示一個學(xué)生 5學(xué)學(xué)號號姓名姓名性性別別出生日期出生日期程序設(shè)程序設(shè)計基礎(chǔ)計基礎(chǔ)

3、英英 語語高數(shù)高數(shù)體育體育1令狐沖令狐沖男男1996.10.1908372822林平之林平之男男1995.12.2789288783岳靈珊岳靈珊女女1997.3.1897298664任盈盈任盈盈女女1996.8.2789587905 6 第第8 8章章 結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體6數(shù)組的解決方案數(shù)組的解決方案存在問題存在問題 學(xué)學(xué)號號姓名姓名性性別別出生日期出生日期程序設(shè)程序設(shè)計基礎(chǔ)計基礎(chǔ)英英 語語高數(shù)高數(shù)體育體育1令狐沖令狐沖男男1996.10.1908372822林平之林平之男男1995.12.2789288783岳靈珊岳靈珊女女1997.3.1897298664任盈盈任盈盈女女1996

4、.8.2789587905 6 第第8 8章章 結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體71令狐沖男1996.10.1908372822林平之男1995.12.2789288783岳靈珊女1997.3.3897298664任瑩瑩女1996.8.278958790希望的分配圖希望的分配圖定義結(jié)構(gòu)體類型定義結(jié)構(gòu)體類型第第8 8章章 結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體8定義結(jié)構(gòu)體變量定義結(jié)構(gòu)體變量先定義結(jié)構(gòu)體類先定義結(jié)構(gòu)體類型,再定義變量型,再定義變量在定義結(jié)構(gòu)體類在定義結(jié)構(gòu)體類型的同時定義變量型的同時定義變量直接定義結(jié)構(gòu)體直接定義結(jié)構(gòu)體變量,缺省結(jié)構(gòu)體變量,缺省結(jié)構(gòu)體類型名類型名第第8 8章章 結(jié)構(gòu)體與共用體結(jié)構(gòu)體

5、與共用體9用用 typedeftypedef 給已有數(shù)據(jù)類型定義一個給已有數(shù)據(jù)類型定義一個別名別名用用 typedeftypedef 并未定義新類型并未定義新類型別名別名與原有類型名是同義詞與原有類型名是同義詞約定用大寫字母表示約定用大寫字母表示第第8 8章章 結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體10結(jié)構(gòu)體變量初始化結(jié)構(gòu)體變量初始化結(jié)構(gòu)體和數(shù)組嵌套和初始化結(jié)構(gòu)體和數(shù)組嵌套和初始化第第8 8章章 結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體11結(jié)構(gòu)體所占內(nèi)存字節(jié)數(shù)結(jié)構(gòu)體所占內(nèi)存字節(jié)數(shù)第第8 8章章 結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體12結(jié)構(gòu)體數(shù)組定義和初始化結(jié)構(gòu)體數(shù)組定義和初始化第第8 8章章 結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體1

6、3結(jié)構(gòu)體成員的訪問結(jié)構(gòu)體成員的訪問 成員選擇運算符成員選擇運算符(圓點運算符)(圓點運算符) 結(jié)構(gòu)體變量名結(jié)構(gòu)體變量名. .成員名成員名 對嵌套結(jié)構(gòu)體成員采用對嵌套結(jié)構(gòu)體成員采用級聯(lián)方式級聯(lián)方式訪問訪問第第8 8章章 結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體14結(jié)構(gòu)體數(shù)組元素的引用結(jié)構(gòu)體數(shù)組元素的引用第第8 8章章 結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體例:用結(jié)構(gòu)體編程序統(tǒng)計3個候選人的得票情況 ,有10個人投票。15第第8 8章章 結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體16結(jié)構(gòu)體指針的定義和初始化結(jié)構(gòu)體指針的定義和初始化第第8 8章章 結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體17結(jié)構(gòu)體數(shù)組指針的定義和初始化結(jié)構(gòu)體數(shù)組指針的定義和初始化

7、第第8 8章章 結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體18指向結(jié)構(gòu)體數(shù)組的指針應(yīng)用指向結(jié)構(gòu)體數(shù)組的指針應(yīng)用第第8 8章章 結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體8.2 共用體類型 共用體是將不同類型的數(shù)據(jù)項存放于同一段存儲單元的一種構(gòu)造數(shù)據(jù)類型。 共用體類型與結(jié)構(gòu)體有有本質(zhì)上的不同: 結(jié)構(gòu)體的各成員有各自存儲單元,一個結(jié)構(gòu)體類型變量占用的存儲單元長度是各成員所占存儲單元長度之和。 共用體類型變量的各成員共享一段存儲單元,一個共用體類型變量占用的存儲單元的長度是各成員所占用存儲單元最長的長度。注意:共用體類型變量中所謂的共享不是把多個成員同時裝入,而是該共用體類型變量能被賦予任一成員值,每賦予一個成員值同時覆蓋原成

8、員值。19第第8 8章章 結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體1. 1. 共用體類型的定義共用體類型的定義格式:格式:union union 共用體名共用體名 數(shù)據(jù)類型數(shù)據(jù)類型 成員名表成員名表1;1;數(shù)據(jù)類型數(shù)據(jù)類型 成員名表成員名表2;2; 數(shù)據(jù)類型數(shù)據(jù)類型 成員名表成員名表n;n;例如:例如: union undataunion undata int a; float b; char ch; ; int a; float b; char ch; ;說明:說明:定義了一個名為定義了一個名為undataundata的共用體類型,它含有的共用體類型,它含有3 3個成員,一個個成員,一個為為intint

9、類型的成員類型的成員a a、一個為、一個為floatfloat類型的成員類型的成員b b、一個為、一個為charchar類型的成員類型的成員chch。20第第8 8章章 結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體2. 共用體類型變量的定義 在類型定義之后定義共用體變量: union undata u1,u2,u3; 在類型定義的同時定義共用體變量: union undata int a;float b;char ch;u1,u2,u3; 在類型定義時直接定義變量:unionint a;float b;char ch; u1,u2,u3;說明:u1、u2、u3變量占用的存儲單元的長度是各成員所占用存儲單元最長

10、的長度,即float 類型的所占用的長度。 21第第8 8章章 結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體8.2.2 共用體類型變量的引用共用體類型變量的成員引用格式:共用體類型變量的成員引用格式: 共用體類型變量名共用體類型變量名. .成員名成員名 例如:例如:u1.a u1.b u1.chu1.a u1.b u1.ch注意注意1 1:對共用體類型的變量進(jìn)行賦值時,只能對變量的某對共用體類型的變量進(jìn)行賦值時,只能對變量的某一個成員進(jìn)行,不允許直接對用共用體變量名進(jìn)行賦值一個成員進(jìn)行,不允許直接對用共用體變量名進(jìn)行賦值、初始化等操作。、初始化等操作。注意注意2 2:對于一個共用體類型變量,在某一時刻只能賦給

11、一對于一個共用體類型變量,在某一時刻只能賦給一個成員值,即一個共用體變量的值就是共用體變量的某個成員值,即一個共用體變量的值就是共用體變量的某一成員值。一成員值。22第第8 8章章 結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體例8.7:共用體類型的定義和使用。#include union undata int a; float b; char ch; u1; void main() u1.a=6; printf(u1.a=%dn, u1.a); u1.b=87.2; printf(u1.b=%7.2fn, u1.b); u1.ch=W; printf(u1.ch=%cn, u1.ch); 23第第8 8章章

12、結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體8.2.3 共用體類型數(shù)據(jù)的特點1同一個存儲空間可以用來存放幾種不同類型的共用體類型的成員,但共用體類型的成員不能同時在該存儲空間存在,即每一瞬時只有一個成員有效。例如,例8.7中的u1.a、u1.b、u1.ch不能同時存在。2共用體類型變量中有效的成員是最后一次存放的成員,在存入一個新的成員后原有的成員就失去作用。例如: u1.a=18; u1.b= 77.5; u1.ch=Y; 在完成以上3個賦值語句后,只有u1.ch是有效的,u1.a和u1.b已經(jīng)無意義了。因此在引用共用體類型變量時應(yīng)注意當(dāng)前存放在共用體類型變量中的究竟是哪個成員。24第第8 8章章 結(jié)構(gòu)體與

13、共用體結(jié)構(gòu)體與共用體8.2.3 共用體類型數(shù)據(jù)的特點3共用體類型變量的地址和它的各成員的地址都是同一地址。例如,&u1、&u1.a、&u1.ch、&u1.b都代表同一地址值,但類型不一樣。4不能直接對共用體類型變量名賦值或引用共用體類型變量名來得到一個值,也不能在定義共用體變量時對它初始化。5共用體類型變量不能作函數(shù)參數(shù),也不能使函數(shù)返回值為共用體類型,但可以使用指向共用體類型變量的指針,使用時注意指針類型要一致。例如:int *p; p=&u1.a; / 正確 或者: p=(int *)&u1; / 正確6共用體類型數(shù)據(jù)的成員可以是結(jié)構(gòu)體類型、

14、共用體類型或其他類型。25第第8 8章章 結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體例8.11:結(jié)構(gòu)體和共用體的綜合應(yīng)用。設(shè)有一個教師與學(xué)生通用的記錄,教師數(shù)據(jù)有姓名、系別、教研室三項;學(xué)生有姓名、性別、班級三項。編程輸入人員數(shù)據(jù),再以表格輸出。#include union dp int cla; char office10; ;struct recordchar name10; char job; dp dd;main()struct record body;printf(input name,job: );scanf(%s %c,,&body.job);if(body.job=

15、s) printf(intput class: ); scanf(%d,&body.dd.cla);else printf(input office: ); scanf(%s,body.dd.office);printf(nametjobtclass/officen);printf(%st%ct,,body.job);if(body.job=s) printf(%dn,body.dd.cla);else printf(%sn,body.dd.office);26第第8 8章章 結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體8.3 枚舉類型8.3.1 枚舉類型的概念和定義在枚舉類型的定義

16、中列舉出所有可能的取值,被定義為該枚舉類型的變量只能從列出的值中取值。枚舉類型定義格式: enum 枚舉類型名 枚舉值列表 ;例如:enum weekday sun,mou,tue,wed,thu,fri,sat;注意1:枚舉類型是一種基本數(shù)據(jù)類型,而不是一種構(gòu)造類型,因為它不能再分解為任何基本類型。注意2:“枚舉值列表”是該枚舉類型變量的所有可用值,這些值也稱為枚舉值。27第第8 8章章 結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體8.3 枚舉類型注意3:枚舉值是用戶定義的標(biāo)識符,這些標(biāo)識符并不自動地代表任何含義。例如,不能因為寫成sun,就自動代表“星期天”。枚舉類型變量的定義:格式 先定義類型,后定義變

17、量a、b、c: enum weekday a,b,c;格式 定義類型的同時定義變量a、b、c: enum weekdaysun,mou,tue,wed,thu,fri,sata,b,c;格式 直接定義變量a、b、c: enum sun,mou,tue,wed,thu,fri,sata,b,c;28第第8 8章章 結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體8.3.2 枚舉類型變量的賦值和使用枚舉類型在使用中有以下規(guī)定:1、枚舉值是常量,不能再用賦值語句對它賦值。例如:對枚舉類型weekday的枚舉值再作以下賦值: sun=5; / 錯誤 sun=mon; / 錯誤2、枚舉值本身由系統(tǒng)定義了一個表示序號的數(shù)值,

18、編譯時默認(rèn)按順序使枚舉值的序號為0、1、2、。例如:在weekday類型中,sun的序號為0、mon序號為1、sat序號為6。 a=mon; / 變量a的值為l printf(“d”,a); / 輸出129第第8 8章章 結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體8.3.2 枚舉類型變量的賦值和使用3、枚舉值的數(shù)值序號也可以在定義時由程序指定。例如: enum weekday sun=7,mou=1,tue,wed,thu,fri,sat;定義sun為7、mon為1、以后順序加1至sat為6。4、只能把枚舉值賦予枚舉變量,不能把枚舉值的序號直接賦予枚舉變量。例如: weekday a,b; a=sum; b

19、=mon; / 正確 a=0; b=1; / 錯誤如一定要把枚舉值的序號賦予枚舉變量,必須用強制類型轉(zhuǎn)例如:a=(enum weekday)2; / 將序號為2的枚舉值賦予枚舉變量a,相當(dāng)于a=tue;30第第8 8章章 結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體8.3.2 枚舉類型變量的賦值和使用5、枚舉值不是字符常量也不是字符串常量,使用時不能加單引號、雙引號。6枚舉值可以用于作判斷比較。例如: if (b=mon) if (csun)注意:枚舉值的比較規(guī)則是按其在定義時的序號比較31第第8 8章章 結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體【例8.8】枚舉類型定義和使用。#include enum colorred

20、,yellow,green,blue,whilt,blackco1,co2,co3;void main() co1=blue; co2=red; co3=black; if (co3co1) printf(%d %dn,co3,co1); else printf(%d %dn,co3,co2);32第第8 8章章 結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體8.4 利用typedef自定義類型語言允許用戶使用自定義類型符typedef為已經(jīng)存在的數(shù)據(jù)類型取“別名”,以“別名”代替已經(jīng)存在的數(shù)據(jù)類型來定義變量。格式:typedef原數(shù)據(jù)類型名 新類型名;說明:原數(shù)據(jù)類型名是已經(jīng)存在的類型名,新類型名是用戶自定義標(biāo)識符。例如:typedef int INTEGER; INTEGER a,b; 與 int a,b; 等價33第第8 8章章 結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體8.4 利用typedef自定義類型如果利用typedef定義指針、結(jié)構(gòu)體等類型將帶來很大的方便,不僅使程序書寫簡單而且使意義更為明確,因而增強了可讀性。例如:typedef struct st char name20;int age;char sex;ST

溫馨提示

  • 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

提交評論