C++中的嵌套循环(超详细)

C++中的嵌套循环(超详细)

就像嵌套 if 语句一样,经常需要在一个循环内嵌套另一个循环。循环的嵌套就是,一个循环体内又包含了另一个完整的循环结构;内嵌的循环中还可以嵌套循环,这就是多层循环。

在C++中,while循环、do while循环、for循环都可以互相嵌套,例如以下几种

while语句嵌套while语句

while()
{
    //……
    while()
    {
        //……
    }
}

do while语句嵌套do while语句

do
{
    //……
    do
    {
        //…… 
    } while();
} while();

for语句嵌套for语句

for(;;)
{
    //……
    for(;;)
    {
        //……
    }
}

while语句嵌套do while语句

while()
{
    //……
    do
    {
        //……
    }while();
}

for语句嵌套while语句

for(;;)
{
    //……
    while()
    {
        //……
    }

}

do while语句嵌套for语句

do
{
    //……
    for(;;)
    {
        //……
    }
}while();

案例一

假设有两个 int 数组,而您想将 array1 的每个元素与 array2 的每个元素相乘,则通过使用嵌套循环,这种编程工作将很容易完成。第一个循环遍历 array1,第二个循环遍历 array2,且位于第一个循环内部。
示例程序演示了嵌套循环的用法:

#include 
using namespace std;

int main()
{
    const int ARRAY1_LEN = 3;
    const int ARRAY2_LEN = 2;

    int myNums1[ARRAY1_LEN] = {35, -3, 0};
    int myNums2[ARRAY2_LEN] = {20, -1};

    cout << "Multiplying each int in myNums1 by each in myNums2:" << endl;

    for(int index1 = 0; index1 < ARRAY1_LEN; ++index1)
        for(int index2 = 0; index2 < ARRAY2_LEN; ++index2)
            cout << myNums1[index1] << " x " << myNums2[index2] \
            << " = " << myNums1[index1] * myNums2[index2] << endl;

    return 0;
}

输出:

Multiplying each int in myNums1 by each in myNums2:
35 x 20 = 700
35 x -1 = -35
-3 x 20 = -60
-3 x -1 = 3
0 x 20 = 0
0 x -1 = 0

分析:

第 13 和 14 行是两个嵌套的 for 循环。第一个 for 循环遍历数组 myNums1,而第二个 for 循环遍历数组 myNums2。第一个 for 循环每次迭代时, 都执行第二个 for 循环。第二个 for 循环遍历数组 myNums2,在每次迭代中, 都将数组 myNums2 中的当前元素与数组 myNums1 中索引为 index1 的元素相乘。 因此,对于 myNums1 中的每个元素,第二个循环都遍历 myNums2 的所有元素。其结果是,首先将 myNums1 的第一个元素(偏移量为 0)与数组 myNums2 的每个元素相乘;然后,将 myNums1 的第二个元素与数组 myNums2 的每个元素相乘;最后,将 myNums1 的第三个元素与数组 myNums2 的每个元素相乘。

案例二:九九乘法表

九九乘法表就是一个9X9的平面图形,只不过它不是一个完整的矩形,而是一个三角形结构。第一行只有1列,第二行有2列,依次每行增加1列,到第九行有9列。

//外层循环,循环9行,所以结束条件应该为9
for(int j=1;j<=9;j++)
{
    //内层循环,受行的影响,
    //所以与外部的循环变量j(行)有关
    for(int i=1;<=j;i++)
    {
        cout << j << "*" << i << "=" << j*i << " ";
    }
    cout << endl;
}

该文章会更新,欢迎大家批评指正。

推荐一个零声学院的C++服务器开发课程,个人觉得老师讲得不错,
分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,
fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
TCP/IP,协程,DPDK等技术内容
点击立即学习:C/C++后台高级服务器课程

你可能感兴趣的:(C++编程基础,c++)