列舉型是一種整數型,使用者通過以下語法定義:
enum typename ;
enum是c++的關鍵字,typename是所定義型別的名字,enumerator-list是一系列的整數常量的名字。如下面定義了列舉型semester,這種型別的變數可以有三個值。
enum semester;
一、型別定義
型別定義的語法格式:
type
《識別符號1>=《型別1>;
《識別符號1>=《型別1>;
…… 《識別符號n>=《型別n>;
二、列舉型別
通過預定義列出所有值的識別符號來定義乙個有序集合,這些值的次序和列舉型別說明中的識別符號的次序識一致的。列舉型別的形式:(識別符號1,……,識別符號n)
例如: type daystype=(sunday,monday,tuesday,wednesday,thursday,friday,saturday)
列舉元素只能是識別符號,而不能是數值常量或字元常量。例如以下的定義是錯誤的:
type daystype=('sun','mon','tue','wed','thu','fri','sat')
列舉元素是識別符號,不要把作為列舉元素的識別符號視作變數名,它不能被賦值。同乙個列舉元素不能出現在兩個或兩個以上的列舉型別定義中。例如以下的定義是錯誤的:
type daytype1=(monday,tuesday);
daytype2=(monday,wednesday);
可以將列舉型別的定義和變數的定義結合在一起。例如:var a:(monday,tuesday,sunday)
列舉型別屬於順序型別。根據定義型別時各列舉元素的排列順序確定它們的序列,序列號從0開始
例如:已經定義daystype
ord(sunday)=0,succ(sunday)=monday,pred(friday)=thursday
但是列舉型別中的第乙個元素沒有前趨,最後乙個元素沒有後繼。turbo pascal不允許直接讀寫列舉值,所以列舉值的輸出常用case語句間接的輸出。列舉值的輸入,則要一一判斷讀入字元是否是列舉型別的識別符號。若是才能賦給列舉變數,否則就會出錯。
例如:列舉值的輸出
case day of
sunday:write('sunday');
monday:write('monday');
tuesday:write('tuesday');
wednesday:write('wednesday');
thursday:write('thursday');
friday:write('friday');
saturday:write('saturday');
end;
三、子界型別
子界型別是由整型、字元型、列舉型、布林型的兩個常量指定該型別的值域區間。子界型別的形式:
常量..常量 兩個常量必須是同一種順序型別。例如:a..b,要求a<=b
例如:
type a=1..3;
b='a'..'d';
乙個子界型別繼承它的常量型別的運算子和標準函式,常量型別相容的不同子界型別可以混合運算,可以賦值。可以將子界型別的定義和變數的定義結合在一起。例如:var a:1..9
例 按月、日、年順序讀入一日期,輸出該日期是這一年中的第幾天。
program date;
var year:0..2010;
month,i:1..12;
day:1..31;
dayth:integer;
begin
read(month,day,year);
dyath:=0;
for i:=1 to month-1 do
case i of
1,3,5,7,8,10,12:dayth:=dayth+31;
2:if ((year mod 4=0)and(year mod 100<>0)or(year mod 400 =0)
then dayth:=dayth+29
else dayth=:=dayth+28;
4,6,9,11:dayth:=dayth+30;
end;
dayth:=dayth+day;
writeln(dayth)
end.
四、型別相容和賦值相容
1.型別相容性
型別相容是對參加同一運算的兩個物件的型別要求。設有兩個變數,如果滿足下列條件之一,就說這兩個變數的型別相容。
(1)兩個變數的型別相同
a.兩個變數被同一型別說明。
例如:var a,b:1..30;
b.兩個變數的型別是同一型別識別符號。
例如:var a:1..30; b:1..30;
c.兩個變數的型別是不同的型別識別符號,但在型別定義中已經說明兩個識別符號相同。
例如:type date=1..100; range=date;
var m:data;n:range;
(2)乙個變數的型別是另乙個變數的子界。
(3)兩個變數的型別都是同一基型別的子界。
(4)兩個變數的型別是基型別相容的集合型別。
(5)兩個變數的型別是成分相同的串型別。
2.賦值相容性
賦值相容是對賦值操作的兩個物件的型別要求。設賦值語句「:=」左邊的變數型別為t,右邊表示式的型別為e,若型別t和型別e滿足下列條件之一,則稱他們是賦值相容的。
(1)t和e是相同的型別,而且型別不是檔案型別,也不是具有檔案類成分的構造型別。
(2)t是實型,而e是整型或整型的子界。
(3)t和e是型別相容的順序型別,並且e的值不超出t所定義的值的範圍
(4)t和e是型別相容的集合型別,並且e的值不超出t所定義的值的範圍
(5)t和e是型別相容的串型別。
當t和e是順序型別或都是集合型別時,不僅要求這兩個型別是相容的,而且要求e的值不超出t所定義的值的範圍;否則將產生型別溢位,而這種錯誤只能在你執行程式時進行檢查,因此你必須要避免不發生這種錯誤。
十七 基本資料型別之整數型
long l1 2147483648 error 原因 是因為程式預設將2147483648看做是int型別,而2147483648已經超出了int型別的取值範圍,所以會報錯。正確的寫法 在為long型別賦值的時候,需要在後面加上 l eg long l1 2147483648l 程式會預設的把整型...
基本資料型別 浮點型 指標
浮點數家族包括float double和long double型別。通常,這些型別分別提供單精度 雙精度以及在某些支援擴充套件精度的機器上提供擴充套件精度。ansi標準僅僅規定long double至少和double 一樣長,而double至少和float一樣長。標準同時規定了乙個最小範圍 所有浮點...
Objective C之基本資料型別
整型 int integertype 5 浮點型 float floattype 3.1415 雙浮點型 double doubletype 2.2033 短整型 short int shorttype 200 長整型 long int longlongtype 7758123456767l c語言...