經(jīng)典c語言第七章結(jié)構(gòu)體、共用體與枚舉ppt課件_第1頁
經(jīng)典c語言第七章結(jié)構(gòu)體、共用體與枚舉ppt課件_第2頁
經(jīng)典c語言第七章結(jié)構(gòu)體、共用體與枚舉ppt課件_第3頁
經(jīng)典c語言第七章結(jié)構(gòu)體、共用體與枚舉ppt課件_第4頁
經(jīng)典c語言第七章結(jié)構(gòu)體、共用體與枚舉ppt課件_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第7章結(jié)構(gòu)體、共用體與枚舉教學(xué)目的:經(jīng)過本章學(xué)習(xí),要求學(xué)生能熟練運(yùn)用構(gòu)造體這一新的數(shù)據(jù)構(gòu)造編制較復(fù)雜的運(yùn)用程序,并掌握鏈表的建立、插入、刪除、查找等操作的算法。 本講重點:構(gòu)造體變量的定義、援用、初始化;用指針處置鏈表;typedef自定義構(gòu)造體類型的方法。 本講難點:用指針處置鏈表。教學(xué)方法:實際教學(xué)與實際教學(xué)相結(jié)合。第7章結(jié)構(gòu)體、共用體與枚舉第七章第七章 構(gòu)造體、共用體與枚舉構(gòu)造體、共用體與枚舉7.1 7.1 構(gòu)造體類型與變量構(gòu)造體類型與變量 7.2 7.2 構(gòu)造體數(shù)組構(gòu)造體數(shù)組 7.3 7.3 構(gòu)造體類型數(shù)據(jù)的指針構(gòu)造體類型數(shù)據(jù)的指針 7.4 7.4 構(gòu)造體位段構(gòu)造體位段 7.5 7.5

2、 共用體類型與變量共用體類型與變量7.6 7.6 枚舉類型與變量枚舉類型與變量 7.77.7程序設(shè)計舉例程序設(shè)計舉例 第7章結(jié)構(gòu)體、共用體與枚舉7.1 7.1 構(gòu)造體類型與變量構(gòu)造體類型與變量 7.1.1 7.1.1 構(gòu)造體類型定義構(gòu)造體類型定義構(gòu)造體類型定義的普通方式為:構(gòu)造體類型定義的普通方式為: struct struct 構(gòu)造體類型名構(gòu)造體類型名 類型類型1 1 成員成員1 1; 類型類型2 2 成員成員2 2; 類型類型n n 成員成員n n; ;例如:struct student int num; char name20; char sex; int age; float scor

3、e; char addr30; ;第7章結(jié)構(gòu)體、共用體與枚舉闡明:1. 構(gòu)造體類型由“struct 構(gòu)造體類型名一致闡明和援用。2. 只需變量才分配地址,類型定義并不分配內(nèi)存空間。3. 構(gòu)造體中闡明的各個成員類似于以前的變量,但在類型定義時不分配地址。4. 一樣類型的成員可以合在一個類型下闡明。如 struct student int num,age; char name20,sex,addr30; float score; ;5. 最后一定要以分號終了。第7章結(jié)構(gòu)體、共用體與枚舉6. 可以嵌套定義,即在構(gòu)造體類型定義中又有構(gòu)造體類型的成員。如 struct student int num,a

4、ge; char name20,sex,addr30; struct float Chinese,Math,Physics,English; score;/* 無名構(gòu)造體類型定義的成員score */ ;7. 構(gòu)造體類型有作用范圍的。即,它與變量一樣,有全局和部分之分。在一個函數(shù)中定義的構(gòu)造體類型是部分的,只能用于在該函數(shù)中定義構(gòu)造體變量;在函數(shù)之外定義的構(gòu)造體類型是全局的,可定義在其后用到的構(gòu)造體類型的全局和部分變量。 第7章結(jié)構(gòu)體、共用體與枚舉7.1.2 構(gòu)造體變量的定義和援用 定義構(gòu)造體類型變量有如下三種方式(以上面的構(gòu)造體類型 student為例):1. 定義構(gòu)造體類型之后再定義構(gòu)造體

