《Visual C++ 开发从入门到精通》——2.8 常量

2.8 常量

知识点讲解:光盘\视频\PPT讲解(知识点)\第2章\常量.mp4

所谓常量是指内容固定不变的量,无论程序怎样变化执行,它的值永远不会变。在编程中,常量常用于保存像圆周率之类的常数。在本节的内容中,将详细介绍C++中常量的基本知识,为读者步入本书后面知识的学习打下基础。

2.8.1 什么是常量

常量是指在程序执行中不变的量,它分为字面常量和符号常量(又称标识符常量)两种表示方法。如25、-3.26、'a'、"constant"等都是字面常量,即字面本身就是它的值。符号常量是一个标识符,对应着一个存储空间,该空间中保存的数据就是该符号常量的值,这个数据是在定义符号常量时赋予的,是以后不能改变的。如C++保留字中的true和false就是系统预先定义的两个符号常量,它们的值分别为数值0和1。

图像说明文字

注意:我们可以认为,声明一个常量与声明一个变量的区别是在语句之前加上了const。但是,声明常量的时候必须对其进行初始化,并且在除声明语句以外的任何地方不允许再对该常量赋值。
如果一个实型文字常量没有作任何说明,那么默认其为双精度型数据。若要表示浮点型数据,要在该文字常量之后加上F(大小写不限);若要表示长双精度型数据,则要加上L(大小写不限)。

cout语句可以输出字符串,这些带着双引号的字符串的全称是字符串常量,它也是一种文字常量。而带着单引号的常量称为字符常量,它与字符串常量是不同的。字符常量只能是一个字符,而字符串常量既可以是一个字符,也可以由若干个字符组成。

在事实上,只要在不改变变量值的情况下,常量可以由一个变量来代替。但是从程序的安全和严谨角度考虑,我们并不推荐这样做。

2.8.2 常量的分类

1.整型常量
整型常量简称整数,它有十进制、八进制和十六进制3种表示方式。

(1)十进制整数。

十进制整数由正号(+)或负号(-)开始的、接着为首位非0的若干个十进制数字所组成。若前缀为正号则为正数,若前缀为负号则为负数,若无符号则认为是正数。如38、-25、+120、74 286等都是符合书写规定的十进制整数。

当一个十进制整数大于等于-2 147 483 648(即-231-1),同时小于等于2 147 483 647(即231-1)时,则被系统看成int型常量;当在2 147 483 648~4 294 967 295(即231-1)范围之内时,则被看成unsigned int型常量;当超过上述两个范围时,则无法用C++整数类型表示,只有把它用实数(即带小数点的数)表示才能够被有效地存储和处理。

(2)八进制整数。

八进制整数由首位数字为0的后接若干个八进制数字(借用十进制数字中的0~7)所组成。八进制整数不带符号位,隐含为正数。如0、012、0377、04056等都是八进制整数,对应的十进制整数依次为0、10、255和2094。

当一个八进制整数大于等于0同时小于等于017777777777时,则称为int型常量,当大于等于020000000000同时小于等于037777777777时,则称为unsigned int型常量,超过上述两个范围的八进制整数则不要使用,因为没有相对应的C++整数类型。

(3)十六进制整数。

十六进制整数由数字0和字母x(大、小写均可)开始的、后接若干个十六进制数字(0~9,A~F或a~f)所组成。同八进制整数一样,十六进制整数也均为正数。如0x0、0X25、0x1ff、0x30CA等都是十六进制整数,对应的十进制整数依次为0、37、511和4 298。

当一个十六进制整数大于等于0,同时小于等于0x7FFFFFFF时,则称其为int型常量,当大于等于0x80000000同时小于等于0xFFFFFFFF时,则称其为unsigned int型常量,超过上述两个范围的十六进制整数没有对应的C++整数类型,所以不能使用它们。

(4)在整数末尾使用u和l字母。

对于任一种进制的整数,若后缀有字母u(大、小写等效),则硬性规定它为一个无符号整型(unsigned int)数,若后缀有字母l(大、小写等效),则硬性规定它为一个长整型(long int)数。在一个整数的末尾,可以同时使用u和l,并且对排列无要求。如25U、0327UL、0x3ffbL、648LU等都是整数,其类型依次为unsigned int、unsigned long int、long int和unsigned long int。

2.字符常量
字符常量简称字符,它以单引号作为起止标记,中间为一个或若干个字符。如'a'、'%'、'/n'、'/012','/125'、'/x4F'等都是合乎规定的字符常量。每个字符常量只表示一个字符,当字符常量的一对单引号内多于一个字符时,则将按规定解释为一个字符。如'a'表示字符a,'/125'解释为字符U(稍后便知是如何解释的)。

