跳到主要内容

让电脑重复做事情——循环结构

一、引言

小故事:
小明要打印100遍“我爱编程”,如果一行一行写:

cout << "我爱编程" << endl;
cout << "我爱编程" << endl;
cout << "我爱编程" << endl;
// ... 要写100行!

问题: 这样写太麻烦了!有没有更好的办法?

答案: 有!我们可以用循环让电脑自动重复做事情!

循环就是让计算机帮我们自动重复执行某些代码!

二、认识循环结构

循环就像生活中的重复

想象一下:

  • 体育老师让你跑5圈操场
  • 妈妈说重复10遍:"我要整理好自己的房间"
  • 背诵乘法表:1×1=1, 1×2=2, 1×3=3...

循环的三要素:

  1. 循环起点:从什么时候开始
  2. 循环条件:到什么情况停止
  3. 循环体:重复做什么事情

三、for循环 - 计数循环

1. for循环的基本结构

for (起始条件; 循环条件; 更新条件) {
// 重复执行的代码 - 循环体
}

2. 第一个for循环示例

#include <bits/stdc++.h>
using namespace std;

int main() {
// 输出5次"你好,世界!"
for (int i = 1; i <= 5; i++) {
cout << "第" << i << "次:你好,世界!" << endl;
}
return 0;
}

运行结果:

第1次:你好,世界!
第2次:你好,世界!
第3次:你好,世界!
第4次:你好,世界!
第5次:你好,世界!

3. 理解循环变量 i

  • int i = 1:从1开始计数
  • i <= 5:只要i小于等于5就继续循环
  • i++:每次循环后i增加1

让我们跟踪一下循环过程:

循环次数i的值i < = 5执行情况
第1次1执行
第2次2执行
第3次3执行
第4次4执行
第5次5执行
第6次6停止

4. 更多for循环示例

示例1:输出1-10的数字

#include <bits/stdc++.h>
using namespace std;

int main() {
for (int i = 1; i <= 10; i++) {
cout << i << " ";
}
cout << endl;
return 0;
}

示例2:计算1+2+3+...+100

#include <bits/stdc++.h>
using namespace std;

int main() {
int sum = 0; // 用来存储总和

for (int i = 1; i <= 100; i++) {
sum = sum + i; // 把每个数加到sum里
}

cout << "1+2+3+...+100 = " << sum << endl;
return 0;
}

示例3:输出偶数

#include <bits/stdc++.h>
using namespace std;

int main() {
// 输出1-20之间的所有偶数
for (int i = 2; i <= 20; i = i + 2) {
cout << i << " ";
}
cout << endl;
return 0;
}

填空:倒计时火箭

#include <bits/stdc++.h>
using namespace std;

int main() {
// 请补全代码,实现10到1的倒计时
for (int i = __1__; i >= __2__; i--) {
cout << __3__ << endl;
}
cout << "发射!🚀" << endl;
return 0;
}

四、while循环 - 条件循环

1. while循环的基本结构

while (循环条件) {
// 重复执行的代码
}

2. while循环示例

示例1:数数游戏

#include <bits/stdc++.h>
using namespace std;

int main() {
int count = 1;

while (count <= 5) {
cout << "现在数到:" << count << endl;
count++; // count = count + 1
}

cout << "数完了!" << endl;
return 0;
}

示例2:密码验证

#include <bits/stdc++.h>
using namespace std;

int main() {
int password = 123456; // 正确密码
int input;

cout << "请输入密码:";
cin >> input;

while (input != password) {
cout << "密码错误,请重新输入:";
cin >> input;
}

cout << "密码正确,欢迎使用!" << endl;
return 0;
}

五、do-while循环 - 至少执行一次

基本结构:

do {
// 循环体
} while (循环条件);

示例:菜单选择

#include <bits/stdc++.h>
using namespace std;

int main() {
int choice;

do {
cout << "==== 游戏菜单 ====" << endl;
cout << "1. 开始游戏" << endl;
cout << "2. 查看帮助" << endl;
cout << "3. 退出" << endl;
cout << "请选择:";
cin >> choice;
} while (choice != 3); // 只要不是3就继续显示菜单

cout << "谢谢使用!" << endl;
return 0;
}

