《12高級程序語言》由會員分享,可在線閱讀,更多相關《12高級程序語言(11頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、單擊此處編輯母版標題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,第十二章 其他數(shù)據(jù)類型,1,枚舉,在實際問題中,有些變量的取值被限定在一個有限的范圍內(nèi)。例如,一個星期內(nèi)只有七天,一年只有十二個月,一個班每周有六門課程等等。如果把這些量說明為整型,字符型或其它類型顯然是不妥當?shù)摹?“枚舉”類型:在“枚舉”類型的定義中列舉出所有可能的取值,被說明為該“枚舉”類型的變量取值不能超過定義的范圍。,枚舉類型是一種基本數(shù)據(jù)類型。,枚舉類型定義,枚舉類型定義的一般形式為:,enum,枚舉名,枚舉值表,;,在枚舉值表中應羅列出所有可用值。這些值也稱為枚舉元素。,例如:,enum,weekd
2、ay,sun,mou,tue,wed,thu,fri,sat,;,該枚舉名為,weekday,,枚舉值共有,7,個,即一周中的七天。凡被說明為,weekday,類型變量的取值只能是七天中的某一天。,enum,colorred,green,blue,yellow,white,;,enum,枚舉類型的關鍵字,,color,枚舉類型名。,枚舉類型變量的賦值和使用,例,enum,colorred,green,blue,yellow,white,;,enum,color,select,change,*cp;,例,enum,colorred,green,blue,yellow,white,select,c
3、hange,*cp;,例,enum,red,green,blue,yellow,white,select,change,*cp;,select=red;,枚舉變量取值范圍限定在對應枚舉類型表中的元素,枚舉變量的取值,枚舉元素是整常量,不是變量。,例如,red=3 (,),編譯程序把第一個枚舉元素賦值為,0,,以后依次賦值,為,1,、,2,例,enum,colorred,green,blue,yellow,whiteselect,;,red,的值為,0,,,green,、,blue,、,yellow,和,white,取值分別為,1,、,2,、,3,、,4,。,select=red;,select
4、,被賦值為,0,。,當變量取值范圍限定在規(guī)定的整常數(shù)范圍內(nèi)時,可采用枚舉類型。,枚舉類型變量不能直接使用,printf,、,scanf,等庫函數(shù)輸出、輸入,例,7.1,編寫一個程序,輸入今天是星期幾,計算若干天后是星期幾。,#include,char,weekstring,10=“Sun(,日,)”,”Mon(,一,)”,”Tue(,二,)”,”Wed(,三,)”,”Thu(,四,)”,”Fri(,五,)”,”Sat(,六,)”;,enum,week Sun=0,Mon,Tue,Wed,Thu,Fri,Sat;,void main(void),int,d;,enum,week,today,w,
5、;,printf,(“,今天是星期:”,);,scanf(“%d”,&today,);,printf,(“,輸入天數(shù):”,);,scanf(“%d”,&d,);,printf,(“,今天是星期,%,sn”,weekstringtoday,);,w=(,enum,week)(today+d)%7);,printf(“%d,天后是星期,%,sn”,d,weekstringw,);,例,7.2,現(xiàn)有紅、黃、藍、黑和白色球個,1,只,從中依次取出,3,個球,編程輸出所有可能的取法。,#include,enum,color,red,yellow,blue,white,black,;,void,main(
6、void,),enum,color i,j,k,temp;,int,n,loop;,n=0;,for(i,=red;i=black;i+),for(j,=red;j=black;j+),if(i,!=j),for(k,=red;k=black;k+),if(k!=,i)&(k,!=j),n+;,printf(“%-5d”,n);,for(loop,=1;loop=3;loop+),switch(loop),case 1:temp=,i;break,;,case 2:temp=,j;break,;,case 3:temp=,k;break,;,switch(temp,),case red:pri
7、ntf(“%-10s”,”red”);break;,case yellow:printf(“%-10s”,”yellow”);break;,case blue:printf(“%-10s”,”blue”);break;,case white:printf(“%-10s”,”white”);break;,case black:printf(“%-10s”,”black”);break;,printf(“n,”):,printf(“total:%dn”,n,);,2,位段,位段的概念與定義,位段類型,:,是一種特殊的結構類型,其所有成員均以二進制位為單位定義長 度,并稱成員為位段。,例如,,CPU
8、,的狀態(tài)寄存器,按位段類型定義如下:,struct,status,unsigned sign:1;/*,符號標志*,/,unsigned zero:1;/*,零標志*,/,unsigned carry:1;/*,進位標志*,/,unsigned parity:1;/*,奇偶,/,溢出標志*,/,unsigned,half_carry,:1;/*,半進位標志*,/,unsigned negative:1;/*,減標志*,/,flags;,優(yōu)點,:,節(jié)約存儲空間,2.,說明,(,1,)因為位段類型是一種結構類型,所以位段類型和位段變量的定義,以及對位段(即位段類型中的成員)的引用,均與結構類型和結
9、構變量一樣。,(,2,)對位段賦值時,要注意取值范圍。一般地說,長度為,n,的位段,其取值范圍是:,0,(,2,n,-1,)。,(,3,)使用長度為,0,的無名位段,可使其后續(xù)位段從下,1,個字節(jié)開始存儲。,例如,,struct,status,unsigned sign:1;/*,符號標志*,/,unsigned zero:1;/*,零標志*,/,unsigned carry:1;/*,進位標志*,/,unsigned:0;/*,長度為,0,的無名位段*,/,unsigned parity:1;/*,奇偶,/,溢出標志*,/,unsigned,half_carry,:1;/*,半進位標志*,/
10、,unsigned negative:1;/*,減標志*,/,flags;,(,4,),1,個位段必須存儲在,1,個存儲單元(通常為,1,字節(jié))中,不能跨,2,個。如果本單元不夠容納某位段,則從下,1,個單元開始存儲該位段。,(,5,)可以用,%d,、,%x,、,%u,和,%o,等格式字符,以整數(shù)形式輸出位段。,(,6,)在數(shù)值表達式中引用位段時,系統(tǒng)自動將位段轉(zhuǎn)換為整型數(shù)。,3,用,typedef,定義類型,功能,:用自定義名字為,已有,數(shù)據(jù)類型命名,類型定義,簡單形式:,typedef,type,name,;,例,typedef,int,INTEGER;,類型定義語句關鍵字,已有數(shù)據(jù)類型名
11、,用戶定義的類型名,例,typedef,float REAL;,類型定義后,與已有類型一樣使用,例,INTEGER a,b,c;,REAL f1,f2;,int,a,b,c;,float f1,f2;,說明,:,1.typedef,沒有創(chuàng)造,新數(shù)據(jù)類型,2.,typedef,是定義類型,不能定義變量,3.typedef,與,define,不同,define,typedef,預編譯時處理,編譯時處理,簡單字符置換,為已有類型命名,typedef,定義類型步驟,按定義變量方法先寫出定義體 如,int,i;,將變量名換成新類型名 如,int,INTEGER,;,最前面加,typedef,如,type
12、def,int,INTEGER,;,用新類型名定義變量 如,INTEGER,i,j;,例 定義數(shù)組類型,int,a100;,int,ARRAY100;,typedef,int,ARRAY100;,ARRAY a,b,c;,int,a100,b100,c100;,例 定義指針類型,char *,str,;,char *STRING;,typedef,char *STRING;,STRING p,s10;,char *p;,char *s10;,例 定義函數(shù)指針類型,int,(*p)();,int,(*POWER)();,typedef,int,(*POWER)();,POWER p1,p2;,i
13、nt,(*p1)(),(*p2)();,例 定義結構體類型,struct,date,int,month;,int,day;,int,year;,d;,例 定義結構體類型,struct,date,int,month;,int,day;,int,year;,DATE;,例 定義結構體類型,typedef,struct,date,int,month;,int,day;,int,year;,DATE;,例 定義結構體類型,DATE birthday,*p;,struct,date,int,month;,int,day;,int,year;,birthday,*p;,類型定義可嵌套,例,typedef,struct,club,char name20;,int,size;,int,year;,GROUP;,typedef,GROUP *PG;,PG,pclub,;,GROUP *,pclub,;,struct,club *,pclub,;,GROUP,為結構體類型,PG,為指向,GROUP,的指針類型,