
上图是我们 小学二年级就学过的九九乘法口诀表,现在我们用C语言实现输出它。
分析问题
- 我们可以发现这个口诀表是由两个规律递增的数实现的,由此我们想到用循环解决这个问题。
- 我们定义两个变量i和j,i代表行数,j代表列数。很明显口诀表每行输出有条件j<=i。
- 我们从简单行观察数字变化规律,1*2=2,2*2=4。很明显前面的数代表列数j,后面的数代表行数i。像这种同时有行又有列性质的问题,一般来说都是用一层嵌套循环实现。
最终解法:两层循环进行控制,外层循环控制打印多少行,内层循环控制每行打印多少个表达式以及表达式内容。
如果你已经有清晰思路了,可以自己先码一下,然后再看解决问题部分的代码和进阶挑战。
解决问题
直接上代码:
#include <stdio.h>
int main()
{
//控制行数
for (int i = 1; i <= 9; i++)
{
//打印每一行内容,每行有i个表达式
for (int j = 1; j <= i; j++)
{
printf("%d*%d=%d ", j,i, i * j);//不要忘记添加一个空格美化输出
}
printf("\n");//实现口诀表换行操作
}
return 0;
}
进阶挑战
我们可以发现上面代码输出的口诀表有些小瑕疵:表格并没有完全对齐。我们可以通过格式化打印来解决对齐问题。
//只需要把上面代码中的打印修改即可
printf("%d*%d=%-2d ", j, i, i * j);
%d是直接打印一个整数,%2d这个格式化代表此整数至少占两格,%-2d代表此整数占两格左对齐,而 %2d显然就是右对齐。
如果我们想实现的是n*n乘法表呢?
相信通过上面的学习你已经可以解决这个进阶挑战了。
我们只需要把行数i的循环条件改为i<=n就行了,但是表格对齐上还需要调试更改。
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= i; j++)
{
printf("%2d*%-2d=%-3d ", j, i, i * j);//%2d和%-2d尽力美化输出
}
printf("\n");
}
return 0;
}
恭喜你又解决了一个问题!
码字不容易,欢迎关注、点赞、收藏、评论、转发。