保姆级教程之打印九九乘法表

打印九九乘法表可谓是非常之经典的一个编程题了,在各种编程书籍的循环章节必定会出现的一道编程题,可见其对初学者学习并理解循环的重要性。但是有许多初学者在第一次接触此题时感觉十分棘手,甚至在看完一些网上的解析后任然只是似懂非懂,其有部分原因是因为许多解析的作者并未充分考虑到初学者的实际情况。

基于此情况,这里不会直接将答案代码直接甩给你,而是一步一步地思考解题的思维过程:先死后活、先具体后抽象。

问题描述

使用C语言写一个程序,打印9*9乘法口诀表

示例

image.png

观察上面的示例不难发现九九乘法表的第一列是最简单的,其中被乘数都是1,变化的只有乘数从1递增到9,那么我们不妨先打印一列试试看

先死后活

所谓先死后活在此的意思就是打印第一列时我们只需定义一个变量(也就是乘数)来完成,被乘数先不考虑其在九九乘法表中的变化,直接写1就完了。定义完变量之后就可以利用一个简单的循环来实现乘数从1-9的变化了。

打印第一列的代码如下

#include <stdio.h>
int main()
{
	int j = 1;//乘数

	for (j = 1; j <= 9; ++j)
	{
        //1为被乘数,j为乘数,1*j为结果
		printf("%d*%d=%d\n", 1, j, 1 * j);
	}

	return 0;
}

运行结果如下

image.png

前面打印了第一列后,下一步干什么呢?我们可以继续观察分析九九乘法表,其中不难发现,九九乘法表的最后一行也是只有一个变量(也就是被乘数),乘数都是9,那我们只需以类似的方法就可打印出九九乘法表的最后一行了。

打印最后一行的代码如下

#include <stdio.h>
int main()
{
	int i = 1;//被乘数

	for (i = 1; i <= 9; ++i)
	{
        //i为被乘数,9为乘数,i*9为结果
		printf("%d*%d=%d ", i, 9, i * 9);
	}

	return 0;
}

运行结果如下

image.png

先具体后抽象

现在我们成功打印出了九九乘法表的第一列与最后一行,那接下来该如何打印出完整的九九乘法表呢?再次观察示例中的输出,结合前面的讲解后再观察其实不难发现:
**1.**九九乘法表以列为单位看的话被乘数总是不变的,只有乘数在改变
image.png
**2.**九九乘法表以行为单位看的话乘数总是不变的,只有被乘数在改变
image.png
3.九九乘法表以行为单位看的话被乘数<=乘数

现在可以总结归纳上面的思路了

思路分析

1.定义两个整型变量,i(被乘数)、j(乘数)
2.先循环j(乘数),再嵌套一个循环来循环i(被乘数)
3.让外循环中的j(乘数)<=9,让内循环中的i(被乘数)<=j(乘数)
4.在内循环中打印单个的乘法式子
5.直到不满足i(被乘数)<=j(乘数),说明打印完成一行,此时应该换行
6.继续打印下一行,直到j(乘数)<=9结束程序,整个九九乘法表打印完毕

代码实现

#include <stdio.h>
int main()
{
	int i = 1;//被乘数
	int j = 1;//乘数

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

	return 0;
}

运行结果

image.png

到这里基本完成了,但还是有可以优化的地方,如果你仔细观察上图的运行结果图,你会发现第4行3列与第5行3列的乘法式子并没有对齐,不是特别美观,这是因为24=8中的8只需占1位,而25=10中的10需要占2位。该怎么解决呢?很简单,我们只需要在printf()中的占位符的%后面加上-2就行了,如图:image.png
这里的**-2**表示占位符的最小宽度占2位,然后输出内容左对齐。
现在输出结果与示例中的就完全一样了,如下:
image.png

总结

在这个打印九九乘法表的编程题中我们先观察示例输出,从中发现总结规律,然后尝试完成部分内容的打印,继续观察思考,最后我们是利用了循环嵌套来解决问题,在此过程中我们是一步一步慢慢完成的,不要想着一口吃成胖子,一步到位就解决问题不是很现实。
此外,在学习编程时不仅要学会相关语法,还要学习编程的方法与思维。例如:将母问题拆分为若干个子问题,先死后活,先具体后抽象等。

希望对你有所帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值