一:方块乘法表
当我们需要打印
可以通过for循环嵌套来实现,这里i是行变量,j是列变量。
for (i = 1; i < 3; i++)
{
for (j = 1; j < 3; j++)
printf("* ");
printf("\n");
}
这样的话,我们就可以按照这个思路,打出方块乘法表
for (i = 1; i < 10; i++)
{
for (j = 1; j < 10; j++)
printf("%d*%d=%-4d",j,i,i*j);
printf("\n");
}
可以发现左下三角和右上三角是完整的乘法表,我们只需在这个基础上添加空格和条件即能实现;
左下三角是行数>=列数,右上三角是列数>=行数
二:左下三角乘法表
所以我们只需要加上if判断,只要行数>=列数的就可以打印;
int i = 1, j;
for (i=1;i<10;i++)
{
for (j = 1; j <10; j++)
{ if(j<=i) //行>=列 //*(1,1) * * (行,列)可以看出:行>=列
printf("%d*%d=%-4d",j,i,i*j); //* *(2,2) *
} //* * *(3,3)
printf("\n");
}
三:右下三角乘法表
只需要在左下三角的基础下,加空格就能实现。
第一行加8组空格,第二行加7组,......,第九行加0组;
一组所需空格数就是printf("%d*%d=%-4d", j, i, i * j); 所打印的字符数;
for (i = 1; i < 10; i++)
{
for (j=8;j>=i;j--) //打印空格
{
printf(" ");
}
for (j = 1; j < 10; j++)
{
if (j <= i)
printf("%d*%d=%-4d", j, i, i * j);
}
printf("\n");
}
四:右上三角乘法表
右上三角只要列数>=行数就行,但是输出时默认是左对齐的,所以打印出来的是左上三角,要想得到右上三角,只需加上空格即可;
第一行加0组空格,第二行加1组空格.....第九行加8组空格;
for (i = 1; i < 10; i++)
{
for (j=1;j<i;j++)
{
printf(" ");
}
for (j = 1; j < 10; j++)
{
if (i<=j) //*(1,1) *(1,2) *(1,3) (行,列)可以看出:列>=行
printf("%d*%d=%-4d", j, i, i * j); //*(2,1) *(2,2) *(2,3) 但输出时左对齐,所以是左上三角,因此需要添加空格
} //* (3,1) *(3,2) *(3,3) 第一行添加0个,第二行1个,。。。,第九行8个
printf("\n");
}
五:左上三角乘法表
右上三角还没加空格,就是左上三角;
for (i = 1; i < 10; i++)
{
for (j = 1; j < 10; j++)
{
if (i <= j)
printf("%d*%d=%-4d", j, i, i * j);
}
printf("\n");
}
六:完整代码
#include<stdio.h>
//99乘法表,左下是行大于等于列,右上是列大于等于行,然后根据实际情况加空格即可
int main()
{ //左下三角
int i = 1, j;
for (i=1;i<10;i++)
{
for (j = 1; j <10; j++)
{ if(j<=i) //行>=列 //*(1,1) * * (行,列)可以看出:行>=列
printf("%d*%d=%-4d",j,i,i*j); //* *(2,2) *
} //* * *(3,3)
printf("\n");
}
printf("\n");
//右下三角,把左下三角1到8行输出空格,第一行8组,第二行7组,。。。第八行1组
for (i = 1; i < 10; i++)
{
for (j=8;j>=i;j--) //打印空格
{
printf(" ");
}
for (j = 1; j < 10; j++)
{
if (j <= i)
printf("%d*%d=%-4d", j, i, i * j);
}
printf("\n");
}
printf("\n");
printf("\n");
//右上三角
for (i = 1; i < 10; i++)
{
for (j=1;j<i;j++)
{
printf(" ");
}
for (j = 1; j < 10; j++)
{
if (i<=j) //*(1,1) *(1,2) *(1,3) (行,列)可以看出:列>=行
printf("%d*%d=%-4d", j, i, i * j); //*(2,1) *(2,2) *(2,3) 但输出时左对齐,所以是左上三角,因此需要添加空格
} //* (3,1) *(3,2) *(3,3) 第一行添加0个,第二行1个,。。。,第九行8个
printf("\n");
}
printf("\n");
printf("\n");
//左上三角就是右上三角还没加空格
for (i = 1; i < 10; i++)
{
for (j = 1; j < 10; j++)
{
if (i <= j)
printf("%d*%d=%-4d", j, i, i * j);
}
printf("\n");
}
}