5、類型變量,如 struct student a,b,c; 定義了三個構(gòu)造體類型變量a、b和c。2. 定義構(gòu)造體類型同時定義構(gòu)造體類型變量,如 struct student int num; char name20; char sex; int age; float score; char addr30; a,b,c; 也定義了三個構(gòu)造體類型變量a、b和c。第7章結(jié)構(gòu)體、共用體與枚舉3. 定義無名構(gòu)造體類型同時定義構(gòu)造體類型變量,如 struct int num; char name20; char sex; int age; float score; char addr30; a,b,c;也定

6、義了三個構(gòu)造體類型變量a、b和c。但這種方法只能在此定義變量,由于沒有類型稱號,所以這種構(gòu)造體類型無法反復(fù)運(yùn)用。第7章結(jié)構(gòu)體、共用體與枚舉無論哪種定義變量的方式,系統(tǒng)都將給已定義的變量分配地址。分配內(nèi)存空間的大小為各個成員所占地址空間的總和,并且各個成員變量是按類型定義的順序分配地址空間的。那么如何運(yùn)用各個成員變量呢?成員的援用方式:普通地,要援用到最底層的成員。 構(gòu)造體類型變量名.成員變量名.成員變量名. 第7章結(jié)構(gòu)體、共用體與枚舉【例7.1】構(gòu)造體成員援用舉例。main() struct student int num,age; char name20,sex,addr30; struct

7、 float Chinese,Math,Physics,English; score; a=4102,21,Li Ping,F, Road 11#,87,63,54,72; printf(No.:%dnName:%snSex:%cnAddress:%sn,a.num,, a.sex,a.addr); printf(Chinese:%5.1fnMath:%5.1fnPhisics:%5.1fnEnglish:%5.1fn, a.score.Chinese,a.score.Math,a.score.Physics,a.score.English);第7章結(jié)構(gòu)體、共用體與枚舉運(yùn)轉(zhuǎn)結(jié)果:N

8、o.:4102Name:Li PingSex:FAddress: Road 11#Chinese:87.0Math:63.0Physics:54.0English:72.0第7章結(jié)構(gòu)體、共用體與枚舉在從鍵盤讀入數(shù)據(jù)給變量賦值時,也要按地址方式進(jìn)展。如 scanf(%d,&a.num); scanf(%s,); scanf(%c,&a.sex); scanf(%f,&a.score.Chinese);構(gòu)造體變量還可以整體賦值,將上面程序修正如下,運(yùn)轉(zhuǎn)結(jié)果是一樣的。main() struct student int num,age; char name20,se

9、x,addr30; struct float Chinese,Math,Physics,English; score; a=4102,21,Li Ping,F, Road 11#,87,63,54,72,b; 第7章結(jié)構(gòu)體、共用體與枚舉b=a; /* 構(gòu)造體變量的整體賦值 */printf(No.:%dnName:%snSex:%cnAddress:%sn, b.num,,b.sex,b.addr);printf(Chinese:%5.1fnMath:%5.1fnPhysics:%5.1fn English:%5.1fn,b.score.Chinese, b.score.Math,

10、b.score.Physics,b.score.English);第7章結(jié)構(gòu)體、共用體與枚舉7.2 7.2 構(gòu)造體數(shù)組構(gòu)造體數(shù)組 和普通數(shù)組一樣,我們也可以定義構(gòu)造和普通數(shù)組一樣,我們也可以定義構(gòu)造體數(shù)組。那么,構(gòu)造體數(shù)組中的每個分量就體數(shù)組。那么,構(gòu)造體數(shù)組中的每個分量就相當(dāng)于一個構(gòu)造體變量了,用法自然與普通相當(dāng)于一個構(gòu)造體變量了,用法自然與普通構(gòu)造體變量一樣。通常地,構(gòu)造體數(shù)組都是構(gòu)造體變量一樣。通常地,構(gòu)造體數(shù)組都是一維的,當(dāng)然,也可以定義多維的。構(gòu)造體一維的,當(dāng)然,也可以定義多維的。構(gòu)造體數(shù)組相當(dāng)于一張二維數(shù)據(jù)表,表的橫向相當(dāng)數(shù)組相當(dāng)于一張二維數(shù)據(jù)表,表的橫向相當(dāng)于記錄,而列向可以稱為

