官术网_书友最值得收藏!

  • C++語言程序設計
  • 千鋒教育高教產品研發部編著
  • 3242字
  • 2019-07-30 17:37:43

2.1 變量與常量

數據類型是指對數據的解釋,它規范了不同數據在計算機內存儲空間的大小與存儲的具體形式。

2.1.1 標識符與關鍵字

現實世界中每個事物都有自己的名字,從而與其他事物區分開。例如,現實生活中每種交通工具都有一個名稱來標識,如圖2.1所示。

在程序設計語言中,同樣也需要對程序中的各個元素命名加以區分,這種用來標識常量、變量、自定義類型、函數和標號等元素的記號稱為標識符。

C++語言規定,標識符是由字母、數字和下畫線組成的,并且只能以字母或下畫線開頭的字符集合。在使用標識符時應注意以下幾點:

  • 標識符中的大小寫字母是有區別的。
  • 命名時應遵循見名知義的原則。
  • 系統已用的關鍵字不得用作標識符。

關鍵字是系統已經定義過的標識符,它在程序中已有了特定的含義,如int、char等。C++中的關鍵字都是小寫字母,表2.1列出了C++中的所有關鍵字。

圖2.1 現實生活中的標識符

表2.1 C++中的關鍵字

2.1.2 變量與賦值

日常生活中,例如,大家在淘寶購物的時候,都會有一個購物車,用來進行存儲用戶想購買的物品,等到所有的物品都挑選完成后,選擇結算即可,如圖2.2所示。

圖2.2 淘寶購物流程

進行結算時,要對多個數據進行求和,需先把這些數據先存儲起來,再對這些數據進行累加。在C++中,若要存儲數據,需要用到變量。變量可以理解為淘寶購物車中存儲的物品,如蘋果、水等。變量的賦值是通過等號來表示的,進行結算時是每個變量進行相加的過程。示例代碼如下:

上述示例中,apple、water、sum都是變量,其中,apple和water變量就好比購物車中存儲的物品,它們分別存儲的數據是20和7。sum變量存儲的數據是apple和water這兩個物品的數據累計之和。

2.1.3 變量的類型

變量用來存儲數據,那么大家來思考一下:如何選擇合適的容器來存放數據才不至于浪費空間,可以保存什么樣的數據呢?在介紹數據類型之前,先來看一個生活中的例子。比如,某公司要快遞一本書,文件袋和紙箱都可以裝載,但是,如果使用紙箱裝一本書,顯然有點大材小用,浪費紙箱的空間,如圖2.3所示。

同樣,大家如果在使用變量進行存儲數據時,為了更充分地利用內存空間,可以為變量指定不同的數據類型。C++數據類型如圖2.4所示。

圖2.3 紙箱與文件袋快遞一本書

圖2.4 C++數據類型

在圖2.4中,可看到C++提供的基本數據類型有整型、實型、字符型和空型;復合類型有指針型、引用型;構造類型有數組、枚舉、結構體、聯合體、類。這些類型中不同于C語言的主要是引用型與類,這兩種類型將在后面的章節中詳細講解,整個面向對象程序設計的學習都是圍繞類展開的。

有關基本數據類型的說明如表2.2所示,其中數據長度在不同的操作系統下編譯器對應的值有可能不相同,需要參考相應的手冊。

表2.2 C++基本數據類型

說明:

(1)無符號(unsigned)和有符號(signed)的區別在于數值最高位的含義。對于signed類型來說,最高位是符號位,其余各位表示數值大小,而unsigned類型的各個位都用來表示數值大小,因此相同基本數據類型的signed和unsigned的數值范圍是不同的。

(2)許多C++版本還有布爾型(bool),即值為true或false。事實上,在計算機編譯系統中將true表示成整數1,false表示成整數0,因此也可以把布爾型看成是一個整型。

2.1.4 常量

在程序執行過程中,其值不能改變的量稱為常量。普通常量的類型是根據數據的書寫形式來決定的。如100是整型常量,0.5是實型常量,'q'是字符型常量,"qianfeng"是字符串常量。

1. 整型常量

在C++中,使用的整型常量可以用八進制、十進制和十六進制3種方式表示,具體如下所示:

  • 十進制整型常量是最常用的一種表示形式,如321、-123。
  • 八進制整型常量以0開頭作為前綴,其數碼取值為0~7,如025、-066。
  • 十六進制整型常量以0x或0X開頭作為前綴,其數碼取值為0~9、A~F或a~f,如0xffff、-0X15。

整型常量在表示時,除了用前綴表示進制外,有時還需要用到后綴表示long、unsigned修飾符。當表示長整型常數時,需要在該數的后面加上L或l,如2345L;當表示無符號整型常數時,需要在該數的后面加上U或u,如4567U。

2. 實型常量

實型常量又稱浮點型常量,它由整數部分和小數部分組成,其表示形式有以下兩種形式:

  • 小數表示形式,它由數字和小數點組成,不可省略小數點,但可以省略整數部分或小數部分數字,如1.、.21。
  • 指數表示形式,它由小數表示法后加e(或E)和指數組成,指數部分可正可負,但必須是整數,并且e前邊必須有數字,如1.23e-5、.23e6。

