- 算法競賽寶典(第一部):語言及算法入門
- 張新華
- 1481字
- 2021-03-19 19:27:43
常量和變量
在程序運行中,其值不能被改變的量稱為常量。常量區分為不同的類型,如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中。
所以在使用實型數據時一定要格外注意實型數據的舍入誤差。沒有特別需要,盡可能少用實型數據。以免產生不必要的誤差而影響結果的正確性。
另外,應避免將一個很大的浮點數和一個很小的數直接相加或相減,這樣會“丟失”小的數。
- Software Defined Networking with OpenFlow
- ThinkPHP 5實戰
- Julia機器學習核心編程:人人可用的高性能科學計算
- 面向STEM的Scratch創新課程
- aelf區塊鏈應用架構指南
- Mastering Swift 2
- C++ 從入門到項目實踐(超值版)
- Learning Selenium Testing Tools(Third Edition)
- AIRIOT物聯網平臺開發框架應用與實戰
- Python機器學習算法: 原理、實現與案例
- 基于ARM Cortex-M4F內核的MSP432 MCU開發實踐
- Learning Docker Networking
- C語言程序設計習題與實驗指導
- 邊玩邊學Scratch3.0少兒趣味編程
- MySQL 8從零開始學(視頻教學版)