当前课程知识点:C++语言程序设计基础 > 第2章 C++简单程序设计(一) > 基本数据类型、常量、变量 > 基本数据类型、常量、变量
基本数据类型、常量、变量
l 整数类型;
l 浮点数类型;
l 字符类型;
l 布尔类型。
l 常量
n 在源程序中直接写明的数据;
n 其值在整个程序运行期间不可改变。
l 变量
n 在程序运行过程中允许改变的数据。
l 基本的整数类型:int
l 按符号分
n 符号的(signed)
n 无符号的(unsigned)
l 按照数据范围分
n 短整数(short)
n 长整数(long)
n 长长整数( long long )
l ISO C++标准并没有明确规定每种数据类型的字节数和取值范围,它只是规定它们之间的字节数大小顺序满足:
(signed/unsigned)signed char ≤(unsigned) short int ≤(unsigned) int ≤(unsigned) long int ≤ long long int
l 容纳单个字符的编码;
l 实质上存储的也是整数。
l 单精度(float)
l 双精度(double)
l 扩展精度(long double)
l 有字符串常量
l 基本类型中没有字符串变量
l 采用字符数组存储字符串(C风格的字符串)
l 标准C++类库中的String类(C++风格的字符串)
l 只有两个值:true(真) 、false(假)
l 常用来表示关系比较、相等比较或逻辑运算的结果
l 在程序运行的整个过程中其值始终不可改变的量;
l 直接使用符号(文字)表示的值;
l 例如:12,3.5,'A'都是常量。
l 以文字形式出现的整数;
l 十进制
n 若干个0~9的数字,但数字部分不能以0开头,正数前边的正号可以省略。
l 八进制
n 前导0+若干个0~7的数字。
l 十六进制
n 前导0x+若干个0~9的数字及A~F的字母(大小写均可)。
l 后缀
n 后缀L(或l)表示类型至少是long,后缀LL(或ll)表示类型是long long,后缀U(或u)表示unsigned类型。
l 以文字形式出现的实数;
l 一般形式:
n 例如,12.5,-12.5等。
l 指数形式:
n 例如,0.345E+2,-34.4E-3;
n 整数部分和小数部分可以省略其一。
l 浮点常量默认为double型,如果后缀F(或f)可以使其成为float型,例如:12.3f。
字符常量
l 单引号括起来的一个字符,如:'a'、'D'、'?'、'$';
l C++转义字符列表(用于在程序中表示不可显示字符)
C风格字符串常量
例:
通过添加前缀可以改变字符常量或者字符串常量的类型,前缀及其含义如下表所示:
l 变量定义
n 数据类型 变量名1, 变量名2, ..., 变量名n;
l 初始化
n C++语言中提供了多种初始化方式;
n 例如:
int a = 0;
int a(0);
int a = {0};
int a{0};
其中使用大括号的初始化方式称为列表初始化,列表初始化时不允许信息的丢失。例如用double值初始化int变量,就会造成数据丢失。
l 常量定义语句的形式为:
n const 数据类型说明符 常量名=常量值;
或:
n 数据类型说明符 const 常量名=常量值;
l 例如,可以定义一个代表圆周率的符号常量:
n const float PI = 3.1415926;
l 符号常量在定义时一定要初始化,在程序中间不能改变其值。
大家好
欢迎继续学习C++语言程序设计
下面我们来介绍
数据类型常量和变量
我们要能够在程序中表示数据
使用数据
那么就要能够将现实中的
一些数据反映到程序中来
那么C++程序
支持哪些数据类型呢
它支持的数据类型
包括整数类的 浮点数类的
也就是实数类的
还有字符 还有布尔类型
也就是逻辑值
程序中的数据呢
包括常量和变量
所谓常量就是在程序的
整个运行过程中
它的值都不允许被改变的量
那么变量顾名思义
就是它的值在程序的运行过程中
是可以改变的
而且往往是需要改变的
那么整数类型的数据呢
实际上是一大类
分成好多种不同的整型
基本整数类型是int类型
int类型它的字节数
也就是一个int类型
能有多少个字节
这个在C++标准中并没有规定
它是与机器字长相关的
我们也称它为基本整型
那么除此之外呢
还可以按照有符号和无符号之分
我们知道现实中
我们用整数表示的数据
有些数据它是有可能正
有可能负的
而有些数据那肯定就
不可能是负值
那么在有些情况下
如果我们知道这个数据
它不可能取负值的话
我们就可以用
C++里面的无符号整数
它有unsigned这样一个前缀
可以说明这个整数类型
是无符号的
那么相对来说呢
另外一种就是有符号的 signed那么有符号这个关键字呢
经常就省略不写
默认是有符号的
按照它表示数据的范围
也就是所算的字节数不同
它又分成短整型short
和长整型long
和长长整型long long类型
分成这样一些类型
那么在C++标准中并没有规定
每一种类型
每一种整数类型必须占多少字节
它只是规定了它们之间的
一个关系
也就是short类型
它不会宽于基本整型
而long long long类型
它不会窄于基本整型
而每个不同的编译器呢
实现的时候采用的方案
可能会不一样
那另外呢 字符类型在C++中
本质上它里面存放的也是整数
我们第1章讲过
字符数据在计算机内部
是按编码表示的
那么一个字符编码
实际上我们也就可以认为
它是一个整数
大多数系统里面呢
是按ASCII码来编码的
每一个单个的字符占一个字节
ask码是一个七位二进制码
那么一个字节是8位
刚好放得下一个字符的编码
基本数据类型中
还包括了一组实数类型
我们称它为浮点类型
因为实数在计算中
都是用浮点方式表示的
有基本的浮点类型double
双精度的 单精度的float
还有long double
同样C++标准也没有规定
它们各自占多少个字节
只是float的字节数
不应该超过double
long double字节数
不会少于double
然后不同的系统呢
也可能会有不同的实现
那么当我们要存储字符的时候
当然首选这个char类型
是character的缩写
它是字符类型
是单字节的数据类型里面
正好存放一个字符的编码
另外呢还有字符串
在C++中有字符串常量
也就是双引号里面的一串字符
是字符串常量
但是C++的基本数据类型中
没有字符串变量
那内容可变的字符串放在哪儿呢
怎么表示和存储呢
在C语言中是用字符数组
来存放字符串的
在第6章我们会介绍
C++也继承了这一点
所以我们把双引号里面的字符串
另外还有用字符数组
存放的字符串变量都称作
C风格的字符串
C风格的字符串在C++中呢
已经不鼓励使用了
那么C++中
用什么样的变量来存放字符串呢
在C++的标准库里面
有一个String类
我们可以用这个类的对象
来存放字符串
而且这个类提供了很多
非常有用的字符串操作功能
这些也会在第6章
详细的给大家介绍
还有一类数据呢
是表示逻辑值真假的
我们叫它布尔类型
那么布尔类型的数据
它的取值只能是真或者假
就是true或者false两种
这张表上列出来了
在C++中的基本数据类型
以及它们占的字节数
还有它们的表示数据的范围
并不是所有系统里面都是这样的
所以这只是特定的编译环境下
它是这样的一种规定
那么同学们如果用不同的
编译环境的话
你可以去测试一下
或者看一下你编译器的说明书
就知道在你用的系统里面
这些数据类型
它们分别占多少字节
表示范围是多少
接下来我们来看一下
各种类型的常量
所谓常量呢
就是在程序的执行过程中
它的值始终不可变的量
那么什么是始终不可变的量
首先
就是我们直接写出来的文字常量
比如说我们写出来
单引号中的一个字符
或者一个数字
那么既然已经写在这儿了
就是它了
是不可能再被改变的了
这就是文字常量
整数类型的常量呢
它又分十进制 八进制
和十六进制形式的
那么十进制的常量
可以由0到9这些数字
以及它们的组合构成
当然八进制的整数常量
文字常量里面
就只会出现数字0到7
那么十六进制的呢
除了数字0到9以外
从10开始就用字母了
就是A了
A B C D E F合起来
那么这些就是
不同的进制的整数常量
那整数 比如十进制的整数
它有可能是正数
有可能是负数
正数那就是它绝对值本身了
如果是要表示
十进制的一个负整数常量
那就在常量之前
加一个负号就可以了
在常量之后呢
我们还可以写后缀
后缀U表示unsigned
L表示常整数long
还有其他的后缀
大家可以看一下这个地方的说明
自己写程序的时候试着用一用
那么浮点类型的常量
也有两种表现形式
一种是小数形式
我们熟悉的有整数部分
小数点 小数部分
但是对于特别大和特别小的数呢
我们还可以采用另外一种形式
就是我们熟悉的
这种科学技术法的形式
带这里我们叫它指数形式
前面一部分呢
是它的尾数部分
然后是十的方次是指数部分
那么字符常量就是单引号
括起来的一个字符
它在内存中的存储形式
应该存的就是这个字符的ask码
那有些字符属于特殊字符
在屏幕上没办法显示的
比如说响铃 比如说回车
你打一个回车字符
它达到换行的效果了
那么这些字符怎么表示呢
我们可以用这种表里面给出的
这个转译字符来表示
字符串常量呢
又分成C风格的字符串
以及我们以后要讲的
这个string类的对象
它也可以是常对象
也可以有常量 也可以有变量
那最简单的这个C风格的字符串
是怎么构成的呢
它的形式上
就是双引号里面的一串字符
它在内存里面的存储形式是什么
是字符的ask码依次连续存放
在最后的末尾用一个0
作为结束标记
那么哪怕你的字符串里面
只有单个字符
它末尾也是有一个0
作结束标记的
比如说双引号里面的a
和单引号里面的a它就是不同的
双引号里面的a
是一个字符串
它有一个字符
还有一个0作结束标记
而单引号a
就只表示这一个单独的字符
那么通过在字符串常量
前面加前缀呢
也可以改变这个字符串常量
它的类型
那么大家可以参考这张表
有了常量呢
我们还需要变量
很多时候我们需要把常量
存放到变量中去
更多的时候呢
这个变量是在运行的时候
用来接收计算结果
用来接收用户输入的数据的
变量是在程序的运行过程中
它的值可变的量
实际上呢变量也就是一个名字
结合到一组内存单元
我们的程序要用内存单元
去存放数据 怎么用呢
当然可以用地址
确实C语言
C++语言都可以用地址
我们后面会讲
但是用地址毕竟不是很方便
所以在高级语言中
有一种通用的办法
就是用变量名
可以用定义变量的方式
来使用内存空间
在定义变量的时候呢
也可以同时给变量进行初始化
定义变量首先是要规定
这个变量它属于什么类型的
这样的编译器也就知道
要给它多少字节的空间
那么得到这个字节空间以后
它的初始值是什么状态呢
根据这个变量所在的位置不同
它的初始状态会不一样的
如果是在所有函数之外
定义的变量它叫全局变量
如果不给它初始化
它会自动的有一个基础的初始值
比如说数值型的它会是0
这个在第5章我们还会详细介绍
如果是在函数体内部的局部变量
你定义的时候不给它初始化
它的值就是不确定的
可能是垃圾数据
所以在定一个变量的时候
对变量进行初始化
是一个很好的习惯
在C++中呢
初始化一个变量
有四种可用的形式
一种是用等号一样的符号
表示用右边的值去初始化
左边的变量
另一种是用圆括号
在定义变量之后接一个圆括号
圆括号之中给出变量的初始值
还有我们可以用大括号
用大括号也有两种方式
那么这个是初始化列表的形式
使用这种初始化列表的形式呢
这种初始化过程
就不允许有数据丢失
什么叫数据丢失呢
比如说你用double类型
去初始化一个int类型
那么肯定就有数据丢失了
至少它的小数部分是丢失掉了
那而且double类型的表示数据
范围更宽
也许连整数部分在int里面
都放不下呢
所以你要用初始化列表的
这种大括号的形式呢
你就不能有这样的情况发生
我们前面介绍过有文字常量
实际上如果只用文字常量
有时候并不方便
比如说我们在程序里面
可能需要用一个圆周率pi
可能开始我们想用3.14
那在程序写好以后
可能因为精度的要求
我们想提高精度
就把pi统一改成3.14159
那这种情况下
你能在程序的各个地方都保证
同步都做修改吗
哪个地方如果没有改的话
那整个前后所用的数据
就不一致了
所以在这种情况下呢
我们可能选择用符号常量更方便
所谓符号常量
它就像定义变量一样
也可以定义
然后给它进行初始化
它也有名字
我们看这一举的例子
但是它与变量相比较呢
前面多了一个const来修饰
表示这个名字它的定义过程
虽然跟变量一样
要跟一组内存空间来结合
定义之后呢
可以用这个名字来访问
这组内存空间
但是有了这么一个const
这种访问就是只读的了
它只能用 不能修改
那么好 只能用不能修改
那它的值在什么时候获得呢
当然你不能在定义之后
再从键盘输入值去给它
必须在定义的时候就给它初始值
如果定义的时候
你不给它初始值 系统会报错的
-导学
--第1章导学
-计算机系统简介
--计算机系统简介
--计算机系统简介 测试题
-计算机语言和程序设计方法的发展
--计算机语言和程序设计方法的发展 测试题
-面向对象的基本概念
--面向对象的基本概念 测试题
-程序的开发过程
--程序的开发过程
--程序的开发过程 测试题
-信息的表示和储存
--计算机的数字系统
--数据的编码表示
--信息的表示和储存 测试题
-实验指导
-导学
--第二章导学
-C++语言概述
--C++语言概述 测试题
-基本数据类型、常量、变量
--程序举例
--基本数据类型、常量、变量 测试题
-运算与表达式
--运算与表达式 测试题
-实验二:简单程序设计(上)
-数据的输入和输出
--数据的输入和输出
--数据的输入和输出 测试题
-选择结构
--if语句
--switch语句
--选择结构 测试题
-循环结构
--for语句
--循环结构 测试题
-自定义类型
--自定义类型
--自定义类型
-第2章小结
--第二章小结
-实验二:C++简单程序设计(下)
-导学
--导学
-函数定义
--函数定义
--函数定义 测试题
-函数调用
--例3-2
--例3-3
--例3-4
--例3-5
--例3-6
--函数调用 测试题
-嵌套与递归
--例3-9
--例3-10
--嵌套与递归 测试题
-函数的参数传递
--函数的参数传递
--函数的参数传递 测试题
-引用类型
--引用类型 测试题
-含有可变参数的函数
--含有可变参数的函数 测试题
-内联函数
--内联函数 测试题
-constexpr函数
--CONSTEXPR函数课后习题
-带默认参数值的函数
--带默认参数值的函数 测试题
-函数重载
--函数重载 测试题
-C++系统函数
--C++系统函数习题
-第3章小结
--第三章小结
-实验三(上)函数的应用
-实验三(下)函数的应用
-导学
--导学
-面向对象程序的基本特点
--面向对象程序的基本特点 测试题
-类和对象
--类和对象的定义
--类和对象 测试题
-构造函数
--构造函数基本概念
--委托构造函数
--复制构造函数
--构造函数 测试题
-析构函数
--析构函数
--析构函数 测试题
-类的组合
--类的组合
--类的组合程序举例
--前向引用声明
--类的组合 测试题
-UML简介
--UML简介
--UML简介课后习题
-结构体与联合体
--结构体与联合体 测试题
-枚举类
--枚举类
--枚举类 测试题
-第4章小结
--第四章小结
-实验四(上)
--实验四(上)
-实验四(下)
--实验四(下)
-导学
--导学
-标识符的作用域与可见性
--标识符的作用域与可见性 测试题
-对象的生存期
--对象的生存期
--对象的生存期 测试题
-类的静态成员
--类的静态成员 测试题
-类的友元
--类的友元 测试题
-共享数据的保护
--共享数据的保护 测试题
-多文件结构和预编译命令
--多文件结构和预编译命令 测试题
-第5章小结
--小结
-实验五
--实验五
-导学
--导学
-数组的定义与初始化
--数组的定义与使用
--一维数组应用举例
--数组的定义与初始化 测试题
-数组作为函数的参数
--数组作为函数的参数 测试题
-对象数组
--对象数组
--对象数组 测试题
-基于范围的for循环
-指针的定义和运算
--指针的定义和运算 测试题
-综合实例
--综合实例
-实验六(上)
--实验六上
-指针与数组
--指针数组
--指针与数组 测试题
-指针与函数
--指针类型的函数
--指向函数的指针
--指针与函数 测试题
-对象指针
--对象指针
--对象指针 测试题
-动态内存分配
--动态内存分配 测试题
-智能指针
--智能指针
-vector对象
--vector对象
--vector对象 测试题
-对象复制与移动
--移动构造
--对象复制与移动 测试题
-字符串
--C风格字符串
--string类
--字符串 测试题
-第6章小结
--第六章小结
-综合实例
--综合实例
-实验六(下)
--实验六(下)