一、常量
常量(constant)是指程序中其值不能被修改的数据。分为字面常量和符号常量。
从字面形式即可识别的常量称为字面常量(literal constant),例如64、3.1415926和'A'等。
每个字面常量都具有数据类型,由它的书写形式和值来决定。(程序代码中肯定有很多数据,有些数据含义确定,例如代码中写个a=1或者b=`fish`,这里的1和`fish`就是常量,同时我们从字面上就知道它的数据类型和含义,也叫做字面常量。因此这里的常量和变量实际上主要是书写规范层面而言)
1.整型常量
(1)十进制整数。
以非零十进制数1~9组成的整数,例如13579,-680等。
(2)八进制整数。
以0开头和八进制数0~7组成的整数,例如012,0177等。
(3)十六进制整数。
以0x或0X开头和十六进制数0~9、A~F或a~f组成的整数(字母大小写任意),例如0x1234,0xab,0xCF等(16进制数据表示不区分字母大小写)。
2.浮点型常量
(1)小数形式。由小数点、十进制整数和小数组成的浮点数。整数和小数可以省略其中之一,但不能省略小数点。
如:.123.0、123.、0.0等。
(2)指数形式,又称科学记数法表示。以f En或f e n格式组成的浮点数,
其
中E或e表示以10为底的幂,f可以是整数或小数,n为指数且必须是整型。如:0.31415926e+1、314.15926E-2等。
浮点型常量默认为double型。若在浮点数后面加一个字母f或F,则它是float型。
3.字符常量
以一对单引号(')括起来的一个字符表示字符常量,如:'A'、'0'、'&'、 'ab’错误!“
字符常量表示的是一个字符,存储的是该字符的ASCII码值。例如'A'表示
符A,数据值是65;‘2'表示数字字符2,数据值是50。
注意区别字符'2'和整数2的写法。
4.用转义字符表示字符常量
以反斜线(\)开头,后跟一个或几个字符序列表示的字符称为转义字符,如\n表示换行符(注意,这个整体是一个字符)。
采用转义字符可以表示ASCII字符集中不可打印或不方便输入的控制字符和其他特定功能的字符(例如有些字符键盘上没有,我们可以通过转义字符的方式代替)。
例如\t为水平制表符,实际上电脑屏幕被分为一些制表区,每8列为一个制表区,每次输入\t,光标就会跳到下一个制表区起始列,要注意的是输入一次\t,是每步跳一个空格,最多跳8步,也就是从当前制表区所在列,一步一步的跳到下一个制表区的起始列。
由于每个字符都有一个确定的ASCII码,肯定都可以用\ooo或\xhh表示,因此,\ooo和\xhh称为通用转义字符,其中ooo表示可以用1至3位八进制数作为码值表示一个ASCII字符,hh表示可以用1至2位十六进制数作为码值表示ASCII字符。
如:“\1234"一“\123和4”,"\128"一“\12和8","\19"一“\1和9
\9错误!,\OxFE错误!
由于字符型数据在内存中只占用1个字节,即使按无符号处理其最大值也仅是255(八进制为377),因此ooo的数值范围为0~377 (八进制),其他值使得字符型数据溢出。同理,hh的数值范围为0~FF。(换言之,ASCII字符对应的整数数值有上限,\后面的八进制或者十六进制数值对应的也有上限)。
5.字符串常量
以一对双引号(“")括起来的零个或多个字符组成的字符序列称为字符串常量,ASCII字符集或多字节字符集(如汉字、日韩文字等)都可以组成字符串。双引号是字符串常量的边界符,不是字符串的一部分,如果在字符串中要出现双引号应使用转义字符(\") 。
6.符号常量
符号常量定义形式为: #define标识符常量
其中#define是宏定义命令(预处理命令),作用是将标识符定义为常量值,在程序中所有出现该标识符的地方均用常量替换。对于那些含义清晰明确,并且编程中要经常用到的数据量最好把它设置为符号常量。例:#define PRICE 30。具体见下面的例子:
Example.cpp
#include <iostream>
using namespace std;
#define PI 3.1415926 //3.1415926即为圆周率T
int main()
{
double r = 5.0;
cout << "L=" << 2 * PI*r << ",S=" << PI*r*r << endl; //PI为3.1415926
return 0;
}
二、变量
在程序运行期间其值可以改变的量称为变量(variable) 。
变量实际上就是计算机中的一个内存单元。
C++语言规定变量应该有一个名字,用变量名代表内存单元。
C++语言通过定义变量时指定其数据类型来确定内存单元的大小。不同的数据类型有不同的数据形式和存储形式,需要一定数量(单位为字节))的内存单元。
1.变量的定义
C++语言变量必须"先定义,后使用”,定义变量的一般形式是:
变量定义后,变量值是未确定的(除了静态存储情形),即变量值是随机的。直接使用此时的变量参与运算,运算结果也是随机的。C++允许在变量定义的同时给变量一个初值,称为变量初始化( initialized) ,一般形式为:
2.变量的赋值
定义变量后,可以通过赋值语句为变量赋予新的数据,一般形式为:
赋值后,无论变量原来的值是多少,都将被新值替代。
3.变量的const限定
在变量定义前加上const修饰,这样的变量称为只读变量(read-only variable)或常变量(constant variable)。它在程序运行期间的值不能被修改。其定义的一般形式为:
场变量只有在初始的时候给它一个值,因为它在后面不能被重新赋值了。因此定义场变量的时候不给它初始化是不允许的。
const限定过的变量在编译过程中若发现有修改的操作时会报编译错误,从而"阻止"对变量的修改。使用const限定强制实现对象最低访问权限,是现代软件开发的设计原则之一。见下面的案例:
这里主函数调用root子函数后,将a, b传入到root函数中,而root函数中将接受的参数修饰为常变量,这样的话在root函数的内部,a, b不能被修改。
Example.cpp
#include <iostream> //标准输入输出函数库
#include <cmath> //数学函数库
using namespace std;
double root(const double x, const double y) // root函数求x - y的平方根
{
if (x>= y) return sqrt(x - y); //只有在x大于等于y时计算x - y的平方根
else return 0; // 否则返回0
}
int main() // 主函数
{ double a, b; // 定义两个浮点型变量
cin >> a >> b; // 输入两个数
cout << root(a, b) << endl; // 输出a - b的平方根
return 0; // 主函数正常结束返回0
}