跳至正文
View Categories

4 min read

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++ 中还有其它的整型: shortlonglong 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”表示

有符号shortintlonglong long
无符号unsigned shortunsigned intunsigned longunsigned long long

2.6.3 不同整型的表示范围 #

在不同的机器上,不同类型的“表示范围”会有差异。下表,以传统的 32 位操作系统为例,列出它们的差异。

类型名称shortintlonglong longunsigned shortunsigned intunsigned longunsigned long long
所占字节数24482448
表示范围-32768~32767-2147483648~
2147483647
-2147483648~
2147483647
-9223372036854775808~
9223372036854775807
0~655350~
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;
}

5. 课后练习 #

  1. 简单计算器
  2. 计算苹果数
  3. 校车人数
  4. 计算(a+b)*(c-b)的值
  5. 整数除法