C++ 第一周

算法思维、流程图、变量与输入输出

这一周我们不追求“写很多代码”,而是先建立正确的编程思维:把问题拆成步骤、把步骤画成流程、再把流程翻译成 C++ 语句。只要这条路径打通,后面任何功能开发都会顺畅许多。

学完这一周,你可以独立完成一个小型控制台程序,并且说清每一行代码为什么这样写,不再只是照着样例敲。

C++ 第一周课程封面

1.1 本周学习地图与阶段目标

第一周的核心目标可以概括为一句话:把“想法”转换成“机器可执行的规则”。很多同学初学时会急着记语法,结果写出来的程序要么逻辑跳跃,要么遇到输入就崩。原因不是不聪明,而是没有先建立结构化思考。我们这周采用“先逻辑后语法”的路径:先明白做什么,再决定怎么写。

你会经历四个层次:第一层是口头步骤,也就是能够用自然语言说明“程序怎么做”;第二层是流程图,把顺序、分支、循环标出来;第三层是变量设计,明确哪些数据要存、何时更新;第四层才是 C++ 代码实现。只要这四层都完整,程序几乎不会“写到一半卡住”。

你可以从这一周开始养成一个很实用的习惯:每写 10 到 20 行代码就运行一次,看看输入输出是否符合预期。这个小循环能明显减少错误堆积。你不需要一次写完,只要每一步都能验证,进步会更稳。

本周达成:你能独立完成一个包含输入、判断、循环与输出的控制台程序;能解释变量和流程设计;能根据报错大致定位问题位置。

1.2 算法思维:先拆问题,再写代码

算法并不神秘,它就是“在有限步骤内解决问题的方法”。比如“计算三门成绩平均分并判断是否及格”这个任务,错误做法是直接打开编辑器写;正确做法是先拆步骤:读取三门分数、计算总分与平均分、判断平均分是否大于等于 60、输出结果。你会发现,一旦步骤清晰,代码自然就出来了。

这里有一个非常重要的能力:识别输入、处理、输出。输入是程序拿到的数据,处理是规则和计算,输出是给用户的反馈。任何程序都能被这三块描述。初学者如果写着写着混乱,通常是把三块混在一起,导致逻辑跳跃。建议在草稿纸先画出三列,分别写“输入什么、怎么处理、输出什么”,再开写。

我们还会训练“边界思维”。例如成绩范围应该是 0 到 100,那么输入 120 或 -5 怎么办?这就是边界。真正可用的程序必须考虑边界,否则一旦用户输入异常值,程序就会输出不可信的结果。第一周就建立这个意识,后续调试成本会降低很多。

#include <iostream>
using namespace std;

int main() {
    double a, b, c;
    cout << "请输入三门成绩: ";
    cin >> a >> b >> c;

    double avg = (a + b + c) / 3.0;
    cout << "平均分: " << avg << "\n";

    if (avg >= 60) {
        cout << "结果: 及格\n";
    } else {
        cout << "结果: 不及格\n";
    }
    return 0;
}

1.3 流程图:把逻辑可视化

流程图是新手最容易忽略、但最值得投入的工具。你可以把它理解为“代码施工图”。在施工图没画好之前就开工,后面几乎必返工。一个标准流程图至少要能回答三件事:从哪里开始、何时分支、何时结束。只要这三件事清楚,代码结构基本不会跑偏。

我们建议使用以下最小符号集:开始/结束(椭圆)、处理步骤(矩形)、条件判断(菱形)、输入输出(平行四边形)。不要追求复杂图形,关键是路径清楚。初学时最常见错误是分支后没有回到主流程,或者循环终止条件没有写,最终导致程序行为和预期不一致。

举例:做“猜数字”小游戏。流程应是:开始 -> 生成目标数字 -> 输入猜测值 -> 判断是否相等 -> 若不等则提示大了/小了并继续输入 -> 若相等则输出成功并结束。这个结构里,循环与分支都很明确。把它画出来后再写代码,你会发现基本不会迷路。

学习建议:每个练习先交流程图草稿,再写代码。先把路线画清楚,再动手编码,效率会更高。

1.4 变量与数据类型:给数据一个准确的“容器”

变量是程序中的“数据容器”,数据类型则是容器标签。`int` 适合整数计数,`double` 适合小数计算,`bool` 适合真假状态,`char` 适合单字符,`string` 适合文本。类型选择不准确会导致隐蔽错误,例如用 `int` 保存平均分可能丢失小数精度。