11、屬性,用于描畫每于記錄,而列向可以稱為屬性,用于描畫每條記錄的一切信息。比如,下面的表格就可條記錄的一切信息。比如,下面的表格就可以用構(gòu)造體數(shù)組處置。以用構(gòu)造體數(shù)組處置。第7章結(jié)構(gòu)體、共用體與枚舉【例7.2】輸出上述表格信息。#define N 3struct student char num7,name7; int com,eng,total;main() int i; struct student stuN=202149,王學(xué)海, 83,77,0, 203120,劉玉芳,89,72,0, 202134,邱玲,76,68,0; printf(學(xué)號t姓名t計算機(jī)成果t英語成果t總成果n); 第

12、7章結(jié)構(gòu)體、共用體與枚舉for(i=0;iN;i+) stui.total=stui+stui.eng; printf(%st%st%dtt%dtt%dn, stui.num,,stui, stui.eng,stui.total); 運(yùn)轉(zhuǎn)結(jié)果:學(xué)號姓名計算機(jī)成果英語成果總成果202149王學(xué)海8377160203120劉玉芳8972161202134邱玲7668144第7章結(jié)構(gòu)體、共用體與枚舉【例5.3】統(tǒng)計候選人得票數(shù)。假設(shè)有三個候選人,由10個選民參與投票選出一個代表。#include string.hstruct person char name20; int coun

13、t;leader3=li,0,zhang,0,xue,0;main() int i,j; char select20; for(i=0;i10;i+) printf(%dtPlease input your result:,i+1); scanf(%s,select); for(j=0;j3;j+) if(strcmp(,select)=0) leaderj.count+; 第7章結(jié)構(gòu)體、共用體與枚舉printf(-=The result=-n); for(j=0;j-。 援用方法如下:援用方法如下: ( (* *構(gòu)造體指針變量名構(gòu)造體指針變量名).).成員名成員名 /

14、 /* *圓括號不能圓括號不能省略省略* */ /。 構(gòu)造體指針變量名構(gòu)造體指針變量名-成員名成員名 第7章結(jié)構(gòu)體、共用體與枚舉【例7.4】指向構(gòu)造體變量的指針的運(yùn)用。#include string.hmain() struct student long num; char name20,sex; float score; ; struct student stu,*p; p=&stu; stu.num=89101; strcpy(,Li Lin); stu.sex=M; 第7章結(jié)構(gòu)體、共用體與枚舉stu.score=89.5; printf(No.:%ldnname:

15、%snsex:%cnscore:%fn, (*p).num,(*p).name,(*p).sex,(*p).score); printf(No.:%ldnname:%snsex:%cnscore:%fn, p-num,p-name,p-sex,p-score);運(yùn)轉(zhuǎn)結(jié)果:No.:89101 name:Li Lin sex:M score:89.500000 No.:89101 name:Li Lin sex:M score:89.500000第7章結(jié)構(gòu)體、共用體與枚舉在存取構(gòu)造體變量中的成員值時,有如下三種方式:1. 構(gòu)造體變量名.成員名2. (*構(gòu)造體指針變量名).成員名3. 構(gòu)造體指針變量

16、名-成員名第7章結(jié)構(gòu)體、共用體與枚舉7.3.2 構(gòu)造體數(shù)組的指針與指針變量 【例7.5】構(gòu)造體數(shù)組指針舉例。struct student int num; char name20,sex; int age;struct student stu3=10101,Li Lin,M,18, 10102,Wan Fen,M,19, 10104,Liu Min,F,20;第7章結(jié)構(gòu)體、共用體與枚舉main() struct student *p; printf( No.tNametSextAgen); for(p=stu;pnum,p-name, p-sex,p-age);運(yùn)轉(zhuǎn)結(jié)果:No.NameSexA