因为字符型的长度为1,值域范围是-128~127或0~255,而在计算机领域使用的ASCII字符,其ASCII码值为0~127,正好在C++字符型值域内。所以,每个ASCII字符均是一个字符型数据,即字符型中的一个值。

3.逻辑常量
逻辑常量是逻辑类型中的值,Visual C++用保留字bool表示逻辑类型,该类型只含有两个值,即整数0和1,用0表示逻辑假,用1表示逻辑真。在Visual C ++中还定义了这两个逻辑值所对应的符号常量false和true,false的值为0,表示逻辑假,true的值为1,表示逻辑真。

由于逻辑值是整数0和1,所以它也能够像其他整数一样出现在表达式里,参与各种整数运算。

4.枚举常量
枚举常量是枚举类型中的值,即枚举值。枚举类型是一种用户定义的类型,只有用户在程序中定义它后才能被使用。用户通常利用枚举类型定义程序中需要使用的一组相关的符号常量。枚举类型的定义格式如下。

enum <枚举类型名> {<枚举表>};

它是一条枚举类型定义语句,该语句以enum保留字开始,接着为枚举类型名,它是用户命名的一个标识符,以后就直接使用它表示该类型,枚举类型名后为该类型的定义体,它是由一对花括号和其中的枚举表组成,枚举表为一组用逗号分开的由用户命名的符号常量,每个符号常量又称为枚举常量或枚举值,例如:

enum color{red, yellow, blue};
enum day{Sun, Mon, Tues, Wed, Thur, Fri, Sat};```
第一条语句定义了一个枚举类型color,用来表示颜色,它包含3个枚举值red、yellow和blue,分别代表红色、黄色和蓝色。

第二条语句定义了一个枚举类型day,用来表示日期,它包含7个枚举值,分别表示星期日、星期一至星期六。

一种枚举类型被定义后,可以像整型等预定义类型一样用在允许出现数据类型的任何地方,如可以利用它定义变量。

enum color c1, c2,c3;
enum day today, workday;
c1=red;
workday=Wed;```
第一条语句开始的保留字enum和类型标识符color表示上述定义的枚举类型color,其中enum可以省略不写,后面的3个标识符c1、c2和c3表示该类型的3个变量,每一个变量用来表示该枚举表中列出的任一个值。

第二条语句开始的两个成分(成分之间的空格除外)表示上述定义的枚举类型day,同样,enum可以省略不写,后面的两个标识符today和workday表示该类型的两个变量,每一个变量用来表示该枚举表中列出的7个值中的任一个值。

第三条语句把枚举值red赋给变量c1。

第四条语句把枚举值Wed赋给变量workday。

在一个枚举类型的枚举表中列出的每一个枚举常量都对应着一个整数值,该整数值可以由系统自动确认,也可以由用户指定。若用户在枚举表中一个枚举常量后加上赋值号和一个整型常量,就表示枚举常量被赋予了这个整型常量的值,例如:

enum day{Sun=7, Mon=0, Tues, Wed, Thur, Fri, Sat};

用户指定了Sun的值为7,Mon的值为0。

若用户没有给一个枚举常量赋初值,则系统给它赋予的值是它前一项枚举常量的值加1,若它本身就是首项,则被自动赋予整数0。如对于上述定义的color类型,red、yellow和blue的值分别为0、1和2;对于刚被修改定义的day类型,各枚举常量的值依次为7、0、1、2、3、4、5、6。

由于各枚举常量的值是一个整数,所以可把它同一般整数一样看待,参与整数的各种运算。又由于它本身是一个符号常量,所以当作为输出数据项时,输出的是它的整数值,而不是它的标识符,这一点同输出其他类型的符号常量是一致的。

5.实型常量
实型常量简称实数,它有十进制的定点和浮点两种表示方法,不存在其他进制的表示方法。

(1)定点表示。定点表示的实数简称定点数,它是由一个符号(正号可以省略)后接若干个十进制数字和一个小数点组成,这个小数点可以处在任何一个数字位之前或之后。例如.12、1.2、12.、0.12、-12.40、+3.14、-02037、-36.0等都是符合书写规定的定点数。

