Appearance
C++ 循环
循环用于重复执行一段代码,直到满足特定条件。C++ 提供了三种循环语句:for循环、while循环和do-while循环。
1. for 循环
for循环是最常用的循环结构,适用于已知循环次数的情况。
1.1 基本语法
cpp
for (初始化; 条件; 更新) {
// 循环体
}1.2 示例
cpp
#include <iostream>
int main() {
// 打印 1 到 10
for (int i = 1; i <= 10; i++) {
std::cout << i << " ";
}
std::cout << std::endl;
// 计算 1 到 100 的和
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
std::cout << "1 到 100 的和: " << sum << std::endl;
return 0;
}1.3 范围 for 循环(C++11)
范围 for 循环用于遍历容器或数组:
cpp
#include <iostream>
#include <vector>
int main() {
// 遍历数组
int arr[] = {1, 2, 3, 4, 5};
for (int x : arr) {
std::cout << x << " ";
}
std::cout << std::endl;
// 遍历 vector
std::vector<int> vec = {10, 20, 30, 40, 50};
for (int x : vec) {
std::cout << x << " ";
}
std::cout << std::endl;
// 使用引用修改元素
for (int& x : vec) {
x *= 2;
}
for (int x : vec) {
std::cout << x << " ";
}
std::cout << std::endl;
return 0;
}2. while 循环
while循环在条件为真时重复执行循环体,适用于不知道循环次数的情况。
2.1 基本语法
cpp
while (条件) {
// 循环体
}2.2 示例
cpp
#include <iostream>
int main() {
// 打印 1 到 10
int i = 1;
while (i <= 10) {
std::cout << i << " ";
i++;
}
std::cout << std::endl;
// 计算 1 到 100 的和
int sum = 0;
i = 1;
while (i <= 100) {
sum += i;
i++;
}
std::cout << "1 到 100 的和: " << sum << std::endl;
return 0;
}3. do-while 循环
do-while循环先执行一次循环体,然后检查条件。即使条件为假,循环体也会至少执行一次。
3.1 基本语法
cpp
do {
// 循环体
} while (条件);3.2 示例
cpp
#include <iostream>
int main() {
// 打印 1 到 10
int i = 1;
do {
std::cout << i << " ";
i++;
} while (i <= 10);
std::cout << std::endl;
// 至少执行一次
int count = 0;
do {
std::cout << "这个循环至少执行一次" << std::endl;
count++;
} while (count > 10);
return 0;
}4. 循环控制语句
4.1 break 语句
break语句用于立即退出循环:
cpp
#include <iostream>
int main() {
// 找到第一个大于 100 的数
for (int i = 1; i <= 1000; i++) {
if (i > 100) {
std::cout << "第一个大于 100 的数: " << i << std::endl;
break;
}
}
return 0;
}4.2 continue 语句
continue语句用于跳过当前迭代,继续下一次迭代:
cpp
#include <iostream>
int main() {
// 打印 1 到 10 中的偶数
for (int i = 1; i <= 10; i++) {
if (i % 2 != 0) {
continue; // 跳过奇数
}
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}4.3 goto 语句
goto语句用于无条件跳转到指定的标签,但通常不推荐使用:
cpp
#include <iostream>
int main() {
int i = 0;
start:
std::cout << i << " ";
i++;
if (i <= 10) {
goto start;
}
std::cout << std::endl;
return 0;
}5. 嵌套循环
循环可以嵌套使用,即在一个循环内部再使用另一个循环。
5.1 示例
cpp
#include <iostream>
int main() {
// 打印乘法表
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
std::cout << j << " × " << i << " = " << i * j << "\t";
}
std::cout << std::endl;
}
return 0;
}6. 无限循环
无限循环是指永远不会结束的循环,通常用于需要持续运行程序的情况。
6.1 示例
cpp
#include <iostream>
int main() {
// 无限循环(需要手动终止)
while (true) {
std::cout << "这是一个无限循环" << std::endl;
break; // 添加 break 来终止循环
}
// 另一种无限循环
for (;;) {
std::cout << "这也是一个无限循环" << std::endl;
break; // 添加 break 来终止循环
}
return 0;
}7. 循环的应用示例
7.1 计算阶乘
cpp
#include <iostream>
int main() {
int n = 5;
int factorial = 1;
for (int i = 1; i <= n; i++) {
factorial *= i;
}
std::cout << n << "! = " << factorial << std::endl;
return 0;
}7.2 斐波那契数列
cpp
#include <iostream>
int main() {
int n = 10;
int first = 0, second = 1;
std::cout << "斐波那契数列前 " << n << " 项: ";
for (int i = 0; i < n; i++) {
std::cout << first << " ";
int next = first + second;
first = second;
second = next;
}
std::cout << std::endl;
return 0;
}7.3 判断素数
cpp
#include <iostream>
#include <cmath>
bool is_prime(int n) {
if (n <= 1) {
return false;
}
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
int main() {
int n = 17;
if (is_prime(n)) {
std::cout << n << " 是素数" << std::endl;
} else {
std::cout << n << " 不是素数" << std::endl;
}
return 0;
}8. 示例:综合运用
现在,让我们看一个综合运用各种循环的例子:
cpp
#include <iostream>
#include <vector>
#include <cmath>
// 判断素数
bool is_prime(int n) {
if (n <= 1) {
return false;
}
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
int main() {
// for 循环:打印 1 到 10
std::cout << "for 循环:打印 1 到 10" << std::endl;
for (int i = 1; i <= 10; i++) {
std::cout << i << " ";
}
std::cout << "\n\n";
// while 循环:计算 1 到 100 的和
std::cout << "while 循环:计算 1 到 100 的和" << std::endl;
int sum = 0;
int i = 1;
while (i <= 100) {
sum += i;
i++;
}
std::cout << "和: " << sum << "\n\n";
// do-while 循环:至少执行一次
std::cout << "do-while 循环:至少执行一次" << std::endl;
int count = 0;
do {
std::cout << "这个循环至少执行一次" << std::endl;
count++;
} while (count > 10);
std::cout << std::endl;
// 范围 for 循环:遍历 vector
std::cout << "范围 for 循环:遍历 vector" << std::endl;
std::vector<int> vec = {1, 2, 3, 4, 5};
for (int x : vec) {
std::cout << x << " ";
}
std::cout << "\n\n";
// break 语句:找到第一个大于 100 的数
std::cout << "break 语句:找到第一个大于 100 的数" << std::endl;
for (int i = 1; i <= 1000; i++) {
if (i > 100) {
std::cout << "第一个大于 100 的数: " << i << "\n\n";
break;
}
}
// continue 语句:打印偶数
std::cout << "continue 语句:打印 1 到 10 中的偶数" << std::endl;
for (int i = 1; i <= 10; i++) {
if (i % 2 != 0) {
continue;
}
std::cout << i << " ";
}
std::cout << "\n\n";
// 嵌套循环:打印乘法表
std::cout << "嵌套循环:打印乘法表" << std::endl;
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
std::cout << j << " × " << i << " = " << i * j << "\t";
}
std::cout << std::endl;
}
std::cout << std::endl;
// 计算阶乘
std::cout << "计算阶乘" << std::endl;
int n = 5;
int factorial = 1;
for (int i = 1; i <= n; i++) {
factorial *= i;
}
std::cout << n << "! = " << factorial << "\n\n";
// 斐波那契数列
std::cout << "斐波那契数列" << std::endl;
int fib_n = 10;
int first = 0, second = 1;
std::cout << "前 " << fib_n << " 项: ";
for (int i = 0; i < fib_n; i++) {
std::cout << first << " ";
int next = first + second;
first = second;
second = next;
}
std::cout << "\n\n";
// 判断素数
std::cout << "判断素数" << std::endl;
int prime_n = 17;
if (is_prime(prime_n)) {
std::cout << prime_n << " 是素数" << std::endl;
} else {
std::cout << prime_n << " 不是素数" << std::endl;
}
return 0;
}小结
C++ 循环包括:
for 循环:
- 基本语法:
for (初始化; 条件; 更新) { 循环体 } - 范围 for 循环(C++11):
for (元素 : 容器) { 循环体 }
- 基本语法:
while 循环:
- 基本语法:
while (条件) { 循环体 }
- 基本语法:
do-while 循环:
- 基本语法:
do { 循环体 } while (条件);
- 基本语法:
循环控制语句:
break:立即退出循环continue:跳过当前迭代,继续下一次迭代goto:无条件跳转(不推荐使用)
嵌套循环:在一个循环内部再使用另一个循环
无限循环:永远不会结束的循环
关键概念:
- 循环条件:决定循环是否继续执行
- 循环变量:用于控制循环次数
- 循环体:需要重复执行的代码
掌握循环是编写 C++ 程序的基础,在后续章节中,我们将学习 C++ 的判断语句。