17、ge10101 Li LinM1810102 Wan FenM1910104 Liu MinF20由于p是指向構(gòu)造體數(shù)組的指針變量,所以p+是按數(shù)組元素的長度挪動的,即它每次挪動都是挪動到數(shù)組中各個構(gòu)造體分量的首地址。 第7章結(jié)構(gòu)體、共用體與枚舉7.3.3 構(gòu)造體指針與變量作函數(shù)參數(shù)與普通變量一樣,構(gòu)造體指針和變量也可以作為函數(shù)的參數(shù)進(jìn)展值的傳送,略有不同的是構(gòu)造體變量的成員也可以作為函數(shù)的參數(shù)。函數(shù)的前往值也可以是構(gòu)造體類型的數(shù)據(jù)?!纠?.6】找出例7.5中的第一個女生的記錄。#include stdio.hstruct student int num; char name20,sex; i

18、nt age;struct student stu3=10101,Li Lin,M,18, 10102,Wan Fen,M,19, 10104,Liu Min,F,20;第7章結(jié)構(gòu)體、共用體與枚舉main() struct student *p,*search(); p=search(stu,3); printf(%dt%st%ct%dn,p-num,p-name,p-sex,p-age);struct student *search(struct student *s,int n) struct student *q=s; for(;qsex=F) return q; return NULL

19、;運(yùn)轉(zhuǎn)結(jié)果:10104 Liu MinF20第7章結(jié)構(gòu)體、共用體與枚舉7.3.4 自定義類型 除可直接運(yùn)用提供的規(guī)范類型和自定義的類型構(gòu)造、共用、枚舉外,也可運(yùn)用typedef定義已有類型的別名。該別名與規(guī)范類型名一樣,可用來定義相應(yīng)的變量。 定義已有類型別名的方法如下: 1按定義變量的方法,寫出定義體; 2將變量名換成別名; 3在定義體最前面加上typedef。例如: 給實型float定義1個別名REAL。 1按定義實型變量的方法,寫出定義體:float f; 2將變量名換成別名: float REAL; 3在定義體最前面加上typedef:typedef float REAL;第7章結(jié)構(gòu)體

20、、共用體與枚舉給如下所示的構(gòu)造類型struct date定義1個別名DATE。struct date int year, month, day; ;1按定義構(gòu)造變量的方法,寫出定義體: struct date d;2將變量名換成別名: struct date DATE;3在定義體最前面加上typedef: typedef struct date int year, month, day; DATE;第7章結(jié)構(gòu)體、共用體與枚舉例如,自定義一個數(shù)組類型名ARRAY:1.寫出定義體: int a100;2.將變量名換成別名: int ARRAY100;3.在定義體最前面加上typedef: type

21、def int ARRAY100;用新類型名定義變量 ARRAY a,b,c;標(biāo)識符a、b和c都被定義成具有100個分量的整型一維數(shù)組。相當(dāng)于下面定義方式:int a100,b100,c100;闡明: 用typedef只是給已有類型添加個別名,并不能發(fā)明個 新的類型。就好像人一樣,除學(xué)名外,可以再取一個小名或雅號,但并不能發(fā)明出另一個人來。第7章結(jié)構(gòu)體、共用體與枚舉7.4 7.4 構(gòu)造體位段構(gòu)造體位段 以前引見的數(shù)據(jù)存取都是以字節(jié)為單位的。實踐上,有時存儲一個數(shù)據(jù)不用用一個或多個字節(jié),只須運(yùn)用一個或幾個二進(jìn)制位即可。例如,存放真假值,只須運(yùn)用一個二進(jìn)制位存放1或0即可。這樣,經(jīng)常在一個字節(jié)中可