命名也是第一周必须建立的基本功。变量名应当表达意义,而不是追求短。比如 `totalScore` 比 `ts` 更容易维护;`isPassed` 比 `flag` 更清楚。命名清楚会让你未来读自己代码时更轻松,也更利于协作开发。记住:代码不是写给机器看的,是写给人看的。

另一个关键点是初始化。未初始化变量会带来不可预测行为。初学者常见问题是声明了变量却忘记赋值,结果输出“奇怪数字”。建议养成习惯:变量声明时尽量给默认值,或者在每次使用前确认它已经被赋值。

#include <iostream>
#include <string>
using namespace std;

int main() {
    string studentName = "Mia";
    int level = 1;
    double progress = 0.0;
    bool isOnline = true;

    cout << "姓名: " << studentName << "\n";
    cout << "等级: " << level << "\n";
    cout << "进度: " << progress << "\n";
    cout << "在线状态: " << isOnline << "\n";
    return 0;
}

1.5 输入输出与交互体验

`cin` 和 `cout` 是第一周最常用的交互工具。`cout` 负责提示与展示,`cin` 负责读取用户输入。看起来简单,但这一步直接决定“程序是否好用”。如果提示语不清楚,用户就不知道该输入什么;如果不做输入校验,程序很容易进入错误状态。

我们推荐的交互模板是:先告诉用户要输入什么,再读取输入,再回显关键结果。例如“请输入年龄(1-120)”。这行提示会极大降低误输入概率。对于异常输入,第一周至少要做到“检测到后给出提示”,即使暂时不做复杂恢复,也要让程序行为可解释。

另外,要注意换行与格式。适度的空行、前缀词(如“结果:”)会让输出更可读。很多同学程序逻辑对了,但输出挤成一团,自己调试都困难。把输出设计当成程序的一部分,而不是收尾工作。

#include <iostream>
using namespace std;

int main() {
    int age = 0;
    cout << "请输入年龄(1-120): ";
    cin >> age;

    if (age < 1 || age > 120) {
        cout << "输入无效,请输入 1 到 120 之间的整数。\n";
    } else {
        cout << "你输入的年龄是: " << age << "\n";
    }
    return 0;
}

1.6 第一周高频错误与修正策略

调试时建议使用“定位三问”:哪一行开始不符合预期?这行依赖了哪些变量?这些变量在上一轮是如何变化的?通过这三问,你能把“我觉得不对”变成“我知道哪里不对”。这就是从初学者走向工程实践者的关键一步。

1.7 课堂实战:猜数字小游戏(第一版)

本周综合练习是“猜数字”小游戏。目标不是做得华丽,而是完整经历“流程图 -> 变量设计 -> 条件循环 -> 输入输出 -> 测试修复”的全流程。你需要定义目标数字、读取玩家输入、比较大小并给出提示,直到猜中为止。

建议先实现单轮比较,再扩展为循环。最后增加“已尝试次数”统计。这三个步骤对应了从顺序结构到循环结构的自然升级。完成后请自己设计 5 组测试输入,包括边界输入和明显错误输入,观察程序表现并记录问题。

#include <iostream>
using namespace std;

int main() {
    int target = 37;
    int guess = 0;
    int attempts = 0;

    cout << "欢迎来到猜数字游戏,范围 1-100。\n";

    while (guess != target) {
        cout << "请输入你的猜测: ";
        cin >> guess;
        attempts++;

        if (guess < target) {
            cout << "小了,再试一次。\n";
        } else if (guess > target) {
            cout << "大了,再试一次。\n";
        } else {
            cout << "恭喜你猜对了!共尝试 " << attempts << " 次。\n";
        }
    }

    return 0;
}

1.8 本周练习、提交建议与自测清单

本周练习

  1. 完成“成绩判断程序”与“猜数字程序”各一份。
  2. 每个程序必须包含清晰提示语、输入读取、条件判断和结果输出。
  3. 提交前至少运行 5 组测试数据,并在文档中写出测试结果。

提交建议

自测清单

第一周不需要比“谁写得更炫”,重点是打好可复用的方法基础。只要你能把问题拆清楚、流程讲明白、代码跑通,就是很扎实的起点。后面进入函数、容器和项目结构时,你会明显感觉更顺手。

返回 C++ 第一阶段