(2)浮点表示。浮点表示的实数简称浮点数,它是由一个十进制整数或定点数后接一个字母e(大、小写均可)和一个1至3位的十进制整数组成,字母e之前的部分称为该浮点数的尾数,之后的部分称为该浮点数的指数,该浮点数的值就是它的尾数乘以10的指数幂。如3.23E5、+3.25e-8、2E4、0.376E-15、1e-6、-6.04E+12、43E0、96.e24等都是合乎规定的浮点数,它们对应的数值分别为:3.25×105、3.25×10-8、20 000、0.376×10-15、10-6、-6.04×1012、0.43、96×1024等。

对于一个浮点数,若将它尾数中的小数点调整到最左边第一个非零数字的后面,则称它为规格化(或标准化)浮点数。如21.6E8和-0.074E5是非规定化的,若将它们分别调整为2.16E9和-7.4E3则都是规格化的浮点数。

(3)实数类型的确定。对于一个定点数或浮点数,C++自动按一个双精度数来存储,它占用8个字节的存储空间。若在一个定点数或浮点数之后加上字母f(大、小写均可),则自动按一个单精度数来存储,它占用4个字节的存储空间。如3.24和3.24f,虽然数值相同,但分别代表一个双精度数和一个单精度数,同样,-2.78E5为一个双精度数,而-2.78E5F则为一个单精度数。

6.地址常量
指针类型的值域是0~232-1之间的所有整数,每一个整数代表内存空间中一个对应的单元(若存在的话)的存储地址,每一个整数地址都不允许用户直接使用来访问内存,以防止用户对内存系统数据的有意或无意破坏。但用户可以直接使用整数0作为地址常量,它是C++中唯一允许使用的地址常量,并称为空地址常量,它对应的符号常量为NULL,表示不代表任何地址,在iostream.h等头文件中有此常量的定义。

2.8.3 常量的应用

实例008 用常/变量来保存圆周率PI的值
源码路径 光盘\part02\changliang  视频路径 光盘\视频\实例\第2章\008

本实例的实现文件为changliang.cpp,具体实现代码如下。

#include "stdafx.h"
#include "iostream.h"
int main(void)
{
     const double _PI_=3.14159;      //圆周率
     double r=0.0;                  //半径
     cin>>r;                       //从命令行读入半径的值
     double area;                 //面积
     area=_PI_rr;              //计算面积
     cout<<"面积是"<<area<<endl;
     return 0;
}```

范例015:斐波那契数列
源码路径:光盘\演练范例\015
视频路径:光盘\演练范例\015
范例016:哥德巴赫猜想
源码路径:光盘\演练范例\016
视频路径:光盘\演练范例\016```
编译执行后将首先需要输入半径,如图2-8所示。

图2-8 输入半径

按Enter键后输出对应的面积,如图2-9所示。

图2-9 输出面积

在上述代码中,用常量PI保存了圆周率3.14159的值。

时间: 2024-11-01 10:45:10

《Visual C++ 开发从入门到精通》——2.8 常量的相关文章

《Visual C++ 开发从入门到精通》——导读

前言 Visual C++ 开发从入门到精通 从你开始学习编程的那一刻起,就注定了以后要走的路:从编程学习开始,依次经历实习生.程序员.软件工程师.架构师.CTO等职位的磨砺:当你站在职位顶峰的位置蓦然回首,会发现自己的成功并不是偶然,在程序员的成长之路上会有不断修改代码,寻找并解决Bug.不停测试程序和修改项目的经历:不可否认的是,只要你在自己的开发生涯中稳扎稳打,并且善于总结和学习,最终将会得到可喜的收获. 第1章 第1章 Visual C++ 6.0的最初印象 1.1 Visual C++

《Visual C++ 开发从入门到精通》——第2章 C++的基本语法2.1 面向对象

第2章 C++的基本语法 Visual C++ 开发从入门到精通 学习Visual C++ 6.0开发知识,需要具备C++语言的基本知识,特别是语法知识.C++是继C语言之后的又一门受程序员欢迎的编程语言,它不但是C的加强版,而且吸取了传统汇编语言的优点,开创了全新的面向对象语言世界.从此,软件领域彻底进入面向对象时代.由此可以看出,C++的最重要特征是:面向对象.语法是任何一门编程语言的基础,一个程序员只有在掌握了语法知识后,才能根据语法规则编写出项目需要的代码.本章将详细介绍C++语言的基本

《Visual C++ 开发从入门到精通》——1.4 技术解惑

