2021秋-实验4-循环结构II 7-4 打印九九口诀表 (15 分)

下面是一个完整的下三角九九口诀表:

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  
 

本题要求对任意给定的一位正整数N,输出从1*1N*N的部分口诀表。

输入格式:

输入在一行中给出一个正整数N(1N≤9)。

输出格式:

输出下三角N*N部分口诀表,其中等号右边数字占4位、左对齐。

输入样例:

4
 
结尾无空行

输出样例:

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  
 
结尾无空行
 
我修改前的代码:
int main()
{
    int i,j,n;
    scanf("%d",&n);
    for(i=1;i<=n;i++){
        for(j=1;j<=i;j++)
            printf("%d*%d=%d   ",j,i,i*j);
        if(i!=n)    printf("\n");

    }
    return 0;
}

结果:1与3测试点格式错误。

于是我将输出数据粘贴到记事本中与样例对比:

 

 上:我的输出  下:样例

我发现3*4=12与4*4=16之间样例只有两个空格,而我的代码是机械性地打了三个空格。

回看题目要求:“其中等号右边数字占4位、左对齐”。我忽略了这个数字为1或2位数的可能性。

新代码(已AC):

int main()
{
    int i,j,n;
    scanf("%d",&n);
    for(i=1;i<=n;i++){
        for(j=1;j<=i;j++)
            printf("%d*%d=%-4d",j,i,i*j);
        if(i!=n)    printf("\n");

    }
    return 0;
}

“%-4d”中‘-’代表左对齐,‘4’代表占四位,不足的用空格补齐。

若不加‘-’则默认右对齐,不合题意。如图↓