復雜數(shù)據(jù)類型yh課件_第1頁
復雜數(shù)據(jù)類型yh課件_第2頁
復雜數(shù)據(jù)類型yh課件_第3頁
復雜數(shù)據(jù)類型yh課件_第4頁
復雜數(shù)據(jù)類型yh課件_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、復雜數(shù)據(jù)類型yh第第7章章 復雜數(shù)據(jù)類型復雜數(shù)據(jù)類型7.1 結構體結構體7.2 聯(lián)合體聯(lián)合體7.3 枚舉類型枚舉類型7.4 復雜數(shù)據(jù)類型應用綜合舉例復雜數(shù)據(jù)類型應用綜合舉例復雜數(shù)據(jù)類型yh7.1 結構體結構體 在實際問題中,一組數(shù)據(jù)往往具有不同的數(shù)據(jù)類型。例如,在學生登記表中,姓名應為字符型;學號可為整型或字符型;年齡應為整型;性別應為字符型;成績可為整型或實型。 顯然不能用一個數(shù)組來存放這一組數(shù)據(jù)。因為數(shù)組中各元素的類型和長度都必須一致,以便于編譯系統(tǒng)處理。 “結構體”是一種構造類型,它是由若干“成員”組成的。每一個成員可以是一個基本數(shù)據(jù)類型或者又是一個構造類型。 復雜數(shù)據(jù)類型yh7.1.1

2、 結構體類型的定義結構體類型的定義 在學生登記表中,每個學生的記錄都是由編號,姓名,性別和工資等數(shù)據(jù)項組成,這些數(shù)據(jù)項描述了一個員工的幾個方面的信息。 如果分開用獨立的變量表示,很難看出這些數(shù)據(jù)有什么聯(lián)系,處理起來也不方便。 C語言提供了結構體數(shù)據(jù)類型,將不同類型的數(shù)據(jù)組織成一個整體 。復雜數(shù)據(jù)類型yh7.1.1 結構體類型的定義結構體類型的定義 定義一個結構體的一般形式為: struct 結構體名結構體名 成員列表;成員列表; ; struct是關鍵字,表示一個結構體類型,成員列表由若干個成員組成, 每個成員都是該結構體的一個組成部分。對每個成員也必須作類型說明,其形式為:類型說明符類型說明

3、符 成員名成員名; 成員名的命名應符合標識符的書寫規(guī)定。應注意在括號后的分號是不可少的。復雜數(shù)據(jù)類型yh7.1.2 結構體變量的定義和引用結構體變量的定義和引用 定義一個結構體變量有以下三種方法: 1. 先定義結構體,再說明結構體變量。如: struct workerint num;char name20;char sex;float wage;struct worker person1,person2;復雜數(shù)據(jù)類型yh7.1.2 結構體變量的定義和引用結構體變量的定義和引用 關鍵字struct說明該變量是結構體類型,而worker指定變量為某一特定的結構體類型。 說明了結構體變量后,系統(tǒng)就會

4、為每個結構體變量分配一段連續(xù)的內(nèi)存空間 char genderchar name20int numperson1float wagechar genderchar name20int numfloat wageperson2復雜數(shù)據(jù)類型yh7.1.2 結構體變量的定義和引用結構體變量的定義和引用 2. 在定義結構體類型的同時說明結構體變量。例如: struct workerint num;char name20;char sex;float wage;person1,person2;復雜數(shù)據(jù)類型yh7.1.2 結構體變量的定義和引用結構體變量的定義和引用 3. 直接說明結構體變量。例如: st

5、ructint num;char name20;char sex;float wage;person1,person2; 復雜數(shù)據(jù)類型yh7.1.2 結構體變量的定義和引用結構體變量的定義和引用在結構體類型中,成員也可以是一個結構體, 即構成了嵌套的結構體。如: struct dateint month;int day;int year;structint num;char name20;char sex;struct date birthday;float wage;person1,person2; 復雜數(shù)據(jù)類型yh7.1.2 結構體變量的定義和引用結構體變量的定義和引用 引用結構體變量的成

6、員可以通過成員運算符“.”來表示。 結構體變量名結構體變量名.成員名成員名 例如:person1.num 即第一個人的學號person2.sex 即第二個人的性別 person1.birthday.month 即第一個人出生的月份 復雜數(shù)據(jù)類型yh7.1.2 結構體變量的定義和引用結構體變量的定義和引用 定義一個指向結構體變量person1的指針:struct worker *p1;p1 = &person1; 要引用指針指向的結構體成員,可以這樣來表示:指針變量名指針變量名-結構體成員結構體成員例如:用p1-num, p1-name, p1-sex等來引用結構體中的成員。復雜數(shù)據(jù)類型

