回首页 回首页 ◎ 设为首页  
◎ 收藏本站  
◎ 给我留言  
  
  首 页  C/C++教程  C++之父的FAQ  C/C++动向  C/C++源代码  C/C++误区  Unix/Linux  下载中心  乱七八糟  蚂蚁的Blog  
  当前位置:首 页 >> C/C++教程 >> C 语言基础教程 >> 43. 循环嵌套
最 近 更 新
54. goto 语句
53. switch 语句推荐
52. continue 和 break
51. 条件运算符(?:)
50. if 语句嵌套推荐
49. 逻辑运算符推荐
48. 在循环中使用 if 语句推荐
47. if 和 else 连用推荐
46. if 语句
45. 循环应用实例 2
最 新 推 荐
53. switch 语句推荐
50. if 语句嵌套推荐
49. 逻辑运算符推荐
48. 在循环中使用 if 语句推荐
47. if 和 else 连用推荐
44. 循环应用实例 1推荐
43. 循环嵌套推荐
40. for 循环推荐
37. 关系运算符推荐
36. while 循环推荐
热 门 排 行
2. 第一个 C 程序推荐
31. 预处理指令 #define..推荐
1. C 语言简介
11. 基本数据类型:整型..推荐
24. 运算符的优先级和结..推荐
5. 如何编写函数
30. 字符串字面量推荐
13. 标识符命名规则
36. while 循环推荐
7. 第三个 C 程序推荐
站 内 搜 索

Web stdcpp.cn
关键词

搜索方式

搜索范围

精确匹配
广 告

43. 循环嵌套


来源:蚂蚁的 C/C++ 标准编程 作者:antigloss 等级:精品
发布于2006-10-15 13:16 被读3120次 【字体:

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

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

        #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("\n");               // 换行
            }

            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 不成立,内循环结束。

            输出 \n,换行。

        ++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 不成立,内循环结束。

            输出 \n,换行。

        ++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

参考资料:C Primer 5th Edition
          The C Programming Language 2nd Edition
          C99 标准

本文版权归 蚂蚁的 C/C++ 标准编程 以及 作者 antigloss 共同所有,转载请注明原作者和出处。谢谢。



相关专题:C 循环语句
45. 循环应用实例 2
44. 循环应用实例 1

上一篇:42. 复合赋值运算符
下一篇:44. 循环应用实例 1

共有评论 6 条 网友评分 1分 查看全部评论

游客:游客
评分:1
    你为什么不输出为如:1*1=1这样的数呢。printf("i*j=%d",i*j);
游客:antigloss
评分:0
应该是 printf("%d * %d = %d",i, j, i*j);
这样写的话,输出就不太好看了。
游客:Ruibi
评分:1
这样会好看点:
printf("%d*%d=%2d",i,j,i*j);
游客:初学C
评分:0
printf("%d*%d=%d",j,i,i*j);
游客:zhangyatian757
评分:5
很有用啊,谢谢啊
游客:正在学C
评分:1
游客:初学C
评分:0 printf("%d*%d=%d",j,i,i*j);
用这个会比较好看。。。

查看全部评论

【发表评论】 评分:1分 2分 3分 4分 5分


验证码:

Powered By Www.Xydw.COM Ver1.14 管理
Copyright © 2005-2006 蚂蚁的 C/C++ 标准编程 All Right Reserved. XCMS
粤ICP备06014124号   站长:Antigloss