六、循环控制语句

1. break - 跳出循环

#include <bits/stdc++.h>
using namespace std;

int main() {
// 找第一个能被7整除的数
for (int i = 1; i <= 100; i++) {
if (i % 7 == 0) {
cout << "找到了!" << i << "能被7整除" << endl;
break; // 找到后就跳出循环
}
}
return 0;
}

2. continue - 跳过本次循环

#include <bits/stdc++.h>
using namespace std;

int main() {
// 输出1-10中不是3的倍数的数
for (int i = 1; i <= 10; i++) {
if (i % 3 == 0) {
continue; // 跳过3的倍数
}
cout << i << " ";
}
cout << endl;
return 0;
}

七、趣味编程实践

实践1:打印九九乘法表

#include <bits/stdc++.h>
using namespace std;

int main() {
for (int i = 1; i <= 9; i++) { // 控制行
for (int j = 1; j <= i; j++) { // 控制列
cout << j << "×" << i << "=" << i*j << "\t";
}
cout << endl;
}
return 0;
}

实践2:猜数字游戏

#include <bits/stdc++.h>
using namespace std;

int main() {
srand(time(0)); // 设置随机数种子
int secret = rand() % 100 + 1; // 1-100的随机数
int guess;
int attempts = 0;

cout << "我想了一个1-100之间的数,猜猜是多少?" << endl;

while (true) {
cout << "你的猜测:";
cin >> guess;
attempts++;

if (guess == secret) {
cout << "恭喜!猜对了!用了" << attempts << "次" << endl;
break;
} else if (guess < secret) {
cout << "太小了,再试试!" << endl;
} else {
cout << "太大了,再试试!" << endl;
}
}

return 0;
}

实践3:统计成绩

#include <bits/stdc++.h>
using namespace std;

int main() {
int n;
double score, sum = 0;

cout << "要统计几个同学的成绩?";
cin >> n;

for (int i = 1; i <= n; i++) {
cout << "请输入第" << i << "个同学的成绩:";
cin >> score;
sum += score; // sum = sum + score
}

cout << "总分:" << sum << endl;
cout << "平均分:" << sum / n << endl;

return 0;
}

八、常见错误提醒

错误1:死循环

// 错误示例 - 永远停不下来!
while (true) {
cout << "一直在循环..." << endl;
// 缺少改变循环条件的语句
}

// 正确写法
int i = 0;
while (i < 5) {
cout << "循环中..." << endl;
i++; // 一定要有让循环结束的条件
}

错误2:忘记花括号

// 错误 - 只有第一行代码在循环中
for (int i = 0; i < 5; i++)
cout << "第" << i << "次";
cout << "循环结束"; // 这行不在循环内!

// 正确
for (int i = 0; i < 5; i++) {
cout << "第" << i << "次";
cout << "循环结束";
}

错误3:分号位置错误

// 错误 - 循环体是空语句
for (int i = 0; i < 5; i++); {
cout << "hello"; // 这行只执行一次!
}

// 正确
for (int i = 0; i < 5; i++) {
cout << "hello";
}

九、总结与记忆口诀

循环选择指南:

  • 知道具体次数 → 用 for 循环
  • 不知道次数,但知道条件 → 用 while 循环
  • 至少执行一次 → 用 do-while 循环

十、课后练习

挑战练习:

  1. 找出100以内的所有质数
  2. 编写程序输出菱形图案
  3. 模拟ATM机,可以多次存款、取款、查询余额

作业:

  1. 【深基4.例2】找最小值
  2. 【深基4.例3】分类平均
  3. 【深基4.例4】一尺之棰
  4. 【深基4.例6】数字直角三角形
  5. [NOIP 2013 普及组] 计数问题
  6. [NOIP 2002 普及组] 级数求和
  7. [NOIP 2015 普及组] 金币
  8. 【深基4.例11】数列求和
  9. 【深基4.例13】质数口袋
  10. [USACO1.5] 回文质数 Prime Palindromes

*学习笔记

暂没有学习笔记,快来抢first blood !