1.4 技术解惑 Visual C++ 6.0开发技术博大精深,能够用于多个领域,因此,一直深受广大程序员的喜爱.作为一名初学者,肯定会在学习过程中遇到很多疑问和困惑.为此,在本节的内容中,作者将自己的心得体会传授给大家,帮助读者解决困惑. 1.4.1 学习C++是否有用 下面就介绍一下C++的优势,以增强大家学习的信心. (1)C++是一门全能的语言 首先我们先要知道C++是一门什么语言,简单来说,C++是一门接近于全能的语言.为什么说是接近呢?因为C++有一门语言是无法取代的,那就是汇编.再

《Visual C++ 开发从入门到精通》——1.2 Visual C++ 6.0开发环境

1.2 Visual C++ 6.0开发环境 知识点讲解:光盘\视频\PPT讲解(知识点)\第1章\Visual C++ 6.0开发环境介绍.mp4 学习任何一门程序语言,都需要遵循图1-12所示的过程.本节将介绍Visual C++ 6.0集成开发环境的基本知识. 图1-12 学习一门语言的过程 1.2.1 熟悉集成开发环境 在打开Visual C++ 6.0后,需要熟悉Visual C++ 6.0这个集成开发环境.首先从Windows操作系统中选择"开始"→"程序&quo

《Visual C++ 开发从入门到精通》——2.2 分析C++的程序结构

2.2 分析C++的程序结构 知识点讲解:光盘视频PPT讲解(知识点)第2章分析C++的程序结构.mp4 程序结构即程序的组织结构,它包括语句结构.语法规则和表达式,其内容包含代码组织结构和文件组织结构.在C++开发中,我们必须严格遵循这些规则,才能编写出高效.易懂的程序. 2.2.1 从一段代码看C++程序结构 先看如下代码. //这是一个演示程序,它从命令行读入一个整数,然后加1再输出 #include <stdafx.h> #include <iostream.h> int

《Visual C++ 开发从入门到精通》——第1章 Visual C++ 6.0的最初印象1.1 Visual C++ 6.0概述

1.1 Visual C++ 6.0概述 知识点讲解:光盘视频PPT讲解(知识点)第1章Visual C++ 6.0介绍.mp4 Visual C++ 6.0是一个强大的可视化软件开发环境,通过它可以快速编写出各种C/C++程序.从数据库应用程序到网络应用程序,从图形.图像绘制到多媒体编程,从基本的对话框.单文档.多文档应用程序到动态链接库,再到ActiveX控件.总之,通过Visual C++ 6.0这一工具,可以实现上述各类程序. 1.1.1 Visual C++ 6.0的特点Visual

《Visual C++ 开发从入门到精通》——2.3 必须遵循的编码规范

2.3 必须遵循的编码规范 知识点讲解:光盘\视频\PPT讲解(知识点)\第2章\必须遵循的编码规范.mp4 编码规范即我们在编写代码时需要遵守的一些规则.好的编码规范可以大大提高代码的可读性和可维护性,甚至提高程序的可靠性和可修改性,保证了代码的质量.特别是在团队开发大型项目时,编码规范就成为了项目高效运作的重要要素.本节将简要介绍在编写C++程序时必须遵循的编码规范. 2.3.1 养成良好的习惯 程序快缩进,要使用Tab键缩进,不能和空格键混合使用. 函数不要太长,如果太长,建议拆分处理.

《Visual C++ 开发从入门到精通》——1.3 利用Visual C++ 6.0编写C++程序

1.3 利用Visual C++ 6.0编写C++程序 知识点讲解:光盘视频PPT讲解(知识点)第1章利用Visual C++ 6.0编写C++程序.mp4 实例003 编写.调试和运行一个标准的C++程序源码路径 光盘daimapart 01 视频路径 光盘视频实例第1章003 本实例的功能是,使用Visual C++6.0编写.调试并运行一个标准的C++程序.本实例的具体实现流程如下. (1)选择File→New命令,在New对话框中选择Win32 Console Application项,

《Visual C++ 开发从入门到精通》——2.5 标识符

2.5 标识符 知识点讲解:光盘视频PPT讲解(知识点)第2章标识符.mp4 标识符就是为变量.函数.类及其他对象所起的名称,但是它们不能随意命名,因为在C++系统中,已经预定义了很多标识符,这些预定义的标识符不能被用来定义其他意义. 2.5.1 C++中的保留字 C++中的保留字即我们前面提到的已经预定义了的标识符,常见的C++保留字如表2-1所示. 表2-1 C++预定义标识符 表2-1中的预留关键字已经被赋予了特殊的含义,不能再被命名为其他的对象.例如,int表示整型数据类型,float表