7、yh7.1.3 結構體變量的賦值結構體變量的賦值 結構體變量的賦值就是給各成員賦值,可直接通過賦值語句來完成,如:person1.num=28536;strcpy(,“Liu Xing); 結構體變量的賦值也可以通過對成員的輸入語句來實現(xiàn),如:scanf(%c %f,&person1.sex, &person1.wage);復雜數(shù)據(jù)類型yh7.1.4 簡化結構體類型名簡化結構體類型名struct 結構體類型名結構體類型名 結構體變量名結構體變量名定義結構體變量時,不能只指定為“struct”而不指定結構體名,必須用“struct 結構體類型名”兩個符號一

8、起來表示一個結構體類型。 用宏定義簡化結構體類型名的方法如下:#define 宏名 struct 結構體類型名 宏名結構體成員列表;宏名 結構體變量名; 復雜數(shù)據(jù)類型yh7.1.4 簡化結構體類型名簡化結構體類型名 還可以通過typedef命令來簡化結構體類型名。typedef命令是定義新的類型名來代替已有的類型名。如:typedef int INTEGER;該語句指定用INTEGER表示int類型 用typedef定義一個結構體類型的方法如下:typedef structint num;char name20;char sex;float wage; WKER;WKER person1, p

9、erson2;復雜數(shù)據(jù)類型yh7.1.5 結構體數(shù)組結構體數(shù)組一個結構體類型的變量也可以作為一個數(shù)組的元素,因此可以構成結構體型數(shù)組。 struct workerint num;char *name;char sex;float wage;person5; 定義了一個結構體數(shù)組person,共有5個元素,person0person4。每個數(shù)組元素都具有struct worker的結構形式。 復雜數(shù)據(jù)類型yh7.1.5 結構體數(shù)組結構體數(shù)組struct workerint num;char *name;char sex;float wage;person5=28535,Li ping,M,250

10、0,28536,Liu Xing,M,2300,28537,He fang,F,2360,28538,Cheng ling,F,2680,28539,Wang ming,M,2400;復雜數(shù)據(jù)類型yh7.2 聯(lián)合體聯(lián)合體 在實際問題中有很多這樣的例子。例如在學校的學生信息中填寫以下表格: 學 號 姓 名課 程 成 績 對于“成績”一項,有的課程用分數(shù)表示,有的課程用等級A,B,C,D來表示。如果有分數(shù)表示成績,可用一個整型變量,但如果用等級A,B,C,D來表示,就只能用字符類型的變量。要求把這兩種類型不同的數(shù)據(jù)都填入“成績”這個變量中,就必須把“成績”定義為包含整型和字符型這兩種類型的“聯(lián)合體

11、”。 在結構體中各成員有各自的內(nèi)存空間,一個結構體變量的總長度是各成員長度之和。而在“聯(lián)合體”中,各成員共享一段內(nèi)存空間,一個聯(lián)合體變量的長度等于各成員中最長的長度。 復雜數(shù)據(jù)類型yh7.2.1 聯(lián)合體類型的定義聯(lián)合體類型的定義 定義一個聯(lián)合體類型的一般形式為: union 聯(lián)合體名聯(lián)合體名 成員表成員表 ; 成員表中含有若干成員,成員的一般形式為: 類型說明符類型說明符 成員名成員名 復雜數(shù)據(jù)類型yh7.2.1 聯(lián)合體類型的定義聯(lián)合體類型的定義例如:union resultInt score;char level;定義了一個名為result的聯(lián)合體類型,它含有兩個成員,一個為整型,成員名為s

12、core;另一個為字符類型,成員名為level。 復雜數(shù)據(jù)類型yh7.2.2 聯(lián)合體變量的定義和引用聯(lián)合體變量的定義和引用 聯(lián)合體變量的說明和結構體變量的說明方式相同,也有三種形式。 1.先定義,再說明 union resultint score;char level;union result a,b; 2.定義同時說明 union result int score;char level; a,b; 3.直接說明 union int score;char level; a,b; 復雜數(shù)據(jù)類型yh7.2.2 聯(lián)合體變量的定義和引用聯(lián)合體變量的定義和引用 經(jīng)說明后的a,b變量均為result類型。

13、 聯(lián)合體的score成員為整型,占用內(nèi)存2個字節(jié)空間,level成員為一個字符,占用內(nèi)存1個字節(jié)空間,它們共用內(nèi)存中的2個字節(jié)單元。 因此,a,b變量的長度應等于 result的成員中最長的長度,即等于score成員的長度,共2個字節(jié)。 復雜數(shù)據(jù)類型yh7.2.2 聯(lián)合體變量的定義和引用聯(lián)合體變量的定義和引用 聯(lián)合體變量的成員引用方式為: 聯(lián)合變量名聯(lián)合變量名.成員名成員名 例如,a被說明為result類型的變量之后,可使用a.score或a.level來引用聯(lián)合體變量的成員。 聯(lián)合體變量的成員可以像普通變量一樣進行其數(shù)據(jù)類型允許的運算操作,如:賦值操作,輸入輸出操作,代數(shù)運算,關系運算等。