實型常量分單精度、雙精度和長雙精度3類,它們用后綴加以區分,不加后綴的為雙精度浮點型常量,如2.12;加后綴F或f的為單精度浮點型常量,如2.12f;加后綴L或l的為長雙精度浮點型常量,如0.56e7L。

3. 字符型常量

用一對單引號括起來表示的形式就是字符型常量。在內存中,字符數據以ASCII碼的形式存儲,在一定范圍內可以與整數相互賦值,但含義有所不同。ASCII碼是一種給字符編碼的國際標準,它以整數表示字符,比如十進制數65,表示字符'A'。此處注意數字與字符的區別,如4與'4'是不同的,4是整數,'4'是字符,對應的ASCII碼值為52。

在C++中,有些特殊字符用轉義字符表示,轉義字符以反斜杠“\”開頭,后跟若干個字符。轉義字符具有特定的含義,不同于字符原有的意義,故稱轉義字符,表2.3列出了常用的特殊字符。

表2.3 常用的轉義字符及含義

在表2.3中,'\ddd'和'\xhh'都是用ASCII碼表示一個字符,如'\101'和'\x41'都是表示字符'A'。轉義字符在輸出中有許多應用,如想讓計算機的喇叭發出響聲,可以使用下面的語句。

     cout <<  '\a';

如果需要在屏幕上輸出以下內容:

     小千對小鋒說:"遇到IT技術難題,就上扣丁學堂"。

不能使用以下方法:

     cout <<"小千對小鋒說:"遇到IT技術難題,就上扣丁學堂"。"<<endl;

因為雙引號在C++中是有特殊作用的,上述寫法會使編譯器產生錯誤,正確的語句如下所示:

     cout <<"小千對小鋒說:\"遇到IT技術難題,就上扣丁學堂\"。"<<endl;
4. 字符串常量

字符串常量是由一對雙引號括起來的字符序列。被括起來的字符序列可以是一個字符,也可以是多個字符,還可以沒有字符。如"q"、"qian"、""。字符串常量都有一個結束符,用來標識字符串的結束,該結束符是'\0',即ASCII碼值為0的空字符。

對于初學者,經常混淆字符與字符串的概念,它們是不同的量,兩者區別如下:

  • 字符用單引號括起來,字符串用雙引號括起來;
  • 字符與字符串占用的內存空間不同,字符只占用一個字節的空間,而字符串占用的內存字節數等于雙引號中的字符個數加1,如字符'q'和字符串"q"在內存中的情況是不同的,字符'q'在內存中占一個字節,而字符串"q"在內存中占兩個字節,如圖2.5所示。

圖2.5 字符'q'與字符串"q"在內存中的表示

5. 符號常量

有一種特殊的常量是用標識符來表示的,稱為符號常量。符號常量主要用于幫助記憶和提高程序的可讀性與維護性。例如,程序中經常會用到圓周率,假設為3.14,如果程序想提高圓周率的精度到3.141 592 65,那么它在程序中出現的所有地方都需要做修改,大大降低了程序的維護性。這時如果用PI表示圓周率,每次使用時都寫PI,那么在需要修改PI的精度時,只需要修改PI的初值就可以了。在C++中,為了保持與C語言的兼容,允許程序用編譯預處理指令#define來定義一個符號常量,上面的圓周率可以通過如下定義:

     #define PI 3.14159265

這條指令的格式是#define后跟一個標識符和一串字符,中間用空格隔開。由于它不是C++語句,因此此行沒有分號。在程序編譯時,編譯器首先將程序中的PI用3.14159265來替換,然后再進行代碼編譯。標識符后面的內容實際上是一個字符串,編譯器本身不會對其進行任何語法檢查,僅僅是在程序中將標識符簡單替換為字符串,因此,有時會帶來意想不到的錯誤。

6. const常量

在定義變量時,可以使用const關鍵字來修飾,這樣的變量是只讀的,即在程序中不能對其修改,只能讀取。由于不可修改,因而它是一個符號常量,且在定義時必須進行初始化。需要說明的是,通常將符號常量中的標識符寫成大寫字母易于與其他標識符區分。用const關鍵字定義符號常量的格式如下:

     const數據類型 常量名=初值表達式;

上面的圓周率可以通過如下定義:

     const double PI=3.14159265;

const還可以放在數據類型名后,具體示例如下:

     double const PI=3.14159265;

注意下面的語句是錯誤的:

接下來演示通過const關鍵字定義符號常量,如例2-1所示。

例2-1

運行結果如圖2.6所示。

圖2.6 例2-1運行結果

在例2-1中,第3行通過const關鍵字定義一個符號常量PI表示圓周率。第7行中使用圓周率就可以用PI來代替。

主站蜘蛛池模板: 石家庄市| 临沂市| 黄石市| 郎溪县| 桦南县| 姚安县| 新源县| 拉萨市| 胶南市| 正安县| 玉山县| 富裕县| 吉首市| 抚远县| 布拖县| 漳平市| 惠安县| 麻城市| 西城区| 响水县| 修水县| 黄冈市| 五莲县| 海林市| 东至县| 正定县| 海门市| 鹤岗市| 邻水| 阜南县| 台安县| 安多县| 肇东市| 汝南县| 永和县| 盐源县| 邻水| 马公市| 河北区| 含山县| 安福县|