目录
1. 变量
影院售卖机
学习变量,实现售卖机功能第一步。
计算机的内存
内存:计算机用来记忆,存储信息的硬件。
操作系统一般会把内存划分成不同区域来使用。
将内存想象成一个充满盒子的仓库。
内存中每个基本存储单元可以存放一个字节的数据,每个字节具有8位,也就是8个比特(bit)。
每个内存单元有一个唯一的地址,常用一个16进制数表示和区分。
变量的声明
变量是专门用来存储数据的容器,会根据数据类型决定容量大小。
比如可乐与爆米花的数量需要使用变量来记录,支付总额也需要一个变量来表示。
这些变量都是整数类型,所以容量为一个整数的大小。
变量对应着内存中的一个地址,用于计算时数据的存储和读取 。
比如修改可乐与爆米花的数量时,我们需要在内存中找到对应的变量,并改变其中的数据
变量的声明就是向内存申请“盒子”(内存)的过程。一般的声明方式为 数据类型 变量名称。
代码中的 int(integer)用来明确变量的数据类型
代码中的 coke、popcorn 是用来区分不同变量的变量名称
// 导入系统输入输出头文件 iostream
#include <iostream>
// 使用标准命名空间 std
using namespace std;
int main() {
// TODO 声明可乐数量变量 coke
int coke;
// TODO 声明爆米花数量变量 popcorn
int popcorn;
// TODO 声明消费总额变量 money
int money;
return 0;
}
变量命名规则
数字不可以出现在第一个位置上;
例如:coke330合法,但是330coke以数字作为开头,因此不合法。
在C++中,标识符中的英文字母是区分大小写的;
例如:coke330和Coke330表示的是完全不同的变量名称,即表示不同的标识符。
C++的关键字(保留字)不可以⽤做标识符;
例如:pout合法,但是cout是C++的关键字,不可以用作标识符,因此不合法 Tips: 无需背诵所有关键字
变量的初始化
// 声明消费总额变量 money,并且初始化数值为 0
int money = 0;
代码中的符号"="是赋值运算符
操作是将符号"="右边的数值存放到 左边 的变量中
// 导入系统输入输出头文件 iostream
#include <iostream>
// 使用标准命名空间 std
using namespace std;
int main() {
// TODO 声明消费总额变量 money,并且初始化数值为 0
int money = 0;
return 0;
}
变量的输出
//将初始化好的消费总额打印在屏幕上,并且进行换行
cout << money << endl;
输出变量的时候,我们可以注意以下几点
变量money与"Hello, World!"一样,也可以作为输出内容
输出的内容是变量中保存的数值,而不是变量名称
// 导入系统输入输出头文件 iostream
#include <iostream>
// 使用标准命名空间 std
using namespace std;
int main() {
// 定义消费总额变量 money,并且初始化数值为 0
int money = 0;
// TODO 将初始化好的消费总额打印在屏幕上,并且进行换行
cout << money << endl;
return 0;
}
总结
// 导入系统输入输出头文件 iostream
#include <iostream>
// 使用标准命名空间 std
using namespace std;
int main() {
// 声明可乐数量变量 coke
int coke;
// 声明爆米花数量变量 popcorn
int popcorn;
// 声明消费总额变量 money,并且初始化数值为 0
int money = 0;
// 将初始化好的消费总额打印在屏幕上,并且进行换行
cout << money << endl;
return 0;
}
练习题
- 阅读以下代码,若想要输出a+b的结果,____处应当填入?
const int a = 10;
int b = 10;
____
常量a不可被修改。
2. 常量
字面量-装在变量里的常量
内存可以看作一个充满盒子的仓库,每个盒子可以储存计算时用到的数据,称为一个变量。例如:用户需要的可乐数量、爆米花数量以及总金额等。
计算机如何定义存放在变量中的数据?
字面量就是存放在变量中的数据。
字面量经常会被装到变量中使用,这个操作叫做赋值,一般写法为 变量名 = 字面量。
// 小戴需要2瓶可乐,3个爆米花
coke = 2;
popcorn = 3;
代码中的符号"="是赋值运算符
操作是将符号=右边的数值存放到左边的变量中
#include <iostream>
using namespace std;
int main() {
int coke, popcorn;
// TODO 小戴需要2瓶可乐,3个爆米花
coke = 2;
popcorn = 3;
return 0;
}
整数和浮点字面量-数学计算中的常量
整数字面量是没有任何小数或指数部分的数字字面量,与数学中的整数直接关联。
十进制:直接写出的整数。例如:0,23,-1024
八进制:以数字0开头的整数,有效数字为0~7,并且不带有正负号。例如:0126,0163
十六进制:以0x或0X开头的整数,有效数字为0~9、A~F(a~f),并且不带有正负号。例如:0x12a,0xf39
浮点字面量是有分数形式或指数形式的数字字面量,与数学中的小数直接关联。
小数形式:由数字和小数点组成。例如:0.66,30.0,14.15926
指数形式:在数学中,一个可以用幂的形式来表示的形式。在C语言中,则以e或E后跟一个整数来表示以10为底数的幂数。
e或E的左侧必须要有数字
e或E的右侧为幂次的数值,必须为整数
上述小数可以等价表示为:6.6E-1,30.0e0,0.01415926E3
字符字面量-表达字符的常量
单字符字面量:
通过将单个字符括在单引号内来创建字符字面量。
例如:'a','m','F','2','}'等。
转义符字面量:
使用''开头的转义字符序列来表示一个特殊字符。
`'\n'`表示换行符;
`'\t'`表示制表符;
`'\''`表示单引号字符(不被解析成字符外的单引号);
`'\\'`表示真正的斜杠字符。
字符串字面量-构成输出的常量
字符串字面量是由一对双引号括起来的字符序列
字符串中可以包含类似于字符字面量普通字符以及转义字符
字符串除了存储所包含的字符外,还额外包含一个结束标志'\0'
'\0':结束符; ASCII编码对应数值为0的字符
练习:
输出下列:
****
****
****
#include<iostream>
using namespace std;
int main() {
// TODO 输出三行内容,每行为4个*和一个换行符
cout << "****\n";
cout << "****\n";
cout << "****\n";
return 0;
}
符号常量-具有名称的常量
在C++中,随着程序运算不改变的量叫做符号常量,可以使用const关键字来定义并且初始化:
const int kCokePrice = 5;
const int kPopcornPrice = 10;
const是⼀个修饰符,加在数据类型int的前⾯,用来给这个变量加上一个不变的属性
初始化时也可以将修饰符const与数据类型int调换位置,写成int const kCokePrice = 5;
总结代码
#include<iostream>
using namespace std;
int main() {
// 字面量
cout << 1 << " 是一个整型字面量" << endl;
cout << 0.5 << " 是一个浮点型字面量" << endl;
cout << 'a' << " 是一个字符型字面量" << endl;
cout << "这句话就是一个字符串型字面量\n" << endl;
// 定义符号常量表示可乐单价
const int kCokePrice = 5;
// 定义符号常量表示爆米花的单价
int const kPopcornPrice = 10;
// 将可乐与爆米花的单价分别打印在屏幕上,并且加上提示信息
cout << "CokePrice is: " << kCokePrice << endl;
cout << "PopcornPrice is: " << kPopcornPrice << endl;
return 0;
}
课后题
- 下列关于常量说法正确的是____。
选项A字符常量只能包括一个字符
选项B"true"是字符串字面量
3. 数据类型
什么是数据类型
在C++的变量声明中,变量名之前需要指定数据类型。
数据类型 变量名称;
数据类型将会决定一个变量存储什么样的信息,从而决定变量的容量有多大,在内存中需要分配多大的空间。
C++中的数据类型分为基本类型和复合类型:
其中基本类型包括了整数、浮点数
复合类型是在基本类型的基础上创建的,包括数组、字符串以及结构体等
整数类型
整数类型分为数值整数类型和字符类型
数值整数用来表示没有小数部分的数字。
数值整数可以按照占用内存大小分为short、int、long以及long long这四种,占用内存越大的类型能表示的数值范围就更大。
同时又可以按照是否表示负值分为有符号版本和无符号版本
字符类型则专门用来存储计算机中的基本符号:英文字母、数字以及标点等。
整数类型-数值整数类型
表示范围
在数学中,整数的范围是无穷无尽的,但是计算机的内存是有限的,所以一种类型能表示的整数范围也是有限的。因此,在C++中,我们需要根据需求,选择合适的数值整数类型。
short、int、long以及long long这四种数值整数类型占用的字节数递增,所以能表示的整数范围也递增。
short类型至少占据2个字节,即16位;一般占用2字节;
int在现代系统中一般占用4个字节,即32位;类型长度大于等于short类型;
long类型长度至少占据4个字节,且大于等于int类型;一般占用4个字节;‘
long long类型长度至少占据8个字节,且大于等于long类型;一般占用8个字节。
计算机内存采用二进制的存储方式,每一个位可以表示0与1两种状态,因此占据nn 位的内存块,可以表示 2^n2个不同的数字。
比如一个 8 位的内存块,可以表示 2 的 8 次方个不同的组合,也就是说能表示 256 个不同的整数;
32 位的int类型,可以表示 2^{32}=4294967296232=4294967296 个不同的整数。
每个类型数据可以分别指定有符号版本和无符号版本,用来明确该类型是否需要表示负值。
比如unsigned int就表示无符号的int类型,只能表示正值;
signed int就表示有符号的int类型,可以表示负值。
不指定有无符号时,都默认是有符号版本。
如果是无符号版本,那么一个8位的内存块可以一一对应到0~255之间的整数;
如果是有符号版本,那么就会考虑负数,这个8位的内存块可以表示一128~127之间的整数。
整数类型-数值整数类型
short price = 500; // 单价
int coupon = -2000; // 优惠
long total = 48000; // 总价
如果输入:
short total = 48000; // 总价
cout << "总价为:" << total << "元。\n";
输出:
总价为:-17536元。
Tips: 这是由于short默认状态下是符号类型,占据16位内存,数据范围在-32768~32767之间,所以无法正确表示48000。
默认状态下short等四个整数类型都是符号类型,这使得它们能够表示的最大数值减小了一半左右。
在确定变量的数值不会是负数的情况下,我们可以利用unsigned关键字,加在原有数据类型之前,创建无符号的整数类型。
unsigned short bike = 6; // 单车数
unsigned int car = 58000; // 汽车数
unsigned long people = 16825000; // 总人数
如果使用无符号short类型定义总价total变量,我们运行以下代码:
unsigned short total = 48000; // 总价
cout << "总价为:" << total << "元。\n";
输出:
总价为:48000元。
#include <iostream>
using namespace std;
int main() {
// TODO 声明 short