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

常量和變量

在程序運行中,其值不能被改變的量稱為常量。常量區分為不同的類型,如34、0、-4為整型常量,4.3、-1.32為實型常量,'a'、'b'為字符常量。

一般定義方法如下:

    const int a=34;
    const float b=10.01;

在程序運行中,其值可以改變的量稱為變量,一個變量應該有一個名字,即標識符。

C++規定標識符只能由字母、數字、美元符和下劃線等字符組成,且第一個字符必須為字母或下劃線或美元符。

下面列出的是合法的標識符,也是合法的變量名:

    _sum,average,Day,school_name,lotus_1_2,PASCAL,$sum

下面是不合法的標識符和變量名:

    Mr.Wang,234NUM,#34,a>=b,¥1234

C++語言是區分大小寫字母的,所以,SUM和sum是兩個不同的變量名。

在選擇變量名和其他標識符時,應注意做到“見名知意”,即選有含義的英文單詞(或其縮寫)作標識符,如count、total、price等。盡量少用代數符號(如a、b、c、x1、y1)作變量名,以增加程序的可讀性。

下面是一個試圖改變常量的錯誤代碼:

1 //試圖改變常量a的錯誤的程序
2 #include <iostream>
3 using namespace std;
4 
5 int main()
6 {
7  const int a=34;           //定義了一個int型的常量a,a等于34
8  a=a*5;     //試圖將a乘以5后再將其值賦給a
9  cout<<a<<endl;
10 system("pause");
11 return 0;
12 }

const是C++程序里的關鍵字,表示所定義的類型為常量,我們可以看到,程序的第8行試圖改變常量a的值。由于常量是不能夠被改變的,所以程序在編譯時將會出現如下錯誤:

assignment of read-only variable 'a'

另一種定義方法是用一個標識符代表一個常量,如下面的代碼:

1 //標識符定義常量
2 #include <iostream>
3 #define PRICE 34           //定義了一個符號常量
4 using namespace std;
5 
6 int main()
7 {
8  int number=10;
9  int total;
10  total=number*PRICE;
11  cout<<"total="<<total<<endl;
12  system("pause");
13  return 0;
14 }

程序中用#define定義PRICE這個標識符代表常量34,此后凡是在本源文件中出現的PRICE都代表34。用這種方法、用戶能以一個簡單的名字代替一個長的字符串。標識符一般用大寫字母表示,可以和常量一樣進行運算。本程序運行結果為total =340。

使用符號變量的好處是含義清楚,在需要改變一個常量時能做到“一改全改”。假設該程序中多處用到了某物品的價格,如遇到價格調整,只需改動本程序的第3行即可,如#define PRICE 100。

注意:定義符號變量語句末尾無分號。

整數常量稱為整常量,除正常十進制表示方法外,整常量的特殊表示方法如下:

一個整常量后面加一個字母U或u,認為是unsigned int型,如1234u,在內存中按unsigned int規定的方式存放。

一個整常量后面加一個字母L或l,則認為是long int型常量。例如1234l、432L等。

一個整常量以數字0開頭的數是八進制數。例如0234表示八進制數234,即(234)8,其值為2×82+3×81+4×80,等于十進制數156;-011表示八進制數-11,即十進制數-9。

一個整常量以0x開頭的數是十六進制數。如0x123,代表十六進制數123,即(123)=1×162+2×161+3×160=291;-0x12等于十進制-18。

實數又稱浮點數。實數有兩種表示方法:

(1)十進制小數形式,它由數字和小數點組成。如.234、1234.、1234.0、0.0。

(2)指數形式。如234e3或234E3都代表234×103。注意字母e(或E)之前必須有數字,且e后面的指數必須為整數。

由于實數在內存中的存放是用有限的存儲單元存儲的,所以能提供的有效數字總是有限的,在有效位以外的數字將會被舍去。由此可能會產生一些誤差。

下面的程序演示浮點數的舍入誤差:

1 //浮點數舍入誤差演示
2 #include <iostream>
3 using namespace std;
4
5 int main()
6 {
7  float a,b,c;
8  a=2345678900.000;          //定義一個很大的浮點數
9  b=3; //定義一個很小的浮點數
10  cout<<a<<endl;
11  c=a+b;
12  cout<<c<<endl;
13  system("pause");
14  return 0;
15 }

運行結果如圖1.19所示。

圖1.19

這是由于float類型的變量只能保證7位有效數字,后面的數字是無意義的,并不能準確地表示該數。例如定義float f=123456.111;當運行cout<<f語句輸出f時,結果為123456。如果將f改為double型,則能全部接收上述數字并存儲在變量f中。

所以在使用實型數據時一定要格外注意實型數據的舍入誤差。沒有特別需要,盡可能少用實型數據。以免產生不必要的誤差而影響結果的正確性。

另外,應避免將一個很大的浮點數和一個很小的數直接相加或相減,這樣會“丟失”小的數。

主站蜘蛛池模板: 淮北市| 苗栗县| 邵阳市| 迁安市| 沅江市| 忻城县| 凤翔县| 平谷区| 错那县| 弋阳县| 荔波县| 修文县| 阿坝| 台南市| 营山县| 永平县| 建阳市| 宜兰市| 鞍山市| 霍邱县| 丹阳市| 和政县| 乌拉特后旗| 临海市| 孟州市| 鄂伦春自治旗| 旅游| 嘉义县| 台中县| 广德县| 泽库县| 武夷山市| 全椒县| 嵊泗县| 中牟县| 武乡县| 灵宝市| 土默特右旗| 依兰县| 安图县| 娄底市|