22、以存放多個數(shù)據(jù),從而節(jié)省大量的存儲空間。運(yùn)用二進(jìn)制位來存儲信息可以有很多種方法,其中最主要的一種就是位段。 C言語允許在一個構(gòu)造體上以二進(jìn)制位為單位來指定其成員所占空間的長度,這種以位為單位的成員就稱為“位段或“位域(bit field)。第7章結(jié)構(gòu)體、共用體與枚舉例如:struct packed_data unsigned a:2; /* 指定成員a占2位 */ unsigned b:6; /* 指定成員b占6位 */ unsigned c:5; /* 指定成員c占5位 */ unsigned d:3; /* 指定成員d占3位 */ int i; /* 指定成員i為整型,占16位 */dat

23、a; /* 定義構(gòu)造體類型同時定義了一個變量data */其內(nèi)存分配為:a、b、c、d分別占2位、6位、5位、3位。i為整型成員,占2個字節(jié)。這樣,變量data共占4個字節(jié),見圖7.1。第7章結(jié)構(gòu)體、共用體與枚舉由于位段本身是在一個構(gòu)造體中,所以其成員的存取方法與構(gòu)造體數(shù)據(jù)的存取方法一樣。假設(shè),data.a=2,data.b=37,data.c=28,data.d=6,data.i=300,那么內(nèi)存數(shù)據(jù)圖見圖7.2。 在給位段成員賦值時,一定要留意成員的取值范圍。比如,a占兩位,其取值范圍為:0011,即03。假設(shè)數(shù)據(jù)超出了它們的取值范圍,將會喪失。運(yùn)用位段時應(yīng)留意以下幾點:1. 一個位段長度

24、不能超越一個存儲單元(通常為2字節(jié))。2. 一個位段不能跨越兩個存儲單元。本單元剩余二進(jìn)制位假設(shè)存放不下一個位段時,那么省略不用,這個位段自動放到下一存儲單元開頭位置。第7章結(jié)構(gòu)體、共用體與枚舉3. 用戶不想用的二進(jìn)制位可以定義成無名位段。如,struct packed_data unsigned a:2; unsigned :6; /* 指定無名位段,占6位,不用 */ unsigned c:5; unsigned d:3; int i; data;4. 設(shè)置長度為0的位段,使得下一個位段從下一字節(jié)開場存放。struct packed_data unsigned a:2; unsigned

25、:0;/* 指定長度為0位段,使得位段c從下一字節(jié)開場 */ unsigned c:5; unsigned d:3; int i; data;第7章結(jié)構(gòu)體、共用體與枚舉5. 位段數(shù)據(jù)可以按整型數(shù)據(jù)援用和輸出。6. 不能定義位段數(shù)組。 7. 位段成員的類型必需指定為unsigned int。 【例7.7】位段操作舉例。typedef struct unsigned int f1:1; unsigned int f2:2; unsigned int :0; unsigned int data:4; bitfield;main() bitfield btf; btf.f1=1; btf.f2=2;

