嵌套循环指的是一个循环内部包含另一个循环。外层循环每执行一次,内层循环会执行完其所有的迭代。嵌套循环经常被用来处理多维数据结构,如多维数组,或者在进行复杂的算法操作时,如排序和搜索算法。
嵌套循环可以是任意类型的循环(for
、while
、do-while
),并且它们可以相互嵌套。
for
循环的嵌套for
循环的嵌套是最常见的形式。它的基本结构如下:
这里,每次外层for
循环执行时,内层for
循环都会完整地执行其循环体。
for (初始化表达式1; 测试表达式1; 更新表达式1) {
// 外层循环的代码
for (初始化表达式2; 测试表达式2; 更新表达式2) {
// 内层循环的代码
}
}
外层for
循环遍历二维数组的行,而内层for
循环遍历列。每遍历一行,就打印该行所有的列,然后换行。
#define ROWS 3
#define COLS 3
int main() {
int matrix[ROWS][COLS] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
return 0;
}
while
和do-while
循环的嵌套while
和do-while
循环也可以嵌套。它们的嵌套方式和for
循环类似:
while (测试表达式1) {
// 外层循环的代码
while (测试表达式2) {
// 内层循环的代码
}
}
找出100~200之间的素数,并打印在屏幕上
解题思路:
素数是只能被1和它本身整除的大于1的自然数。所以我们需要检查100到200之间的每个数是否是素数。
为了检查一个数n
是否是素数,我们需要从2遍历到n-1
,检查n
是否能被这些数整除。如果n
能被任何一个数整除,那么它不是素数。
我们需要从100循环到200,并对每一个数执行步骤2。
每当我们找到一个素数,我们就打印它。
以下是完成上述任务的C语言代码示例:
#include <stdio.h>
#include <stdbool.h>
int main() {
int i, j;
bool isPrime;
// 循环从100到200的所有数
for (i = 100; i <= 200; i++) {
isPrime = true; // 假设当前数是素数
// 检查i是否是素数
for (j = 2; j * j <= i; j++) { // 优化:只需检查到sqrt(i)
if (i % j == 0) { // 如果i能被j整除
isPrime = false; // i不是素数
break; // 不需要检查更大的数,退出内层循环
}
}
// 如果i是素数,则打印它
if (isPrime && i > 1) { // 确保i大于1
printf("%d\n", i);
}
}
return 0;
}
break
和continue
语句控制循环的流程。在嵌套循环中使用时,它们只影响所在层的循环。