2.2 变量

正在加载视频播放器…

GESP C++ 一级:变量精讲

核心目标:理解变量的概念,掌握变量的声明、初始化、赋值、命名、类型、作用域,能正确使用变量完成输入、计算和输出。
变量是内存中一块有名字、有类型的存储空间,先声明后使用,类型决定能存什么,名字用来访问它。


一、变量是什么

变量可以理解为内存中的一个小盒子:

  • 盒子有名字:变量名,如 a、sum。
  • 盒子有类型:决定能放什么数据,如 int 只能放整数。
  • 盒子有值:当前里面存的数据。
  • 盒子的值可以改变:所以叫“变量”。

示例:

int a = 10;   // 声明一个整数变量 a,初始值为 10
a = 20;       // 把 a 的值改成 20
cout << a;    // 输出 20

变量三要素:

要素 说明 示例
类型 决定存储的数据种类 int、double、char
名字 用来访问变量 a、sum、score
值 变量当前存储的数据 10、3.14、'A'

二、变量的声明

声明变量就是告诉计算机:我要一个什么类型、什么名字的变量。

基本格式:

类型 变量名;

示例:

int a;          // 声明一个整数变量 a
double score;   // 声明一个小数变量 score
char ch;        // 声明一个字符变量 ch
bool flag;      // 声明一个布尔变量 flag

一次声明多个同类型变量:

int a, b, c;

考试提示:变量必须先声明,后使用。没声明就直接写 a = 10; 是错误。


三、变量的初始化与赋值

1. 初始化

声明变量的同时给它一个初始值:

int a = 10;
double pi = 3.14;
char ch = 'A';
bool flag = true;

也可以一次初始化多个:

int a = 1, b = 2, c = 3;

2. 赋值

先声明,后赋值:

int a;
a = 10;

也可以重新赋值:

int a = 10;
a = 20;
a = a + 5;   // 先算右边 a+5=25,再赋给 a
cout << a;   // 输出 25

3. 初始化和赋值的区别

项目 初始化 赋值
时机 声明时给值 声明后给值
示例 int a = 10; int a; a = 10;
特点 一步完成 可以多次修改

4. 未初始化的危险

int a;
cout << a;   // 错误做法,a 的值不确定

局部变量未初始化时,里面是“随机值”,不能直接使用。


四、变量的命名规则

变量名必须遵守以下规则:

  1. 只能由字母、数字、下划线组成。
  2. 不能以数字开头。
  3. 不能是 C++ 关键字,如 int、if、for、return。
  4. 区分大小写:a 和 A 是两个不同变量。
  5. 同一作用域内不能重复定义同名变量。
  6. 建议见名知义:sum、score、maxn。

正确示例:

int a;
int _b;
int sum1;
int student_score;

错误示例:

int 1a;        // 错误:数字开头
int a-b;       // 错误:有减号
int int;       // 错误:关键字
int a, a;      // 错误:同一作用域重复定义

五、常用数据类型与变量

一级常用类型:

类型 含义 示例 说明
int 整数 int a = 10; 约 (-2.1\times10^9) 到 (2.1\times10^9)
long long 长整数 long long x = 10000000000; 存更大的整数
float 单精度小数 float x = 1.5; 精度较低
double 双精度小数 double x = 3.14; 一级首选小数类型
char 字符 char c = 'A'; 存一个字符
bool 布尔 bool f = true; true 或 false

选择建议:

  • 存整数:一般用 int。
  • 数很大:用 long long。
  • 存小数:用 double。
  • 存单个字符:用 char。
  • 存真假:用 bool。

六、变量的作用域

作用域就是变量能使用的范围。

1. 局部变量

在 main 函数或 {} 内定义的变量,只在所在块内有效。

int main() {
    int a = 10;
    {
        int b = 20;
        cout << a << " " << b << endl;  // 正确
    }
    // cout << b;  // 错误,b 已经离开作用域
    return 0;
}

2. 循环变量作用域

for (int i = 1; i <= 5; i++) {
    cout << i << " ";
}
// cout << i;  // 错误,i 只在循环内有效

3. 全局变量(了解)

在 main 外面定义的变量,整个程序都能用:

int g = 100;

int main() {
    cout << g;
    return 0;
}

