1. 变量 #
1.1 什么是变量 #
什么是变量?C++ 中,变量就像一个碗,可以装数值。
1.2 变量命名规则 #
变量的名字不能随便起,有下面的规则:
- 只可以包含数字、字母和下划线
- 第一位不能是数字
- 区分大小写
下面来看一些例子:
8a // 错误 a8 // 正确 a_5 // 错误 abc_123_ // 正确 _123 // 正确 _a // 正确 a+-*/ // 错误 abcdefg // 正确
2. 整型(整数型) #
2.1 定义 #
什么是整型?就是:1、-17、88、666…,也就是我们在数学中所说的整数。
C++ 中,int 是最常被用到的整型。
C++ 中,一个值(比如 88 ),要用一个变量来存储它。
2.2 声明变量 #
怎么声明变量呢?
int main() { int a; // 声明一个整型变量 …… return 0; }
2.3 赋值 #
怎么给变量赋值呢?
变量就像一个碗。
所谓的“赋值”,就是把一个数值,存储到变量中。
C++使用 等号(=) 来作为 赋值 操作。
int main() { int a; // 声明一个整型变量 a = 88;// 赋值(存放数值 88 到变量 a 中) …… return 0; }
2.4 初始化 #
那什么是“初始化”呢?
“初始化”,其实是关于变量,最一开始,刚刚被创造 的过程。
所以,我们需要来详细了解一下变量的创造过程。
我们需要先看来看一下,声明的过程
2.4.1 变量的声明 #
“声明” : 其实就是“告诉程序,我们将要使用一个变量,并将其命名
int a; // 声明一个 int 变量,命名为 a int a1 = 15; // 声明一个 int 变量,命名为 a1,并赋值为 15 int a2(15); // 声明一个 int 变量,命名为 a2,并初始化为 15
声明的基本结构,就是:int value; //(数据类型 变量名)
从上面的例程中,你是否发现了:
在声明中,其实也可以同时,“将一个数值,存储到变量中”。
从上面的例程中,我们可以看出,“赋值”和“初始化”都可以实现这个过程。
下面我们就来看一下,它们之间的差别。
2.4.2 赋值和初始化的差别 #
赋值的过程

初始化的过程

请结合上图,叙述一下赋值和初始化,在时间效率上,有什么差异。
2.4.3 初始化的语法 #
下面正式看一下,初始化的写法。
int a; // 声明一个 int 变量,命名为 a int a2(15); // 声明一个 int 变量,命名为 a2,并初始化为 15 int a3 (9); // 声明一个 int 变量,命名为 a3,并初始化为 9,括号之间可以有空格 a2 (25); // 【这是错误的写法】初始化,只可以用于声明过程 int _a_b = 9; // 赋值,可以用于声明过程 _a_b = 8; // 赋值,可以用于声明之外的过程
初始化的基本结构,就是:int value(86); // 数据类型 变量名 ( 数值 )
这里要特别注意,初始化,只可以用于声明过程。赋值,可以用于声明和声明之外的过程。
2.5 输出 #
怎么输出变量呢?
#include <iostream> // 使用头文件 using namespace std; // 使用名称空间 std int main() { int a; // 声明一个整型变量 a = 88; // 赋值(存放数值 88 到变量 a 中) cout << "整型变量 a 的值是:" << a << endl; int a2(15); // 声明一个 int 变量,命名为 a2,并初始化为 15 cout << "整型变量 a2 的值是:" << a2 << endl; return 0; }
2.6 其它整型 #
除了 int 之外,C++ 中还有其它的整型: short,long 和 long long
它们相当于不同大小的“碗”!
在计算机中,每一个数值,都占据一定大小的存储空间。
一般来说,越大的值,需要的存储空间越大,如上图所示。
那么,对于不同大小的数值,则需要不同大小的变量(碗),来存储它们。
整型中,几个不同子类型的大小关系如下:
short <= int <= long <= long long
大家一定注意到了,这里的关系,给的是“小于等于”号。原因是,这几个类型的大小,会随着操作系统的不同,而有一定的差异。
2.6.1 变量的基本操作 #
请看示例程序:
#include <iostream> // 使用头文件 using namespace std; // 使用名称空间 std int main() { /* * 下面的类型大小,以 32 位操作系统为例说明,long 和 int 大小相同。 * 如果在 64 位操作系统上,则 long 和 long long 大小相同。 */ short a_sho; // 声明一个 short 变量 int a_int; // 声明一个 int 变量 long a_lon; // 声明一个 long 变量 long long a_ll ; // 声明一个 long long 变量 a_sho = 32767; // 赋值,short 类型的上限,是 32767 a_int = 32768; // 赋值,int 类型的上限,是 2147483647 a_lon = 2147483647; // 赋值,long 类型的上限,是 2147483647 a_ll = 2147483648; // 赋值,long long 类型的上限,是 9223372036854775807 cout << "short value = " << a_sho << endl; cout << "int value = " << a_int << endl; cout << "long value = " << a_lon << endl; cout << "long long value = " << a_ll << endl; return 0; }
2.6.2 有符号/无符号的整型 #
如数学上,整型还有“有符号/无符号”的差别。
- 有符号 – 代表有正有负,比如“温度”

- 无符号 – 代表非负数,比如“容量”

- 有符号和无符号的整型,拥有相同的大小,但是它们表示的范围不同,如红色区域所示。
C++中,无符号需要特别声明,用 “unsigned”表示。
有符号 | short | int | long | long long |
无符号 | unsigned short | unsigned int | unsigned long | unsigned long long |
2.6.3 不同整型的表示范围 #
在不同的机器上,不同类型的“表示范围”会有差异。下表,以传统的 32 位操作系统为例,列出它们的差异。
类型名称 | short | int | long | long long | unsigned short | unsigned int | unsigned long | unsigned long long |
所占字节数 | 2 | 4 | 4 | 8 | 2 | 4 | 4 | 8 |
表示范围 | -32768~32767 | -2147483648~ 2147483647 | -2147483648~ 2147483647 | -9223372036854775808~ 9223372036854775807 | 0~65535 | 0~ 4294967295 | 0~ 4294967295 | 0~ 18446744073709551615 |
3. 基本运算 #
数学中的 加、减、乘、除、括号等 四则运算规则,在 C++ 中依然成立。
其中,除法比较特别,我们将重点讲解。
请运行下面代码:(也请注意,模仿示例代码的写法)
3.1 加法 #
#include <iostream> // 使用头文件 using namespace std; // 使用名称空间 std int main() { int a(10); // 这是初始化 int b = 20; // 这是赋值 int result = a + b; // 加法运算 cout << "a + b = " << result << endl; return 0; }
3.2 减法 #
#include <iostream> // 使用头文件 using namespace std; // 使用名称空间 std int main() { int a(10); // 这是初始化 int b = 20; // 这是赋值 // 加法运算 cout << "a - b = " << a - b << endl; return 0; }
3.3 乘法 #
#include <iostream> // 使用头文件 using namespace std; // 使用名称空间 std int main() { int a(10); // 这是初始化 int b = 20; // 这是赋值 cout << "a * b = " << a * b << endl; // 乘法运算 return 0; }
在这里,需要注意的是,C++ 中,使用 星号“*” 来表示乘法。
常见的一些错误写法和正确写法:
int a(9), b(-2), c(8); // 可以同时声明多个,使用逗号隔开。 int result0 = a X b; // 错误;错误的使用了数学中的乘号。 int result1 = a x b; // 错误;错误的使用了数学中的乘号。 int result2 = a b; // 错误;错误的使用了数学中的乘号省略规则。 int result3 = da*b c; // 错误;错误的使用了数学中的乘号省略规则。 int result4 = a * b; // 正确;空格可有可无。 int result5 = a*b * c; // 正确;
3.4 括号 #
#include <iostream> // 使用头文件 using namespace std; // 使用名称空间 std int main() { int a(10); // 这是初始化 int b = 20; // 这是赋值 int result = a*((b – 5)*10); // 注意,()规则成立。C++ 中只有小括号,详见下面的说明。 cout << "result = " << result << endl; return 0; }
在这里,需要注意的是,C++ 只有小括号
也就是说:
int a, b, c; // 可以同时声明多个变量 // 数学表达式 a = 20 - {2*a - [(a + b) - (a - b)]} // 注意,数学上,存在小括号、中括号、大括号。 // C++ 表达式 a = 20 - (2*a - ((a + b) - (a - b))); // 注意只有小括号。理论上小括号可以嵌套无限多层。
3.5 除法(整数) #
请运行下面代码:
#include <iostream> // 使用头文件 using namespace std; // 使用名称空间 std int main() { int a (10); int b (2); int c (3); cout << "10/2 = " << a/b << endl; cout << "10/3 = " << a/c << endl; return 0; }
你有发现什么异常吗?请讨论一下。
仅保留商 的 整数除法
从上面的计算结果来看,我们发现整数除法的结果,似乎有点问题。
在数学上,我们熟悉的除法运算是这样的:
在这里,我们需要特别注意的是,C++ 的整数除法,是仅保留“商”的除法。
3.6 一种新的运算 – 取余数 #
请运行下面的代码:
#include <iostream> // 使用头文件 using namespace std; // 使用名称空间 std int main() { int a = 10 % 3; // 取余数,使用 % cout << a << endl; return 0; }
一般,“取余数”,我们简称为“取余”;
C++ 使用 百分号(%) 表示“取余”;
另外,由于中文翻译的原因,也被称为“取模”;这里有一个小故事;
在数学上,“求余数” 是大数学家高斯,首先提出的。高斯使用单词 Modular arithmetic(意思为“同余数运算”)的前三个单词,创造了“取余”符号 Mod。
Mod 的发音和 “模” 相近。所以,中文翻译中,也将“取余数”称为“取模”。
希望你们也可以像高斯一样,以光荣的方式,将你的名字写入人类的历史。
3.7 小结 #
int a, b, c, result; result = a + b; // 加 result = a - b; // 减 result = a * b; // 乘 result = a * (b + c); // 括号 result = a / b; // 取商(整数除法) result = a % b; // 取余(整数除法)
4. 输入 #
怎么从键盘输入一个数据呢?
请运行下面的代码:
#include <iostream> int main() { std::cout << "请输入一个整数" << std::endl; int a(0); // 初始化为 0 std::cin >> a; // 输入一个值,并赋值给 a std::cout << "你输入的值是:" << a << std::endl; return 0; }
注意:
输入使用的符号是 cin >>
输出使用的符号是 cout <<
4.1 输入的基本用法 #
请运行下面的代码:
#include <iostream> int main() { /* 基本输入 */ int a(5); std::cout << "请输入一个整数:" << std::endl; std::cin >> a; /* 输入两个数 */ int a(0), b(0); std::cout << "请输入 2 个整数。(输入方法之一:输入第一个之后,回车,然后输入下一个数)" << std::endl; std::cin >> a >> b; return 0; }
多个输入时,输入的方法有两种:
输入第一个之后,回车,然后输入下一个数;
连续输入多个数值,数值之间使用空格隔开,最后回车;
4.2 使用名称空间 #
和输出 cout 一样,也可以 using 来简化书写。
#include <iostream> using namespace std; // 使用名称空间 std int main() { int a(5); cout << "请输入一个整数:" << endl; cin >> a; }