1、5.2 多重循环程序设计案例案例 5.4 九九乘法表【项目任务】实现九九乘法表。【设计思路】实现九九乘法表的流程图如图 5-3所示。图 5-3 九九乘法表流程图【程序代码】#include main()int i,j;for(i=1;imain()int i,j;for(i=1;i=2) 当 j=1或 j=n+1时,其值为 1。当 j!=1且 j!=n+1时,其值为第 n1 行的第 j1个值与第 j个值之和。【程序代码】#include #define N 6main()int n,i,j,k,aNN;for(i=0;i 0; i-) for (j = 0; j For 循环变量 = 初值 T
2、o 终值 循环体Next 循环变量Next 循环变量师:刚才这个例子,执行结果是打印 16个连续的*,如果要将 16个*分成 4行,代码该如何修改呢?大家还记得前面讲过的实现换行的语句吗?生:用 printFor i = 1 To 4 step 1For j = 1 To 4 step 1Print “*”;Next jPrintNext iFor i = 1 To 4 step 1For j = 1 To 4 step 1Print “*”;Next jNext i师:教师在 vb环境里执行这段代码,执行结果是打印出 4行 4列的*型图形,这是通过二重循环打印出的一个矩形图形。我们进一步分析
3、可以看出,这里的i变化范围是 1到 4,即为外循环变量,用来控制打印的行数,这里的 j变化范围是 1到 4,即为内循环变量,用来控制每行打印的字符数,从这个角度来说,这里的内外循环变量(i、j)就有了实际的意义,即 i控制行数,j 控制每行字符数。师:请大家上机练习,用二重循环打印一个 4行 5列的*型图形。生:学生上机实践。For i = 1 To 4 step 1For j = 1 To 5 step 1Print “*”;Next jPrintNext i学生操作,教师巡视。教师利用大屏幕转播某个学生屏幕,请他展示代码及执行结果。然后教师点评。师:显然这里的矩阵图形是一个规则的图形(每行
4、字符数相同),如果是一个三角形(每行字符数不同如图一)好不好打印呢?(图一)三、二重循环的进一步运用(1)(图一)图形的打印(每行字符数不同)师:大家看(图一)是一个三角形,共 4行,但每行的字符数不一样多,外循环应该没问题,那内循环应怎么设置呢?进一步分析,可以看到虽然每行字符数不一样,是一个变量,但变化是有规律的。那我们考虑能不能找出它跟行数的一个对应关系呢?我们从图一中采集行数和相应字符数的一个信息列表如下:分析此表,我们可以用数学中一次函数的思想(i 为自变量,j 为函数值)来建立 j和 i的关系表达式。从而得到:j=i,所以可以得到如下代码:(图二)i(行号) j (字符数)1 12
5、 23 34 4For i = 1 To 4 For j = 1 To iPrint “*”;Next jPrintNext i师:教师在 vb环境里执行此代码,执行结果正如如图一。(2)(图二)图形的打印(每行字符数不同,每行起始*位置不同)师:看(图二),也是一个三角形,不同的是每行第一个字符的起始位置不一样,是一个变量,这样的图形应该怎么打印呢?师:这里要用到一个函数 tab(),此函数用来控制输出字符的位置。请大家体验下面一段代码的作用。生:上机输入如下代码,体会 tab函数的作用。Print “1234567890“Print Tab(2);Print “*“Print Tab(4)
6、;Print “*“师:大家通过实践,可以发现 Tab()函数的自变量就表示输出的具体位置。师:显然图二中,每行的字符数是变的,每行第一个字符的起始位置也是变的,跟刚才的分析方法一样,要建立关系式。i 起始*位置(n) j1 4 12 3 23 2 34 1 4分析此表,我们可以用数学中一次函数的思想(i 为自变量,j 为函数值,n 为函数值)来建立 j和 i的关系表达式,n 和 i的关系表达式。从而得到:j=i,n=5-i,所以可以得到如下代码:For i = 1 To 4Print Tab(5 i ); For j = 1 To iPrint “*”;(图三)Next j PrintNex
7、t i师:教师在 vb环境里执行此代码,执行结果正如如图二。四、学生自主探究师:教师布置任务打印如图三所示图形For i = 1 To 4Print Tab(9 2*i);For j = 1 To 2 * i - 1Print “*“;Next jPrintNext i生: i 起始*位置(n) j1 7 12 5 33 3 54 1 7可以归纳出:n=9-2*I j=2*i-1学生操作,教师巡视。教师利用大屏幕转播某个学生屏幕,请他展示代码及执行结果。然后教师点评。(图四)五、师生共同探究 师:教师布置任务打印如图四所示图形生:采取“分而治之”的方法进行处理,即将图形分为上三角和下三角分别进
8、行打印,然后进行合并形成图四所示的形状。参考代码略师:大部分同学采用分块处理的方法来实现打印,这样做易于理解但代码较繁琐,能不能简化一下呢?能否通过一个二重循环语句就能实现呢?这个图形一共 7行,如果 i的范围取 1到 7难以归纳 n和 j的表达式,但稍微观察一下,可以发现此图是一个对称图形,所以行 i的范围可以取-3 到 3,行作为定量可以表示成 abs(i),再依此建立关系就方便了。For i = -3 To 3Print Tab(2* Abs(i)+4);For j = 1 To 7 2*Abs(i)Print “*“;Next jPrintNext i分析与参考代码如下: Abs(i)
9、 起始*位置(n) j3 7 12 5 31 3 50 1 7可以归纳出:n=2*abs(i)+4,J=7-2*abs(i)师:教师在 vb环境里执行此代码,执行结果正如如图四。六、教师总结这节课我们通过二重循环打印了几种图形,通过学习可以发现打印的关键就是对图形中行和列及打印位置的控制。实际上这些图形还可以变化成很多种其他图形,但只要我们能总结行和列、打印位置的规律,找出它们的内在关系,写出相应的关系式,那么要实现种种图形的打印是不难的。六、教学反思这节课的引入本来是直接给学生展示一个用二重循环语句打印的完整图形,但发现学生不能一下子接受,所以采用了先打印一个*,再打印一行*,到若干行*的层层递进的方法,这样学生就很容易接受。本节课是用二重循环实现图形打印,我们选用的图形都是大家比较熟悉的图形,如矩形、三角形、菱形等,这样学生有亲切感,也容易激发学生的学习兴趣。本教学设计在讲图形打印技巧方面,注重跟数学学科的紧密结合,利用学生熟悉的函数知识来分析问题,解决问题,加强了学科之间的交流。在具体教学过程中,通过一系列“*”型图形打印,让学生在这些趣味性的题目中思考、分析、编写代码并上机实践。这里的*型图案,是从简单到复杂慢慢变化的,这样学生易于接受和理解。老师教起来好教,学生学起来带劲,真正做到了课堂的有效教学 。