Board logo

标题: C语言循环嵌套应用 [打印本页]

作者: 苹果也疯狂    时间: 2015-3-7 12:24     标题: C语言循环嵌套应用

循环体里面也可以有循环,这就是所谓的循环嵌套。循环嵌套可以帮助我们解决很多问题,经常被用于按行列方式输出数据。例如:

        /* 按行列方式输出九九乘法表 */

        #Include <Stdio.H>

        #Define   ROWS   9                  // 九九乘法表一共只有九行

        Int Main(Void)

        {

            Int I, J;

            For ( I = 1; I <= ROWS; ++I )   // 外循环控制输出多少行

            {

                For ( J = 1; J <= I; ++J )  // 内循环控制输出多少列

                {

                    Printf("%D ", I * J);   // 输出乘积

                }

                Printf("
");               // 换行

            }

            Return 0;

        }

在对这个例子进行详细讲解之前,我们先来了解一下循环嵌套的其它特性。

    并非一定要同种结构的循环才能进行嵌套。For 循环里面可以嵌套 While/Do While 循环,While 循环里也可也嵌套 For/Do While 循环。循环体里可以嵌套多个内循环,内循环里还可以嵌套内循环。例如:

        While ( Condition1 )

        {

            Do

            {

                For ( Expr1; Expr2; Expr3 )

                {

                    For ( Expr4; Expr5; Expr6 )

                    {

                        /* ... ... */

                    }

                    /* ... ... */

                }

                /* ... ... */

            } While ( Condition2 ) ;

            For ( Expr7; Expr8; Expr9 )

            {

                While ( Condition3 )

                {

                    /* ... ... */

                }

                /* ... ... */

            }

            While ( Condition4 )

            {

                /* ... ... */

            }

            /* ... ... */

        }

下面我们来讨论一下前面那个九九乘法表的例子。

    本例中的外循环共循环 9 次(即一共输出九行),当 I 等于 10 时循环终止。外循环的每轮循环都会执行内循环,在外循环的每轮循环中,内循环的循环次数都不相同。因为外循环的每轮循环都会使 I 增 1,而且 J 的值也会被重新赋值为 1,而内循环的结束条件是 J <= I,且内循环的每轮循环中 J 只增加 1,所以外循环每循环一次,内循环的循环次数就增加一次:在外循环的第一轮循环,内循环的循环次数为 1;在外循环的第二轮循环,内循环的循环次数为 2;在外循环的第三轮循环,内循环的循环次数为 3……下面我们模拟一下本例的运行过程。

    1. 外循环第一轮循环

        I 的值为 1(以下简写为 I = 1),故而 I <= ROWS 成立,进入循环体:

            1). 内循环的第一轮循环

                J = 1,故而 J <= I 成立,进入循环体:

                    输出 I * J(即 1 * 1)的乘积和一个空格,即 1 。

                ++J --> J = 2,J <= I 不成立,内循环结束。

            输出
,换行。

        ++I --> I = 2,故而 I <= ROWS 成立,开始第二轮循环。

    2. 外循环第二轮循环

            1). 内循环的第一轮循环

                J = 1,J <= I 成立,进入循环体:

                    输出 I * J ( 2 * 1 ) 和一个空格,即 2 。

                ++J --> J = 2,J <= I 仍然成立,开始第二轮循环。

            2). 内循环的第二轮循环

                    输出 I * J ( 2 * 2 ) 和一个空格,即 4 。

                ++J --> J = 3,J <= I 不成立,内循环结束。

            输出
,换行。

        ++I --> I = 3,I <= ROWS 成立,开始第三轮循环。

至此,输出结果为:

        1

        2 4

外循环第三轮循环至第九轮循环从略,请读者自行模拟一次。

    3. 外循环第三轮循环

        /* ... ... */

    4. /* ... ... */

    /* ... ... */

    9. 外循环第九轮循环

        /* ... ... */

        ++I --> I = 10,I <= ROWS 不成立,外循环结束。

最终的输出结果为:

    1

    2 4

    3 6 9

    4 8 12 16

    5 10 15 20 25

    6 12 18 24 30 36

    7 14 21 28 35 42 49

    8 16 24 32 40 48 56 64

    9 18 27 36 45 54 63 72 81




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0