Files
chouka/old/第06课-循环与多抽.md
T
2026-05-16 11:09:02 +08:00

4.1 KiB
Raw Blame History

第 6 课:循环与多抽(for

本课目标:把第 3 课的「输入次数」、第 4~5 课的「随机 + 稀有度」合在一起:玩家输入 n,程序用 for 循环 连续抽 n,每次结果可以不同。

复习cin 读整数;srand 只设一次;rand % 100 与 if 判断。


1. 这一课要搞懂什么

  • 循环:同一段代码想做很多遍,不用复制粘贴很多行。

  • for 句型(本课用这个)

    for (起点; 是否继续; 每轮结束时做什么) { 循环体 }
    
  • 本课常用写法:

    for (int i = 1; i <= n; i++) { ... }
    

    含义可以记成:「i 从 1 开始,只要 i 还小于等于 n,就执行大括号里的话,每做完一轮让 i 加 1」。

  • i 常用来当「第几抽」的序号,正好可以打在屏幕上:第1抽第2抽……


2. 随机数要放在循环里面还是外面?

  • std::srand(std::time(nullptr));:仍在 main 开头只写一次(和前面一样)。
  • int r = std::rand() % 100;:要写在 for 的循环体里面——每抽一次,重新得到一个 r。若写在循环外,r 只算一次,多抽就全一样了。

3. 完整示例(输入次数 + 连抽 + 稀有度)

保存为 lession6.cpp

#include <iostream>
#include <cstdlib>
#include <ctime>

int main() {
    std::srand(std::time(nullptr));

    int n = 0;
    std::cout << "抽几次?";
    std::cin >> n;

    for (int i = 1; i <= n; i++) {
        int r = std::rand() % 100;
        std::cout << "第" << i << "抽:";
        if (r < 70) {
            std::cout << "普通\n";
        } else if (r < 95) {
            std::cout << "稀有\n";
        } else {
            std::cout << "超稀有\n";
        }
    }

    return 0;
}

运行后输入一个整数(如 5),应看到 5 行结果,每行稀有度可不同


4. for 三格分别是什么?(对号入座)

for (int i = 1; i <= n; i++) 为例:

位置 本课含义
int i = 1 循环变量 i 从 1 开始。
i <= n 只要 i 不超过 n 就继续抽。
i++ 每抽完一轮,i 加 1++ 表示加 1)。

5. 和抽卡游戏的关系

本课组合 游戏效果
cin >> n 玩家决定十连、百连等
for 里每次新的 r + if 每一抽独立判稀有度
打印 i 清楚是第几抽

第 7 课会给卡片 起名字(数组);本课先熟练「多抽」。


6. 怎么编译和运行

clang++ -std=c++17 -o lession6 lession6.cpp
./lession6

输入正整数。若输入 0,循环体一次都不执行,属于正常;负数本课不专门处理,可和家长讨论「该做哪些判断」当拓展。


7. 本课课堂小练习

  1. 在每一抽的输出里,顺便打印本次的 点数 r(和 i 一起),多运行几次,对照第 5 课区间是否一致。
  2. fori1 开始 改成从 0 开始、条件改成 i < n(需同时改 cout 里显示第几抽,如 i + 1)。能做出来说明你在思考「下标从 0」。

8. 本课课后作业(选做)

  • 统计这一轮里 出了几次「超稀有」:在 main 里加一个 int 变量,在 else(超稀有的分支)里加 1,循环结束后 cout 打印总次数。
  • 问家长:whilefor 有什么不一样? 本课只用 for 就够;知道「另一种循环名」即可。

9. 常见小问题

  • 只随机了一次:检查 r = ...rand... 是否在 for{ } 里。
  • 想抽「固定 10 次」不写 cin:可以把 n = 10; 写死,仍然用 for 循环。
  • 输入很大的 n:会打印很多行,可以先用小数字测。

10. 下一课预告

第 7 课学 数组std::string:用编号对应「皮卡丘、小火龙」等名字,抽到稀有时打印具体卡名。


学完请家长在 学习进度与状态.md 里更新第 6 课的状态与作业完成情况。

下一课文档第07课-卡片与数组.md