找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2411|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

枚舉類(lèi)型

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:108615 發(fā)表于 2016-3-13 16:46 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
在程序設(shè)計(jì)中,有時(shí)會(huì)用到由若干個(gè)有限數(shù)據(jù)元素組成的集合,如一周內(nèi)的星期一到星期日七個(gè)數(shù)據(jù)元素組成的集合,由三種顏色紅、黃、綠組成的集合,一個(gè)工作班組內(nèi)十個(gè)職工組成的集合等等,程序中某個(gè)變量取值僅限于集合中的元素。此時(shí),可將這些數(shù)據(jù)集合定義為枚舉類(lèi)型。因此,枚舉類(lèi)型是某類(lèi)數(shù)據(jù)可能取值的集合,如一周內(nèi)星期可能取值的集合為:
  { Sun,Mon,Tue,Wed,Thu,Fri,Sat}
  該集合可定義為描述星期的枚舉類(lèi)型,該枚舉類(lèi)型共有七個(gè)元素,因而用枚舉類(lèi)型定義的枚舉變量只能取集合中的某一元素值。由于枚舉類(lèi)型是導(dǎo)出數(shù)據(jù)類(lèi)型,因此,必須先定義枚舉類(lèi)型,然后再用枚舉類(lèi)型定義枚舉型變量。

  enum <枚舉類(lèi)型名>
  { <枚舉元素表> };
  其中:關(guān)鍵詞enum表示定義的是枚舉類(lèi)型,枚舉類(lèi)型名由標(biāo)識(shí)符組成,而枚舉元素表由枚舉元素或枚舉常量組成。例如:
  enum weekdays
  { Sun,Mon,Tue,Wed,Thu,Fri,Sat };
  定義了一個(gè)名為 weekdays的枚舉類(lèi)型,它包含七個(gè)元素:Sun、Mon、Tue、Wed、Thu、Fri、Sat。在編譯器編譯程序時(shí),給枚舉類(lèi)型中的每一個(gè)元素指定一個(gè)整型常量值(也稱(chēng)為序號(hào)值)。若枚舉類(lèi)型定義中沒(méi)有指定元素的整型常量值,則整型常量值從0開(kāi)始依次遞增,因此,weekdays枚舉類(lèi)型的七個(gè)元素Sun、Mon、Tue、Wed、Thu、Fri、Sat對(duì)應(yīng)的整型常量值分別為0、1、2、3、4、5、6。
  注意:在定義枚舉類(lèi)型時(shí),也可指定元素對(duì)應(yīng)的整型常量值。例如,描述邏輯值集合{TRUE、FALSE}的枚舉類(lèi)型boolean可定義如下:
  enum boolean
  { TRUE=1 ,FALSE=0 };
  該定義規(guī)定:TRUE的值為1,而FALSE的值為0。
  而描述顏色集合{red,blue,green,black,white,yellow}的枚舉類(lèi)型colors可定義如下:
  enum colors
  {red=5,blue=1,green,black,white,yellow};
  該定義規(guī)定red為5 ,blue為1,其后元素值從2 開(kāi)始遞增加1。green、black、white、yellow的值依次為2、3、4、5。此時(shí),整數(shù)5將用于表示二種顏色red與yellow。通常兩個(gè)不同元素取相同的整數(shù)值是沒(méi)有意義的。
  枚舉類(lèi)型的定義只是定義了一個(gè)新的數(shù)據(jù)類(lèi)型,只有用枚舉類(lèi)型定義枚舉變量才能使用這種數(shù)據(jù)類(lèi)型。

  8.1.2枚舉類(lèi)型變量的定義

  定義枚舉類(lèi)型變量有三種方法,即:先定義類(lèi)型后定義變量,定義類(lèi)型的同時(shí)定義變量,直接定義變量,現(xiàn)介紹如下:
  1.先定義類(lèi)型后定義變量
  格式: <枚舉類(lèi)型名> <變量1>〔,<變量2>,…,<變量n>〕;
  例如:enum colors
  {red=5,blue=1,green,black,white,yellow};
  colors c1,c2;
  c1、c2 為colors類(lèi)型的枚舉變量。

  2.定義類(lèi)型的同時(shí)定義變量

  格式:enum <枚舉類(lèi)型名>
  { <枚舉元素表> } <變量1>〔,<變量2>,…,<變量n>〕;
  例如:enum colors
  {red=5,blue=1,green,black,white,yellow}c1,c2;

  3.直接定義枚舉變量

  格式:enum
  { <枚舉元素表> } <變量1>〔,<變量2>,…,<變量n>〕;
  例如:enum
  {red=5,blue=1,green,black,white,yellow} c1=red,c2=blue;
  由上例可以看出,定義枚舉變量時(shí),可對(duì)變量進(jìn)行初始化賦值,c1的初始值為red,c2的初始值為blue。
 
  8.1.3 枚舉類(lèi)型變量的引用

  對(duì)枚舉類(lèi)型變量只能使用2類(lèi)運(yùn)算:賦值運(yùn)算與關(guān)系運(yùn)算。
  1.賦值運(yùn)算
  C++中規(guī)定,枚舉類(lèi)型的元素可直接賦給枚舉變量,且同類(lèi)型枚舉變量之間可以相互賦值。如:enum weekdays //定義星期日到星期六為枚舉類(lèi)型weekdays
{ Sun,Mon,Tue,Wed,Thu,Fri,Sat };
 void main ( void )
 { weekdays day1,day2; //定義兩個(gè)枚舉型變量day1、day2
  day1=Sun; //將元素Sun賦給枚舉變量day1
  day2=day1; //枚舉變量day1賦給day2
  cout<<day1<<endl; //輸出day1的值,即Sun的序號(hào)0
 }
  該例定義了兩個(gè)類(lèi)型為weekdays的枚舉類(lèi)型變量day1與day2,這兩個(gè)枚舉型變量只能取集合 { Sun,Mon,Tue,Wed,Thu,Fri,Sat }中的一個(gè)元素,可用賦值運(yùn)算符將元素Sun賦給day1。枚舉變量day1的值可賦給同類(lèi)枚舉變量day2。注意:
 。1)不能用鍵盤(pán)通過(guò)"cin>>"向枚舉變量輸入元素值,例如:cin>>day1是錯(cuò)誤的。因此,枚舉變量的值只能通過(guò)初始化或賦值運(yùn)算符輸入。
 。2)可用"cout<<"輸出枚舉變量,但輸出的是元素對(duì)應(yīng)的序號(hào)值,而不是元素值。例如:cout<<day1; 用cout輸出day1中元素Sun對(duì)應(yīng)的序號(hào)值0,而不是元素Sun。

  2.關(guān)系運(yùn)算
  枚舉變量可與元素常量進(jìn)行關(guān)系比較運(yùn)算,同類(lèi)枚舉變量之間也可以進(jìn)行關(guān)系比較運(yùn)算,但枚舉變量之間的關(guān)系運(yùn)算比較是對(duì)其序號(hào)值進(jìn)行的。例如:
  day1=Sun; //day1中元素Sun的序號(hào)值為0
  day2=Mon; //day2中元素Mon的序號(hào)值為1
  if (day2>day1) day2=day1; //day2>day1的比較就是序號(hào)值關(guān)系式:1>0的比較
  if (day1>Sat) da1=Sat; //day1>Sat的比較就是序號(hào)值關(guān)系式:0>6的比較
  day2與day1的比較,實(shí)際上是其元素Mon與Sun序號(hào)值1與0的比較,由于1>0成立,所以day2>day1條件為真,day2=day1=Sun。同樣由于day1中元素Sun的序號(hào)值0小于Sat的序號(hào)值6,所以day1>Sat條件為假,day1的值不變。
  
  【例8.1】先定義描述6種顏色的枚舉類(lèi)型colors,然后再用該枚舉類(lèi)型定義枚舉數(shù)組,任意輸入6個(gè)顏色號(hào),轉(zhuǎn)換成對(duì)應(yīng)的顏色枚舉量后輸入到枚舉數(shù)組中,最后輸出枚舉數(shù)組中對(duì)應(yīng)的顏色。
 # include <iostream.h>
 # include <stdlib.h> //使用exit(0)函數(shù)時(shí)必須包含stdlib.h頭文件
 enum colors //定義有6種顏色元素的枚舉類(lèi)型colors
 { red, blue,green,black,white,yellow };
 void main( void)
 { colors color[6]; //定義枚舉類(lèi)型數(shù)組color[6]
  int j,n;
  cout<<"0:red,1:blue,2:green,3:black,4:white,5:yellow"<<endl;
  cout<<" 請(qǐng)輸入6個(gè)顏色號(hào):";
  for (j=0;j<6;j++)
   { cin >> n; //輸入顏色號(hào)
    if (n<0 || n>5 )
    { cout << "輸入顏色值出錯(cuò),請(qǐng)重新輸入!";
     exit(0);
     }
    else
   switch(n) //將顏色號(hào)轉(zhuǎn)換成顏色元素存入數(shù)組
    { case 0 : color[j]=red; break;
     case 1 : color[j]=blue; break;
     case 2 : color[j]=green ; break;
     case 3 : color[j]=black; break;
     case 4 : color[j]=white; break;
     case 5 : color[j]=yellow; break;
    }
     }
   for (j=0 ;j<6;j++) //循環(huán)6次,輸出數(shù)組元素對(duì)應(yīng)的顏色
     { switch (color[j])
      { case red : cout <<"red" ; break;
       case blue: cout<<"blue" ; break;
       case green : cout <<"green" ; break;
       case black : cout<<"black" ; break;
       case white : cout <<"white" ; break;
       case yellow :cout <<"yellow" ; break;
      }
     cout<<'/t';
     }
    cout<<'/n';
  }
  程序執(zhí)行時(shí),屏幕提示:
  0:red,1:blue,2:green,3:black,4:white,5:yellow
  請(qǐng)輸入6個(gè)顏色號(hào):0 1 2 3 4 5
  屏幕輸出:red blue green black white yellow
  由于無(wú)法通過(guò)鍵盤(pán)直接向枚舉變量輸入枚舉元素值,所以程序中只能先輸入枚舉元素的序號(hào)值,然后用開(kāi)關(guān)語(yǔ)句將序號(hào)值轉(zhuǎn)換為元素值,并將元素值賦給枚舉數(shù)組元素。同樣,由于用cout無(wú)法輸出枚舉數(shù)組中元素值,所以在輸出時(shí),只能用開(kāi)關(guān)語(yǔ)句判斷輸出哪一個(gè)元素,然后用cout<<"元素"方式輸出對(duì)應(yīng)的元素值。

  【例8.2】定義一個(gè)描述三種顏色的枚舉類(lèi)型{red、blue、green},輸出這三種顏色的全部排列結(jié)果。
 解:這是三種顏色的全排列問(wèn)題,用窮舉法即可輸出三種顏色的全部27種排列結(jié)果。
 # include <iostream.h>
 enum colors
 {red , blue,green};
 void show(colors color)
 { switch(color)
  { case red : cout<<"red";break;
  case blue : cout<<"blue";break;
  case green : cout<<"green";break;
  }
  cout<<'/t';
 }
 void main(void)
 { colors col1,col2,col3;
  for(col1=red ;col1<=green;col1=colors(int (col1) +1))
  for(col2=red ;col2<=green;col2=colors(int (col2) +1))
  for(col3=red ;col3<=green;col3=colors(int (col3) +1))
  { show(col1);
   show(col2);
   show(col3);
   cout<<'/n';
  }
 }
  程序通過(guò)三重循環(huán)窮舉出三種顏色所有的組合。for循環(huán)語(yǔ)句中,用枚舉變量col1為循環(huán)變量,col1取值從red開(kāi)始到green為止,循環(huán)變量的自加操作是通過(guò)表達(dá)式col1=colors(int (col1) +1) 來(lái)實(shí)現(xiàn)的,表達(dá)式中,先將col1轉(zhuǎn)換成整數(shù),然后加1,再轉(zhuǎn)換成colors類(lèi)型的枚舉值賦給col1變量。



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表