## Lesson 6 Print 9*9 multiplication table 乘法表

代码

#include <stdio.h>

int main(void)
{        
    int i, j;

    for (i = 1; i < 10; i++)
    {    
        for (j = 1; j <= i; j++)
        {
            printf("%d*%d=%d\t", j, i, i * j);
        }
        printf("\n");
    }

    return 0;
}
copy

Output:

1*1=1    
1*2=2    2*2=4    
1*3=3    2*3=6    3*3=9    
1*4=4    2*4=8    3*4=12    4*4=16    
1*5=5    2*5=10    3*5=15    4*5=20    5*5=25    
1*6=6    2*6=12    3*6=18    4*6=24    5*6=30    6*6=36    
1*7=7    2*7=14    3*7=21    4*7=28    5*7=35    6*7=42    7*7=49    
1*8=8    2*8=16    3*8=24    4*8=32    5*8=40    6*8=48    7*8=56    8*8=64    
1*9=9    2*9=18    3*9=27    4*9=36    5*9=45    6*9=54    7*9=63    8*9=72    9*9=81    
copy

知识点

  • 嵌套循环语句 for-for
  • 二层逻辑嵌套

扩展

#include <stdio.h>

int main(void)
{
    int i, j;
    
    for (i = 1; i < 10; i++)
    {    
        for (j = 1; j < 10; j++)
        {
            if (j > i)
                break;

            printf("%d*%d=%d\t", j, i, i * j);
        }
        printf("\n");
    }

    return 0;
}
copy

知识点

  • break 用法
  • continue 用法

课堂讨论

  • 列举出5种场合,可以用 for-for 两重循环来解决的?
  • 示例中的 { } 是必须的吗,如果去掉内层或外层的 { } ,会有什么问题?
  • 如果用 while-while 两重循环来编写这个程序,如何实现?

课后练习

  • 打印1个5*5的棋盘(0表示空,1表示有子),用户输入1个位置(例如 2 3),重新打印棋盘。
  • 一个数各个约数(真约数)的和等于它本身的自然数叫做完全数(Perfect number)。
    (例如:6 = 1 + 2 + 3) 请找出1-1000以内的完全数。
  • 一个 n 位数 ( n≥3 ) 每个位上的数字的 n 次幂之和等于它本身的数叫做水仙花数。
    (例如:1^3 + 5^3 + 3^3 = 153) 请找出 n = 3 的水仙花数。