- 算法竞赛宝典(第一部):语言及算法入门
- 张新华
- 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中。
所以在使用实型数据时一定要格外注意实型数据的舍入误差。没有特别需要,尽可能少用实型数据。以免产生不必要的误差而影响结果的正确性。
另外,应避免将一个很大的浮点数和一个很小的数直接相加或相减,这样会“丢失”小的数。