---
slug: chapter-lab-2
lesson: 15
chapter: 2
chapterTitle: 变量
title: 章末演练：程序是怎么想的——变量的诞生与消失
description: 变量章综合演练：用一个计算平均分的完整程序，把字面量、变量三要素、整数除法、浮点精度、初始化写法串起来。配合动态流程图与变量监视区，完整复盘变量从诞生到消失的每一步。
code: |
  #include <iostream>
  using namespace std;

  int main() {
      int chinese{88};
      int math{95};
      int english{91};
      int total{chinese + math + english};
      double average{total / 3.0};
      cout << "总分：" << total << endl;
      cout << "平均分：" << average << endl;
      bool passed{average >= 60};
      cout << "是否及格：" << passed << endl;
      return 0;
  }
faq:
  - q: 计算平均分为什么要除以 3.0 而不是 3？
    a: total 是 int，除以 int 会触发整数除法丢掉小数（第 8 课）。除以 3.0 让结果成为 double，平均分才带小数部分。
  - q: 变量在内存里什么时候消失？
    a: 离开它所在的花括号范围就消失。本课所有变量定义在 main 的花括号内，main 结束、程序终止时它们一起消失。作用域的完整规则在函数章展开。
  - q: 这一章学完后应该具备什么能力？
    a: 能定义并初始化各种类型的变量，知道 int 与 double 的差别和陷阱，会读监视区里变量值的每一步变化，能用 {} 写出规范的初始化。
---

<div class="answer">
本课用一个"总分与平均分"程序复盘整章：{} 初始化、int 求和、除以 3.0 保住小数、
bool 装判断结果。在 CppStudio 里完整播放一遍，看变量逐个诞生、变化、
在程序结束时一起消失。
</div>

## 演练程序

```cpp
int chinese{88};
int math{95};
int english{91};
int total{chinese + math + english};
double average{total / 3.0};
bool passed{average >= 60};
```

一个程序串起整章知识点：`{}` 初始化（第 13 课）；total 用 int 装整数和（第 8 课）；average 除以 `3.0` 而不是 `3`——total 是 int，除以 int 会丢掉小数（整数除法，第 8 课的坑在这里回收）；passed 用 bool 装比较结果（第 10 课）。

## 程序是怎么想的

本章的固定栏目，用运行模型复盘：

1. **诞生**：变量在定义语句执行时诞生，一个个出现在监视区——先三门成绩，再 total，再 average，最后 passed；
2. **读取与计算**：`total / 3.0` 执行时，从 total 读出 274，与 3.0 做小数除法得到 91.333…，存入 average；
3. **判断**：`average >= 60` 算出 true，passed 为真，输出区显示 1（第 10 课的显示规则）；
4. **消失**：执行 return 0，main 结束，监视区所有变量一起消失——变量的生命周期与它的花括号范围绑定。

变量不是一直都在的：它在定义时诞生，在离开花括号时消失。这条规则到函数章会看到更完整的形态——每个函数有自己的一套变量，随调用而生、随退出而灭。

## 可视化观察

在 CppStudio 中打开本课示例，从头完整播放一遍：

1. 监视区里变量逐个登场，最后定格在 6 行（含 passed）；
2. 重点暂停在 `total / 3.0`：把 3.0 改成 3 再跑一遍，平均分从 91.333… 变成 91——整数除法的代价一眼可见；
3. 播放结束瞬间，监视区清空——这就是"变量的消失"。

## 自测

- 把任何一门成绩改成带小数，程序哪里要跟着改？（提示：int 装不下小数）
- 想保留两位小数输出，可以用什么思路？（提示：先放大一百倍取整）
- 把 passed 的判断改成"三门都及格"，需要用到什么？（预告：逻辑运算符，运算符章见）

下一章：常量——用 const 和字面量后缀，把"不该变的值"锁起来。