26、btf.data=9; 第7章結(jié)構(gòu)體、共用體與枚舉printf(sizeof(btf)=%dn,sizeof(bitfield); printf(btf.f1=%dn,btf.f1); printf(btf.f2=%dn,btf.f2); printf(btf.data=%dn,btf.data); printf(btf=%xHn,btf); printf(nPlease input 16 bit hexidecimal number:); scanf(%4x,&btf); printf(btf.f1=%dn,btf.f1); printf(btf.f2=%dn,btf.f2); pr

27、intf(btf.data=%dn,btf.data); printf(btf=%dn,btf);第7章結(jié)構(gòu)體、共用體與枚舉運(yùn)轉(zhuǎn)結(jié)果:sizeof(btf)=2btf.f1=1btf.f2=2btf.data=9btf=9d5HPlease input 16 bit hexidecimal number:9ae4btf.f1=0btf.f2=2btf.data=10btf=-25884第7章結(jié)構(gòu)體、共用體與枚舉7.5 7.5 共用體類型與變量共用體類型與變量 有時需求將不同類型的數(shù)據(jù)存放到同一段有時需求將不同類型的數(shù)據(jù)存放到同一段內(nèi)存單元中。需求什么類型的數(shù)據(jù)這里就存放內(nèi)存單元中。需求什么類型

28、的數(shù)據(jù)這里就存放什么類型的數(shù)據(jù)。這些數(shù)據(jù)的起始地址都是一什么類型的數(shù)據(jù)。這些數(shù)據(jù)的起始地址都是一樣的,數(shù)據(jù)之間相互覆蓋,只需最后一次存入樣的,數(shù)據(jù)之間相互覆蓋,只需最后一次存入的數(shù)據(jù)才是有效的。這種幾個不同的變量占用的數(shù)據(jù)才是有效的。這種幾個不同的變量占用同一段內(nèi)存的構(gòu)造稱為同一段內(nèi)存的構(gòu)造稱為“共用體類型的構(gòu)造。共用體類型的構(gòu)造。7.5.1 7.5.1 共用體類型定義共用體類型定義共用體類型定義的普通方式為:共用體類型定義的普通方式為: union union 共用體類型名共用體類型名 類型類型1 1 成員成員1 1; 類型類型2 2 成員成員2 2; 類型類型n n 成員成員n n; ;

29、第7章結(jié)構(gòu)體、共用體與枚舉例如:union data int i; char ch; float f; ; 從定義方式上來看,它同構(gòu)造體極為類似。所不同的是它闡明的幾個成員不像構(gòu)造體那樣順序存儲,而是疊放在同一個地址開場的空間上,見圖7.3。共用體類型的長度為最大成員所占空間的長度。比如,上面的union data類型的長度為4個字節(jié),也就是float類型所占的空間長度。圖7.3第7章結(jié)構(gòu)體、共用體與枚舉7.5.2 共用體變量的定義和援用 同構(gòu)造體變量類似,定義共用體類型變量也有如下三種方式(以上面的共用體類型union data為例):1. 定義共用體類型之后再定義共用體類型變量,如 uni

30、on data a,b,c; 定義了三個共用體類型變量a、b和c。2. 定義共用體類型同時定義共用體類型變量,如 union data int i; char ch; float f; a,b,c; 也定義了三個共用體類型變量a、b和c。第7章結(jié)構(gòu)體、共用體與枚舉3. 定義無名共用體類型同時定義共用體類型變量,如 union int i; char ch; float f; a,b,c; 也定義了三個共用體類型變量a、b和c。但這種方法只能在此定義變量,由于沒有類型稱號,所以這種方式的類型無法反復(fù)運(yùn)用。共用體成員的援用方式與構(gòu)造體成員的援用方式?jīng)]有差別,普通地,也要援用到最底層的成員。成員援用

31、方式為: 共用體類型變量名.成員變量名.成員變量名. 第7章結(jié)構(gòu)體、共用體與枚舉【例7.8】共用體類型舉例。union data int i; char ch; float f;main() union data ua; ua.i=10; ua.ch=A; ua.f=3.14; printf(i=%dtch=%ctf=%ftua=%fn,ua.i,ua.ch,ua.f,ua);運(yùn)轉(zhuǎn)結(jié)果為:i=-2621ch= f=3.140000ua=49.920021只需最后一次賦值的成員f是有效的值。 第7章結(jié)構(gòu)體、共用體與枚舉留意: 共用體變量不能整體賦值,也不可以對共用體變量進(jìn)展初始化處置;共用體變量

32、不能作函數(shù)參數(shù)傳送,也不能使函數(shù)前往一個共用體類型的數(shù)據(jù);但可以運(yùn)用共用體類型的指針和變量進(jìn)展參數(shù)傳送和成員援用等,其用法同構(gòu)造體類型。 第7章結(jié)構(gòu)體、共用體與枚舉7.6 7.6 枚舉類型與變量枚舉類型與變量7.6.1 7.6.1 枚舉類型定義枚舉類型定義 枚舉類型定義也根本上同構(gòu)造體和共用枚舉類型定義也根本上同構(gòu)造體和共用體類型定義,它的普通格式為:體類型定義,它的普通格式為: enum enum 枚舉類型名枚舉類型名 枚舉常量枚舉常量1=1=序號序號1 1, 枚舉常量枚舉常量2=2=序號序號2 2, 枚舉常量枚舉常量n=n=序號序號n n ; ;其中,枚舉常量是一種符號常量,也稱為枚其中,

