




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第第8章章 結構體、共用體及結構體、共用體及枚舉類型枚舉類型臧洌臧洌計算機基礎教學部計算機基礎教學部南京航空航天大學信息科學與技術學院南京航空航天大學信息科學與技術學院 2019.8.引言引言l基本類型基本類型 : l 整型整型 、實型、實型 、字符型、字符型.l構造數(shù)據類型構造數(shù)據類型: l 由簡單數(shù)據類型由簡單數(shù)據類型int、float、 char組合組合而成的有機整體數(shù)據類型。而成的有機整體數(shù)據類型。l數(shù)組數(shù)組 有相同類型的數(shù)據集合有相同類型的數(shù)據集合l結構體結構體不同類型的數(shù)據集合不同類型的數(shù)據集合本章內容本章內容8.1 結構體的定義及應用結構體的定義及應用8.2 共用體的定義及應用共
2、用體的定義及應用8.3 枚舉類型枚舉類型8.4 用用typedef定義類型定義類型l結構體類型的定義結構體類型的定義l結構體類型變量的定義結構體類型變量的定義l結構體類型變量及其成員的引用結構體類型變量及其成員的引用l結構體數(shù)組結構體數(shù)組 8.1 結構體的定義及應用結構體的定義及應用8.1.1結構體類型的定義結構體類型的定義l定義一個結構體類型的一般形式為:定義一個結構體類型的一般形式為: lstruct l l l ;關鍵字關鍵字分號不能少分號不能少 ; ; 可為簡單類型可為簡單類型也可為構造類型也可為構造類型8.1.1結構體類型的定義結構體類型的定義l例例l 以學生檔案為例,假設包括如下數(shù)
3、據項以學生檔案為例,假設包括如下數(shù)據項l 學號學號num):整型):整型l 姓名姓名name):字符串):字符串l 性別性別sex):字符型):字符型l 出生日期出生日期birthday):):date結構體結構體l 四門課成績四門課成績sc):一維實型數(shù)組):一維實型數(shù)組8.1.1結構體類型的定義結構體類型的定義依此格式定義上例依此格式定義上例struct date int year ,month ,day;struct student int num; char name12; char sex; struct date birthday; float sc4; ;如如struct dat
4、e 沒事先說明可沒事先說明可寫成:寫成:struct student int num ; char name12; char sex; struct int year; int month; int day; birthday; float sc4;8.1.1結構體類型的定義結構體類型的定義說明:說明:(1) 結構體類型是一種構造數(shù)據類型,它與結構體類型是一種構造數(shù)據類型,它與int, char,float等系統(tǒng)定義的基本數(shù)據類型具有同等地位,是由用戶自等系統(tǒng)定義的基本數(shù)據類型具有同等地位,是由用戶自行定義的。行定義的。(2) (2) 結構體類型不分配任何存儲空間。結構體類型不分配任何存儲空間
5、。相應結構體類型的變量、數(shù)組及動態(tài)開辟的相應結構體類型的變量、數(shù)組及動態(tài)開辟的存儲單元占存儲空間。存儲單元占存儲空間。構造的數(shù)據類型可以用來定義變量構造的數(shù)據類型可以用來定義變量8.1.2結構體類型變量的定義結構體類型變量的定義l三種方法三種方法l先定義結構體類型再定義變量先定義結構體類型再定義變量l在定義類型的同時定義變量在定義類型的同時定義變量 l直接定義結構體類型變量直接定義結構體類型變量 8.1.2結構體類型變量的定義結構體類型變量的定義l先定義結構體類型再定義變量先定義結構體類型再定義變量struct 結構體名結構體名 成員列表成員列表;struct 結構體名結構體名 變量名列表;變
6、量名列表;8.1.2結構體類型變量的定義結構體類型變量的定義l先定義結構體類型再定義變量例先定義結構體類型再定義變量例lstruct studentlint num;lchar name20;lchar sex;lint age;lfloat score;l;lstruct student stu1, stu2;8.1.2結構體類型變量的定義結構體類型變量的定義23902Zhang liF198523924Li lieM2088stu1stu2圖8-2 struct student類型變量的存儲示意8.1.2結構體類型變量的定義結構體類型變量的定義l在定義類型的同時定義變量在定義類型的同時定義
7、變量 l一般形式為:一般形式為:lstruct lll;8.1.2結構體類型變量的定義結構體類型變量的定義l例例lstruct studentlint num;lchar name20;lchar sex;lint age;lfloat score;l stu1, stu2;l作用與第作用與第1種方法相同種方法相同8.1.2結構體類型變量的定義結構體類型變量的定義l直接定義結構體類型變量直接定義結構體類型變量 l一般形式為:一般形式為:lstruct lll;8.1.2結構體類型變量的定義結構體類型變量的定義l例例lstruct lint num;lchar name20;lchar sex;
8、lint age;lfloat score;lstu1, stu2;無結構體類型名,最好不使用無結構體類型名,最好不使用8.1.2結構體類型變量的定義結構體類型變量的定義l在定義結構體類型變量的同時,可以指定其存在定義結構體類型變量的同時,可以指定其存儲類別。例如:儲類別。例如:lstatic struct student stud3;lauto struct student stud4;l在定義結構體類型變量的同時,可以對其值進在定義結構體類型變量的同時,可以對其值進行初始化,方法是用花括號將每一個成員的值行初始化,方法是用花括號將每一個成員的值括起來。例如:括起來。例如:lstruct s
9、tudent stud1=23901, LiLi , M, 19,86.5; 在花括號中列出的值在花括號中列出的值的類型及順序必須與的類型及順序必須與該結構體類型定義中該結構體類型定義中所說明的結構體成員所說明的結構體成員一一對應。一一對應。 8.1.3結構體類型變量及其成員的引用結構體類型變量及其成員的引用l兩種引用方式:兩種引用方式:l引用成員引用成員l引用整體引用整體 8.1.3結構體類型變量及其成員的引用結構體類型變量及其成員的引用l引用成員,方法:引用成員,方法:l . l “.”是成員運算符是成員運算符l例如:例如:l stud1.num=23901;l結構體變量的成員可以像普通變
10、量一樣進行各結構體變量的成員可以像普通變量一樣進行各種運算其類型規(guī)定的運算)。例如:種運算其類型規(guī)定的運算)。例如:lstud1.num+;lstud1.sex=stud2.sex;8.1.3結構體類型變量及其成員的引用結構體類型變量及其成員的引用l引用整體引用整體 l如定義以下的結構體類型:如定義以下的結構體類型:lstruct temptypelint i, j;lchar name10;l;ltemptype t1=12, 48, LiLi, t2;lt2=t1;l其中其中“t2=t1;”等價于:等價于:lt2.i=t1.i; lt2.j=t1.j;lstrcpy(, t1
11、.name);8.1.3結構體類型變量及其成員的引用結構體類型變量及其成員的引用l在引用結構體變量及其成員時,應注意在引用結構體變量及其成員時,應注意 :l不能將結構體變量作為一個整體進行輸入不能將結構體變量作為一個整體進行輸入/輸輸出。出。 l printf(%d %s %c %d %fn, stud1); l printf(%d , stud1.num); l結構體變量可以作函數(shù)的參數(shù),也可以作函數(shù)結構體變量可以作函數(shù)的參數(shù),也可以作函數(shù)的返回值。當函數(shù)的形參與實參為結構體變量的返回值。當函數(shù)的形參與實參為結構體變量時,這種結合方式屬于值調用方式,即屬于值時,這種結合方式屬于值調用方式,即
12、屬于值傳遞,形參的變化不影響實參。傳遞,形參的變化不影響實參。 /*有一個結構體變量有一個結構體變量stu,內含學生學號、姓名和四門,內含學生學號、姓名和四門課的成績。要求在課的成績。要求在main函數(shù)中賦值,在另一函數(shù)函數(shù)中賦值,在另一函數(shù)print中將它們輸出。這里用結構體變量作函數(shù)參數(shù)。中將它們輸出。這里用結構體變量作函數(shù)參數(shù)。 */#include #include struct studentint num;char name20;float score4;l例8. 18.1.3結構體類型變量及其成員的引用結構體類型變量及其成員的引用/*主函數(shù)主函數(shù)*/main( )void pri
13、nt(struct student);struct student stud;stud.num=2468;strcpy(,Li Wen);stud.score0=68.5;stud.score1=90;stud.score2=78.5;stud.score3=85.5;print(stud);l例結構體類型變量及其成員的引用結構體類型變量及其成員的引用/*輸出函數(shù)輸出函數(shù)*/void print(struct student stud)printf(numtt%dnnamett%sn, stud.num, );printf(Mathstt%f
14、nEnglishtt%fn, stud.score0, stud.score1);printf(programmingt%fnphysicstt%fn, stud.score2, stud.score3);l例8.1 8.1.3結構體類型變量及其成員的引用結構體類型變量及其成員的引用8.1.3結構體類型變量及其成員的引用結構體類型變量及其成員的引用l有關結構體類型的說明有關結構體類型的說明l (1類型與變量是不同的概念。類型是抽象類型與變量是不同的概念。類型是抽象的,而變量是具體的。在編譯時,對類型是不的,而變量是具體的。在編譯時,對類型是不分配空間的,只對變量分配空間。使用時只能分配空間的,
15、只對變量分配空間。使用時只能對變量賦值、存取或運算,而不能對一個類型對變量賦值、存取或運算,而不能對一個類型賦值、存取或運算。賦值、存取或運算。l (2對結構體中的成員,可以單獨使用。對結構體中的成員,可以單獨使用。 8.1.3結構體類型變量及其成員的引用結構體類型變量及其成員的引用l有關結構體類型的說明有關結構體類型的說明l(3成員也可以是一個結構體變量。如:成員也可以是一個結構體變量。如:lstruct datelint year;lint month;lint day;l;lstruct studentlint num;lchar name20;lchar sex;lstruct dat
16、e birthday; /*birthday是是struct date類型類型*/lchar addr40;l stu1, stu2;8.1.3結構體類型變量及其成員的引用結構體類型變量及其成員的引用l有關結構體類型的說明有關結構體類型的說明l (4結構體類型及其變量的使用與標準數(shù)據結構體類型及其變量的使用與標準數(shù)據類型及其變量的使用方式是一樣的,包括:類型及其變量的使用方式是一樣的,包括:l 變量的作用域和存儲類別;變量的作用域和存儲類別;l 可以作為函數(shù)的參數(shù)及返回值;可以作為函數(shù)的參數(shù)及返回值;l 可以定義結構體數(shù)組等??梢远x結構體數(shù)組等。 8.1.4結構體數(shù)組結構體數(shù)組l定義結構體數(shù)
17、組的方法與定義結構體變量的方法類似,也定義結構體數(shù)組的方法與定義結構體變量的方法類似,也可以有三種方法,只要在每一種方法的基礎上,增加數(shù)組可以有三種方法,只要在每一種方法的基礎上,增加數(shù)組維數(shù)的說明即可。如:維數(shù)的說明即可。如:lstruct studentl int num;l char name20;l char sex;l int age;l float score;l char addr30;l;lstruct student stud4;8.1.4結構體數(shù)組結構體數(shù)組l也可以直接定義一個結構體數(shù)組,如:也可以直接定義一個結構體數(shù)組,如:lstruct studentlll stud4
18、;l或或lstructlll stud4;8.1.4結構體數(shù)組結構體數(shù)組l圖圖8-4 結構體數(shù)組內存中存結構體數(shù)組內存中存放情況放情況.23901Zang LiF1978.535 Shanghai Road23902Wang FangF1992101 Taiping Road8.1.4結構體數(shù)組結構體數(shù)組l在定義結構體數(shù)組時可以對結構體數(shù)組進行初始化在定義結構體數(shù)組時可以對結構體數(shù)組進行初始化 lstruct studentlstud0l int num;l char name20;l char sex;l int age;l float score;stud1l char addr30;l
19、stud4 = /*第一種方法第一種方法*/l23901, Zang Li, F, 19, 78.5, 35 Shanghai Road,l23902, Wang Fang, F, 19, 92, 101 Taiping Road,l23905, Zhao Qiang, M, 20, 87, 56 Ninghai Road,l23908, Li Hai, M, 19, 95, 48 Jiankang Roadl;8.1.4結構體數(shù)組結構體數(shù)組struct student int num;char name20;char sex;int age; float score;char addr30;
20、 stud4= /*第二種方法第二種方法*/23901, Zang Li, F, 19, 78.5, 35 Shanghai Road, 23902, Wang Fang, F, 19, 92, 101 Taiping Road, 23905, Zhao Qiang, M, 20, 87, 56 Ninghai Road, 23908, Li Hai, M, 19, 95, 48 Jiankang Road; /*結構體數(shù)組的定義和使用。建立一個學生檔案的結結構體數(shù)組的定義和使用。建立一個學生檔案的結構體數(shù)組,描述一個學生的信息:學號、姓名、成績,構體數(shù)組,描述一個學生的信息:學號、姓名、成績
21、,并輸出已建立的學生檔案。并輸出已建立的學生檔案。 */#include struct studentint num;char name20;float score;l例結構體數(shù)組結構體數(shù)組 結構體類結構體類型定義型定義/*結構體數(shù)組的定義和使用。結構體數(shù)組的定義和使用。*/struct student Input( ) /*輸入一個學生信息,輸入一個學生信息,結構體變量作函數(shù)的返回值結構體變量作函數(shù)的返回值*/struct student stud;printf(Please input num,name and score:n);scanf(%d%s%f, &stu
22、d.num, , &stud.score);return stud;l例結構體數(shù)組結構體數(shù)組/*結構體數(shù)組的定義和使用。結構體數(shù)組的定義和使用。*/void Output(struct student stud) /*輸出一個學生信輸出一個學生信息息*/printf(%dtt%stt%fn, stud.num, , stud.score);l例結構體數(shù)組結構體數(shù)組 結構體變量結構體變量作函數(shù)參數(shù)作函數(shù)參數(shù)/*結構體數(shù)組的定義和使用。結構體數(shù)組的定義和使用。*/main( )int i;struct student st
23、uds3; /*定義一個具有三個定義一個具有三個結構體變量構成的數(shù)組結構體變量構成的數(shù)組*/for (i=0; i3; i+) /*調用調用Input函數(shù)輸入三個學函數(shù)輸入三個學生信息生信息*/studsi=Input( );printf(numttnamettscoren);for(i=0; i3; i+) /*調用調用Output函數(shù)輸出三函數(shù)輸出三個學生信息個學生信息*/Output(studsi); printf(n);l例結構體數(shù)組結構體數(shù)組/*結構體數(shù)組的定義和使用。求若干學生的平均成績。結構體數(shù)組的定義和使用。求若干學生的平均成績。 */#include stru
24、ct stud int num; char name20; int age; char sex; int score; ; 結構體類結構體類型定義型定義l例結構體數(shù)組結構體數(shù)組/*結構體數(shù)組的定義和使用。求若干學生的平均成績。結構體數(shù)組的定義和使用。求若干學生的平均成績。 */float average(struct stud studs , int n) /*求平均分求平均分*/int i;float aver=0;for(i=0; in; i+) aver += studsi.score; aver /= n;return aver; 結構體數(shù)組結構體數(shù)組作函數(shù)參數(shù)作函數(shù)參
25、數(shù)l例結構體數(shù)組結構體數(shù)組/*結構體數(shù)組的定義和使用。求若干學生的平均成績。結構體數(shù)組的定義和使用。求若干學生的平均成績。 */main(void) struct stud studs4= 020190101, Wu, 19, M, 80, 020190102, Li, 18, F, 95, 020190103, Zhang, 18, F, 78, 020190104, Zhao, 20, M, 88 ; float aver ; aver=average(studs, 4); /*調用求平均分函數(shù),求四個學生的平均分調用求平均分函數(shù),求四個學生的平均分*/ printf( a
26、verage:%fn, aver); 結構體數(shù)組作函結構體數(shù)組作函數(shù)參數(shù)與簡單變數(shù)參數(shù)與簡單變量數(shù)組作函數(shù)參量數(shù)組作函數(shù)參數(shù)類似數(shù)類似 l例結構體數(shù)組結構體數(shù)組8.2 共用體的定義及應用共用體的定義及應用l共用體類型及其變量的定義共用體類型及其變量的定義l共用體類型變量的引用共用體類型變量的引用l共用體數(shù)據類型的特點共用體數(shù)據類型的特點8.2.1共用體類型及其變量的定義共用體類型及其變量的定義union ;“共用體共用體與與“結構體結構體的定義形的定義形式類似,但式類似,但它們的含義它們的含義不同。不同。 8.2.1共用體類型及其變量的定義共用體類型及其變量的定義l不同數(shù)據類型
27、一組變量使用同一組內存單元。不同數(shù)據類型一組變量使用同一組內存單元。union data int i ; char c; float f; ;union data a,b,c;union data int i ; char c; float f; a,b,c;union int i ; char c; float f; a,b,c;共用體變量的定義同結構體一樣有三種形式:共用體變量的定義同結構體一樣有三種形式:8.2.1共用體類型及其變量的定義共用體類型及其變量的定義圖圖8-5 共用體存放內存示意圖共用體存放內存示意圖2000cfi結構體變量:各成員所占結構體變量:各成員所占 內存之和內存之和
28、共用體:為最長的成員長度共用體:為最長的成員長度結構體與共用體結構體與共用體所占內存長度所占內存長度8.2.2共用體類型變量的引用共用體類型變量的引用l共用體變量的引用方法類似于結構體變量。共用體變量的引用方法類似于結構體變量。l 共用體變量名共用體變量名.成員變量名成員變量名l也有兩種方式:也有兩種方式:l 1引用成員引用成員la.i /*引用共用體變量中的整型變量引用共用體變量中的整型變量i*/la.c /*引用共用體變量中的字符變量引用共用體變量中的字符變量c*/la.f /*引用共用體變量中的實型變量引用共用體變量中的實型變量f*/l 2引用整體引用整體l a.i=2;lb=a; /*
29、引用整體引用整體*/l但輸入但輸入/輸出時不能只引用共用體變量,例如:輸出時不能只引用共用體變量,例如:lprintf(%dn, a);l是錯誤的。是錯誤的。 8.2.3共用體數(shù)據類型的特點共用體數(shù)據類型的特點(1同一個內存段可以用來存放幾種不同類型的成員,同一個內存段可以用來存放幾種不同類型的成員,但在某一時刻只能存放其中一種,而不是同時存放幾但在某一時刻只能存放其中一種,而不是同時存放幾種。也就是說,在一個時刻只有一個成員起作用,其種。也就是說,在一個時刻只有一個成員起作用,其他的成員不起作用。他的成員不起作用。(2共用體變量中起作用的成員是最后一次存放的成共用體變量中起作用的成員是最后一
30、次存放的成員,在存入一個新的成員后原有的成員就失去作用。員,在存入一個新的成員后原有的成員就失去作用。如有以下賦值語句:如有以下賦值語句:a.i=10; a.c=A; a.f=1.8; 在完成以上在完成以上3個賦值運算以后,只有個賦值運算以后,只有a.f是有效的。是有效的。a.i和和a.c失去意義。失去意義。 8.2.3共用體數(shù)據類型的特點共用體數(shù)據類型的特點(3共用體變量的起始地址和其各成員的起始地址是同共用體變量的起始地址和其各成員的起始地址是同一地址。一地址。(4如果在定義共用體變量時對它初始化,則只允許有如果在定義共用體變量時對它初始化,則只允許有一個數(shù)賦給第一個數(shù)賦給第1個成員。例如
31、:個成員。例如:union int i; char c; float f; a = 10, A, 1.8; /* 不能這樣初始化不能這樣初始化*/union int i; char c; float f; a=10; /* 能這樣初始化能這樣初始化*/8.2.3共用體數(shù)據類型的特點共用體數(shù)據類型的特點(5共用體類型可以出現(xiàn)在結構體類型定義中,共用體類型可以出現(xiàn)在結構體類型定義中,也可以定義共用體數(shù)組。反之,結構體也可以也可以定義共用體數(shù)組。反之,結構體也可以出現(xiàn)在共用體類型定義中,數(shù)組也可以作為共出現(xiàn)在共用體類型定義中,數(shù)組也可以作為共用體的成員。用體的成員。/*分別取出一個整數(shù)的四個字節(jié)。分
32、別取出一個整數(shù)的四個字節(jié)。 */#include main( )int k;union int i;char c4;a;printf(Please input an integer:n);scanf(%d, &a.i);printf(four bytes:);for(k=3; k=0; k-)printf(%dt, (int)a.ck); printf(n); 一個整數(shù)的四個一個整數(shù)的四個字節(jié)分別對應字字節(jié)分別對應字符數(shù)組的每個元符數(shù)組的每個元素素l例共用體數(shù)據類型的特點共用體數(shù)據類型的特點8.3 枚舉類型枚舉類型l枚舉類型的定義枚舉類型的定義l枚舉類型變量的定義枚舉類
33、型變量的定義l枚舉類型變量的使用枚舉類型變量的使用8.3.1枚舉類型的定義枚舉類型的定義l“枚舉枚舉就是將變量允許取值的范圍一一列舉出來,就是將變量允許取值的范圍一一列舉出來,枚舉變量的取值限于列舉出來的值的范圍內。枚舉變量的取值限于列舉出來的值的范圍內。 l定義枚舉類型的一般形式為:定義枚舉類型的一般形式為:lenum ;l例如:例如:l enum day Sun, Mon, Tue, Wed, Thu, Fri, Sat ;l day是一個枚舉類型名,該枚舉常量列表中有是一個枚舉類型名,該枚舉常量列表中有7個枚個枚舉常量。每個枚舉常量所表示的整型數(shù)值在默認的情舉常量。每個枚舉常量所表示的整
34、型數(shù)值在默認的情況下,第況下,第1個為個為0,第,第2個為個為1,后一個總是前一個的值,后一個總是前一個的值加加1。 8.3.1枚舉類型的定義枚舉類型的定義l枚舉常量的值可以在定義時被顯式指定,被顯枚舉常量的值可以在定義時被顯式指定,被顯式指定的枚舉常量將獲得該值,沒有被指定的式指定的枚舉常量將獲得該值,沒有被指定的枚舉常量按照后一個總是前一個的值加枚舉常量按照后一個總是前一個的值加1的規(guī)的規(guī)則分別獲得值。例如:則分別獲得值。例如:l enum day Sun=7, Mon=1, Tue, Wed, Thu, Fri, Sat;8.3.2枚舉類型變量的定義枚舉類型變量的定義l定義一個枚舉變量前
35、,必須先定義一個枚舉類定義一個枚舉變量前,必須先定義一個枚舉類型,枚舉變量的定義形式:型,枚舉變量的定義形式:l enum ;l例如:例如:l enum day day1, day2, day3;l day是前面定義的枚舉類型名,是前面定義的枚舉類型名,day1、day2和和day3是三個枚舉變量名。它們的值應是枚舉是三個枚舉變量名。它們的值應是枚舉常量列表中規(guī)定的常量列表中規(guī)定的7個枚舉常量之一。個枚舉常量之一。l枚舉變量的定義也可以與枚舉類型的定義連在枚舉變量的定義也可以與枚舉類型的定義連在一起來寫。一起來寫。 8.3.3枚舉類型變量的使用枚舉類型變量的使用l通過例子來說明枚舉類型變量的使
36、用。通過例子來說明枚舉類型變量的使用。 /*根據輸入三角形各邊的長度,輸出三角形的形狀。根據輸入三角形各邊的長度,輸出三角形的形狀。 */#include main( )enum trianglescalene, isosceles, equilateral, notriangle;enum triangle tri;int a, b, c;printf(Please input a, b, c:n);scanf(%d%d%d, &a, &b, &c);if(a+b=c|a+c=b|b+c=a) tri=notriangle;else if(a=b&b=c) t
37、ri=equilateral;else if(a=b|b=c|a=c) tri=isosceles; else tri=scalene; 枚舉類型枚舉類型的定義的定義 l例8. 58.3.3枚舉類型變量的使用枚舉類型變量的使用 枚舉類型枚舉類型的變量的的變量的定義定義 switch(tri) case scalene: printf(scalene trianglen); break;case isosceles: printf(isoceles trianglen); break;case equilateral: printf(equilateral trianglen); break;
38、case notriangle: printf(notrianglen); break; l例8. 58.3.3枚舉類型變量的使用枚舉類型變量的使用 枚舉類型枚舉類型的變量的的變量的使用使用/*取球問題取球問題*/ 解題思路:解題思路:因為球只能是因為球只能是6種顏色之一,而種顏色之一,而且要判斷各球是否同色,所以用枚舉類型變量且要判斷各球是否同色,所以用枚舉類型變量來處理。來處理。 設取出的球為設取出的球為i、j、k。根據題意,。根據題意,i、j、k分別為分別為6種顏色球之一,并要求種顏色球之一,并要求ijk??梢杂???梢杂酶F舉法,逐個檢查每一種可能的組合,從中找窮舉法,逐個檢查每一種可能的
39、組合,從中找出符合要求的組合并輸出。出符合要求的組合并輸出。l例8. 68.3.3枚舉類型變量的使用枚舉類型變量的使用/*取球取球*/#include enum color red, yellow, blue, white, black, purple;void print(enum color c)switch(c) case red: printf(redtt); break; case yellow: printf(yellowtt); break; case blue: printf(bluett); break; case white: printf(whitett); break;
40、 case black: printf(blacktt); break; case purple: printf(purplett); break;l例8. 68.3.3枚舉類型變量的使用枚舉類型變量的使用 枚舉類型枚舉類型的定義的定義 枚舉類型枚舉類型的變量作的變量作函數(shù)參數(shù)函數(shù)參數(shù) main( )enum color i,j,k;int count=0;for(i=red; i=purple; i=(enum color)(int)i+1) for(j=red; j=purple; j=(enum color)(int)j+1) for (k=red; k=purple; k=(enum
41、color)(int)k+1)if(i!=j)&(k!=i)&(k!=j)printf(%dt, +count);print(i); print(j); print(k);printf(n);printf(combination: %dn, count);窮舉窮舉 枚舉常量枚舉常量的使用的使用l例8. 68.3.3枚舉類型變量的使用枚舉類型變量的使用8.3.3枚舉類型變量的使用枚舉類型變量的使用l目前目前C編譯器對枚舉類型數(shù)據處理存在如下不足:編譯器對枚舉類型數(shù)據處理存在如下不足:l(1對枚舉變量取一個越界值,并不做出錯處理;對枚舉變量取一個越界值,并不做出錯處理;l 例如:例
42、如:l enum day Sun, Mon, Tue, Wed, Thu, Fri, Sat;l enum day d1=1000; /*d1的正常取值應為的正常取值應為Sun到到Sat,即,即06*/l系統(tǒng)仍認為是正確的。系統(tǒng)仍認為是正確的。l(2對枚舉元素的重復不做檢查;對枚舉元素的重復不做檢查;l 例如:例如:l enum day Sun=3, Mon=1, Tue, Wed, Thu, Fri, Sat;l 顯示顯示Sun和和Wed是一樣的,都為是一樣的,都為3。但系統(tǒng)不做檢查。但系統(tǒng)不做檢查。l實際上,實際上,C將一個枚舉型變量看作將一個枚舉型變量看作int型變量。型變量。8.4 用
43、用typedef定義類型定義類型l一般形式:一般形式:l typedef ;l typedef允許用戶為系統(tǒng)定義的數(shù)據類型或者用允許用戶為系統(tǒng)定義的數(shù)據類型或者用戶自定義的數(shù)據類型提供替代名。例如:戶自定義的數(shù)據類型提供替代名。例如:l typedef int DAYl DAY成了成了int的替代名,可以使用的替代名,可以使用DAY定義定義int變變量,例如:量,例如:l DAY day;8.4 用用typedef定義類型定義類型l例如,為數(shù)組類型定義替代名:例如,為數(shù)組類型定義替代名:l typedef int ARRAY100; l /*ARRAY為整型數(shù)組類型為整型數(shù)組類型*/l ARR
44、AY stud ; l /*stud是整型數(shù)組變量是整型數(shù)組變量*/8.4 用用typedef定義類型定義類型ltypedef和和#define命令在使用方面有相似之處,但兩者不同。命令在使用方面有相似之處,但兩者不同。 l例如:例如:ltypedef struct l int month;l int day;l int year;l DATE;l或或 ltypedef struct date l int month;l int day;l int year;l DATE;l 為結構體類型為結構體類型struct date起了一個新的名字起了一個新的名字DATE。則可以使。則可以使用語句:用語句:lDATE birthday;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 生態(tài)養(yǎng)殖基地承包合同
- 項目進度追蹤與協(xié)同策劃方案
- 現(xiàn)代學徒制師徒協(xié)議
- 柑橘樹承包合同
- 食品安全檢測技術研究開發(fā)合作協(xié)議
- 汽車租賃合同租賃車輛交接確認書
- 投資借款合同書
- 共建聯(lián)合實驗室合作合同協(xié)議書范本模板5篇
- 活動一《自己種菜樂趣多》(教學設計)-2023-2024學年四年級上冊綜合實踐活動滬科黔科版
- Unit4 I have a ball(教學設計)-2024-2025學年人教精通版英語三年級上冊
- 2025年國家林業(yè)和草原局直屬事業(yè)單位第一批招聘應屆畢業(yè)生96人歷年高頻重點模擬試卷提升(共500題附帶答案詳解)
- 2025年春季開學典禮校長講話稿-少年無畏凌云志扶搖直上入云蒼
- 2025年上半年中煤科工集團北京華宇工程限公司中層干部公開招聘易考易錯模擬試題(共500題)試卷后附參考答案
- 會議室墻面隔音板施工方案
- 特朗普就職演說全文與核心要點
- 1《北京的春節(jié)》課后練習(含答案)
- (完整版)陸河客家請神書
- 2025年教科版新教材科學小學一年級下冊教學計劃(含進度表)
- 2025年學校教師政治理論學習計劃
- 集團專利管理制度內容
- 2025年中國社會科學院世界歷史研究所科研人員招聘4人歷年高頻重點提升(共500題)附帶答案詳解
評論
0/150
提交評論