14、復雜數(shù)據(jù)類型yh7.2.3 聯(lián)合體變量的賦值聯(lián)合體變量的賦值對聯(lián)合體變量的賦值和使用都只能是對變量的成員進行。如:a.score = 87;a.score +;printf(“score=%dn”,a.score);不允許只用聯(lián)合體變量名作賦值或其它操作。以下兩種操作都是錯誤的:a = b;printf(“score=%dn”,a);也不允許對聯(lián)合體變量作初始化賦值,賦值只能在程序中進行。如:union result int score;char level; a = 87,”A”;復雜數(shù)據(jù)類型yh7.2.3 聯(lián)合體變量的賦值聯(lián)合體變量的賦值 例7-6:用聯(lián)合體變量實現(xiàn)不同類型數(shù)據(jù)的輸出。 #

15、include stdio.hunion dataint i;float f;main()union data d;d.i=200;printf(“i:%dn”,d.i);d.f=200.0;printf(“f:%fn”,d.f);程序運行結果為:i:200f:200.000000復雜數(shù)據(jù)類型yh7.3 枚舉類型枚舉類型 在實際問題中,有些變量的取值被限定在一個有限的范圍內(nèi)。例如,一個星期內(nèi)只有七天,一年只有十二個月,一個班每周有六門課程等等。 如果把這些量說明為整型,字符型或其它類型顯然是不妥當?shù)?。為此,語言提供了一種稱為“枚舉”的類型。 在“枚舉”類型的定義中列舉出所有可能的取值,被說明為

16、該“枚舉”類型的變量取值不能超過定義的范圍。 復雜數(shù)據(jù)類型yh7.3 枚舉類型枚舉類型 枚舉類型定義的一般形式為: enum 枚舉名枚舉名 枚舉值表枚舉值表 ; enum為關鍵字,表示定義一個枚舉類型。枚舉名表示定義的具體枚舉類型的名字。在枚舉值表中應羅列出該枚舉類型的所有可用值,這些值也稱為枚舉元素。例如: enum weekday sun,mou,tue,wed,thu,fri,sat ; 該枚舉名為weekday,枚舉值共有7個,即一周中的七天。凡被說明為weekday類型變量的取值只能是七天中的某一天,并用枚舉值表中的7個可用值分別表示。復雜數(shù)據(jù)類型yh7.3 枚舉類型枚舉類型 枚舉變

17、量的說明 :enum weekday.;enum weekday a,b,c; 或者為:enum weekday.a,b,c; 或者為: enum.a,b,c;復雜數(shù)據(jù)類型yh7.3 枚舉類型枚舉類型使用說明:1.枚舉值是常量,不是變量。不能在程序中用賦值語句再對它賦值。例如 : sun=5;mon=2;sun=mon; 都是錯誤語句。 2.枚舉元素本身由系統(tǒng)定義了一個表示序號的數(shù)值,從0 開始順序定義為0,1,2。 如在weekday中,sun值為0,mon值為1, ,sat值為6。 main()enum weekday sun,mon,tue,wed,thu,fri,sat a,b,c;a

18、=sun;b=mon;c=tue;printf(%d,%d,%d,a,b,c);輸出結果為:1,2,3復雜數(shù)據(jù)類型yh7.3 枚舉類型枚舉類型3. 只能把枚舉值賦予枚舉變量,不能把元素的數(shù)值直接賦予枚舉變量。 如:a=sum;b=mon; 這兩個賦值語句是正確的。 而: a=0;b=1; 這兩個賦值語句是錯誤的。 如一定要把數(shù)值賦予枚舉變量,則必須用強制類型轉換,如:a=(enum weekday)2;其意義是將順序號為2的枚舉元素賦予枚舉變量a,相當于:a=tue; 還應該說明的是枚舉元素不是字符常量也不是字符串常量,使用時不要加單、雙引號。如: a=tue;a=”mon”; 這兩種賦值語句

19、都是錯誤的。復雜數(shù)據(jù)類型yh7.3 枚舉類型枚舉類型4枚舉定義的時候可以自己定義元素的順序號。若給某個元素定義了順序號,其后面的順序號依次加1,如:enum string x1=5,x2,x3,x4;enum string x=x3;此時,枚舉變量x實際上的順序號是7。枚舉變量缺省是認為第一個元素的順序號是0,然后依次加1,如果遇到用戶自定義順序號,則按照用戶的定義號,后面的元素一次加1。如: enum string x1,x2=0,x3=50,x4x;由于枚舉變量x的第一個元素x1沒有定義順序號,所以缺省認為x1=0。而第二個和第三個元素x2和x3是用戶自定義順序號,x2=0,x3=50。第四個元素x4沒有定義順序號,則按照前一個元素的順序號加1,因此x4

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論