一级重点掌握局部变量,全局变量了解即可。


七、常量 const

常量是值不能改变的变量。

const int MAXN = 100;
const double PI = 3.14159;

特点:

  • 必须在定义时初始化。
  • 之后不能修改。
const int MAXN = 100;
// MAXN = 200;  // 错误,常量不能重新赋值

常量和变量的区别:

项目 变量 常量
值能否改变 能 不能
关键字 无 const
示例 int a = 10; const int MAXN = 100;

八、变量的输入与输出

1. 输入到变量

int a;
cin >> a;

2. 输出变量

cout << a << endl;

3. 输入多个变量

int a, b;
cin >> a >> b;
cout << a + b << endl;

4. 字符变量输入

char c;
cin >> c;

注意:cin >> c 会跳过空格和换行。


九、变量交换

交换两个变量的值,需要借助临时变量:

int a = 3, b = 5;
int t = a;
a = b;
b = t;
cout << a << " " << b << endl;  // 5 3

口诀:

临时变量存一个,另一个搬过去,临时变量再搬回。

十、类型转换与溢出

1. 隐式转换

int a = 3.9;      // a 得到 3,小数部分被截断
double b = a;     // b 得到 3.0

2. 显式转换

int a = 5, b = 2;
double c = (double)a / b;  // 2.5

如果不转换:

cout << 5 / 2;  // 输出 2

3. 整数溢出

int a = 100000;
int b = 100000;
int c = a * b;              // 可能溢出
long long d = 1LL * a * b;  // 正确

大数运算时,注意用 long long,乘法可先写 1LL *。


十一、常见错误

  1. 变量未声明就使用。

    a = 10;  // 错误,a 未定义
    
  2. 变量未初始化就输出。

    int a;
    cout << a;  // 结果不确定
    
  3. 命名不合规。

    int 1a;   // 错误
    int a-b;  // 错误
    
  4. 使用关键字做变量名。

    int for;  // 错误
    
  5. 同一作用域重复定义。

    int a;
    int a;  // 错误
    
  6. 赋值和比较混淆。

    if (a = 1)   // 这是赋值,不是比较
    if (a == 1)  // 正确
    
  7. 类型不匹配。

    int a = "hello";  // 错误
    
  8. 整数除法丢小数。

    cout << 5 / 2;      // 2
    cout << 5.0 / 2;    // 2.5
    
  9. 变量作用域外使用。

    {
        int b = 10;
    }
    cout << b;  // 错误
    
  10. 忘记初始化累加变量。

    int sum;       // 错误,sum 值不确定
    int sum = 0;   // 正确
    

十二、阅读程序写结果

题目 1

int a = 5;
a = a + 3;
cout << a << endl;

输出:

8

题目 2

int a = 3, b = 4;
int t = a;
a = b;
b = t;
cout << a << " " << b << endl;

输出:

4 3

题目 3

int a = 10;
int b = a;
a = 20;
cout << a << " " << b << endl;

输出:

20 10

题目 4

double x = 5 / 2;
cout << x << endl;

输出:

2

因为 5 / 2 是整数除法,结果是 2,再赋给 double 变成 2.0,输出 2。

题目 5

const int MAXN = 10;
int a = MAXN + 5;
cout << a << endl;

输出:

15

十三、速查表

需求 写法
声明整数变量 int a;
声明并初始化 int a = 10;
一次声明多个 int a, b, c;
赋值 a = 20;
输入变量 cin >> a;
输出变量 cout << a;
交换两个变量 int t = a; a = b; b = t;
定义常量 const int MAXN = 100;
长整数 long long x;
小数 double x;
字符 char c;
布尔 bool flag;
强制转换 (double)a / b

十四、总结

变量是 GESP 一级最基础、最重要的内容。

  1. 变量是内存中有名字、有类型的存储空间。
  2. 变量必须先声明,再使用。
  3. 变量可以初始化,也可以多次赋值。
  4. 变量命名要合规,区分大小写,不能是关键字。
  5. 使用变量时注意类型、作用域、初始化、溢出和整数除法。

复习建议:多练“声明变量 → 输入 → 计算 → 输出”的完整程序,注意变量名、类型、初始化和作用域。考试中遇到变量题,先看类型,再看是否初始化,最后看赋值和运算顺序。