33、枚舉常量是一種符號常量,也稱為枚舉元素,要符合標(biāo)識符的起名規(guī)那么。序號舉元素,要符合標(biāo)識符的起名規(guī)那么。序號是枚舉常量對應(yīng)的整數(shù)值,可以省略,省略是枚舉常量對應(yīng)的整數(shù)值,可以省略,省略序號那么按系統(tǒng)規(guī)定處置。序號那么按系統(tǒng)規(guī)定處置。第7章結(jié)構(gòu)體、共用體與枚舉留意類型定義中各個枚舉常量之間要由逗號間隔,而不是分號,最后一個枚舉元素的后面無逗號。例如,有如下類型定義:enum weekday sun,mon,tue,wed,thu,fri,sat;這里,列出了枚舉類型enum weekday一切能夠的7個值。省略序號,系統(tǒng)默許從0開場延續(xù)陳列。如上面的枚舉類型中,sun對應(yīng)0、mon對應(yīng)1、sat

34、對應(yīng)6。假設(shè)遇到有改動的序號,那么序號從被改動位置開場延續(xù)遞增。例如,假設(shè)把上面的枚舉類型改為下面的方式:enum weekday sun,mon=6,tue,wed,thu=20,fri,sat;那么7個枚舉元素的序號依次為:0、6、7、8、20、21、22。 第7章結(jié)構(gòu)體、共用體與枚舉7.6.2 枚舉變量與枚舉元素 同構(gòu)造體與共用體變量類似,定義枚舉類型變量也有如下三種方式(以上面的枚舉類型enum weekday為例):1. 定義枚舉類型之后再定義枚舉類型變量,如 enum weekday yesterday,today,tomorrow;2. 定義枚舉類型同時定義枚舉類型變量,如enu

35、m weekday sun,mon,tue,wed,thu,fri,sat yesterday,today,tomorrow; 3. 定義無名枚舉類型同時定義變量,如 enum sun,mon,tue,wed,thu,fri,sat yesterday,today,tomorrow;這種類型無法反復(fù)運(yùn)用 第7章結(jié)構(gòu)體、共用體與枚舉闡明1枚舉型僅順應(yīng)于取值有限的數(shù)據(jù)。例如,根據(jù)現(xiàn)行的歷法規(guī)定,周天,年個月。2取值表中的值稱為枚舉元素,其含義由程序解釋。例如,不是由于寫成“Sun就自動代表“星期天?,F(xiàn)實上, 枚舉元素用什么表示都可以。3枚舉元素可以進(jìn)展比較。4不允許直接把一個整數(shù)賦值給一個枚舉變量

36、 如,today=5是非法的, 應(yīng)該進(jìn)展強(qiáng)迫類型轉(zhuǎn)換, 寫成:today=(enum weekday)5; 5枚舉元素的值是不能直接輸出的 ,通常要用到switch語句與字符串輸出語句結(jié)合起來才行。6枚舉型變量的取值僅限于值表中的值。第7章結(jié)構(gòu)體、共用體與枚舉【例7.9】口袋中有紅、黃、藍(lán)、白、黑5種顏色的球假設(shè)干個。每次從口袋中取出3個球,問得到3種不同顏色的球的一切能夠取法,并打印出每種組合的3種顏色。main() enum colorred,yellow,blue,white,black; enum color i,j,k,pri; int n,loop; n=0; for(i=red;i=black;i+) for(j=red;j=black;j+) 第7章結(jié)構(gòu)體、共用體與枚舉if(i!=j) for(k=red;k=black;k+) if(k!=i)&(k!=j) printf(%-4d,+n

溫馨提示

  • 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

提交評論