段红义 王惠惠
摘 要:C程序循环嵌套结构设计是C程序循环结构教学一章的重点与难点内容,是后续数据结构课程算法实现中使用频率最多的语句,是进行复杂程序设计的基础。该文将针对初学者实际情况,通过教学实例的设计,由浅入深,采用类比、启发等多种教学方法,分析循环嵌套结构程序的设计思路与设计方法,帮助学生掌握C语言循环嵌套结构设计的实质,提高利用循环嵌套结构解决实际问题的能力。
关键词:C语言 循环嵌套 教学设计
中图分类号:TP31 文献标识码:A 文章编号:1674-098X(2015)03(a)-0120-02
The Inquiry Teaching Design of Nested Loop Structure on C Language
Duan Hongyi,Wang Huihui
(Science Department of Hetao College,Bayannaoer,Inner Mongolia,015000,China)
Abstract:The C program nested loop structure design is the key and difficult points in chapter C program loop structure teaching, is the follow-up data structure course algorithm in the most frequently used sentence, is the basis for complex programming. This paper will according to the actual situation of beginners, by design, the teaching examples from the shallower to the deeper, by analogy, inspiration and so on many kinds of teaching methods, design analysis and design method of loop nesting structure of the program, to help the students to grasp the essence of C language nested loop structure design, improve the ability of using the nested loop structure to solve the practical problems.
Key Words:C language;Loop nests;Teaching design
C语言是一门面向过程的结构化程序设计语言,其程序设计的基本结构单元主要由顺序结构、选择结构与循环结构三种基本结构组成。其中选择结构与循环结构在程序设计中最为重要且使用较多,对于后续课程数据结构来说,其算法实现主要以这两种结构为主,所以在学习数据结构之前,学生必须要通过C语言的学习打下良好的程序设计基础,深入理解并掌握这两种程序结构,并能够正确设计与阅读理解这两种结构的程序。在循环结构程序设计中,循环的嵌套程序设计是一个重点与难点内容,该文结合作者从教以来教授C语言的教学经验及心得体会,探讨如何教会学生理解并掌握循环嵌套结构的设计,提高利用循环嵌套解决实际问题的能力。
1 循环嵌套教学内容引入及设计
循环嵌套结构程序设计的基础是循环结构,在学习循环嵌套结构程序设计之前需要掌握C语言中实现循环结构的三种语句,while语句、do...while语句以及for语句,在此基础上学习循环的嵌套。首先需要知道循环嵌套的概念:一个循环的循环体内包含另外一个完整的循环结构,称为循环的嵌套,内嵌的循环还可以继续嵌套循环,构成多层循环。循环的嵌套结构本质上仍是一个循环语句,只不过其循环体为一个循环语句罢了。C语言中三种循环语句可以互相嵌套构成循环嵌套结构。由于for语句在C语言中最为灵活,下面以for语句为例来讨论循环的嵌套结构。
1.1 循环嵌套结构程序的引入
为了便于理解循环嵌套,首先举一个简单的循环结构的例子来引入嵌套。
例1:输出123456789。
该例子如果利用for循环设计,学生可以轻松写出如下语句。
int i;
for(i=1;i<=9;i++)
printf(“%d”,i);
如果对该例进行修改,要设计以下程序。
例2:输出5行123456789。对于该例来说,可以使用循环的嵌套来设计程序。
1.2 循环嵌套结构设计
我们可以利用循环语句的设计思路来解决这个问题,这个例子的关键在于循环体语句为输出123456789及换行符,即要循环5次123456789以及换行符。这里我们先把上述代码以及输出换行符语句看成一个整体即一个语句块。比如用语句块一来表示,则可以写出如下的程序代码。
int j;
for(j=1;j<=5;j++)
{
语句块一;
}
由于语句块一的代码为:
int i;
for(i=1;i<=9;i++)
printf(“%d”,i);
printf(“\n”);
所以将语句块一用上述代码进行替换,可以写出例2完整代码如下:
int j;
for(j=1;j<=5;j++)
{
int i;
for(i=1;i<=9;i++)
printf(“%d”,i);
printf(“\n”);
}
通过这个例子看出,外循环决定内循环(把内循环看成一个整体)的执行次数,而内循环则控制每行内循环的次数。在这个例子中,内循环变量与外循环变量之间没有关系,下面我们再来看一个稍微复杂一些的例子,内循环变量执行的次数取决于当前的外循环变量,来进一步理解循环嵌套结构程序。
例3:设计程序输出如下的图案数字。
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
这个例子要打印5行数字,故外循环次数为5,设外循环变量为i,取值为1~5,再看每一行要打印的数字的个数为1,2,3,4,5,即循环的次数为1,2,3,4,5,假设用j表示内循环变量,那么,内循环变量与外循环变量有什么关系?假设我们要打印的是第i行上的数字,可以发现其打印的数字j取值为1到i。找到了规律就可以写出的循环嵌套程序段:
int i,j;
for(i=1;i<=5;i++)
{
for(j=1;j<=i;j++)
printf(“%d ”, j);
printf(“\n”);
}
通过这个例子我们可以引导学生,写出如下图案的程序段。
例4:设计程序输出如下的图案数字。
1
1 3
1 3 5
1 3 5 7
1 3 5 7 9
提示学生这个程序可以有2种写法。
第一种写法:通过观察,发现例3与例4只是每一行上输出的数字不同,即需要修改例3的内循环语句printf(“%d ”, j);即可。显然第i行上打印的是一个等差数列,其打印的第j个数字应为2*j-1。即例4对应的语句为printf(“%d ”, 2*j-1);
第二种写法:不改变例3的printf(“%d ”,j);输出语句,则需要修改内循环for(j=1;j<=i;j++),分析可知第i行的内循环次数为i,而打印的数字最大值j为2*i-1,后一个打印的数比前一个数大2,即步长为2,则将例3的内循环语句改为for(j=1;j<=2*i-1;j+=2)即可。
通过上面例3、例4两个程序的设计,学生基本上能够掌握循环的嵌套结构了,对循环的嵌套有了更深入的理解,并能利用循环嵌套结构设计并解决简单的实际问题了。
例5:打印如下图的九九乘法表。
这个例子与例3比较相似,一共要打印九行,故外循环为9次,假设用i来表示外循环变量,其值应为1到9;第i行打印输出i个数,假设用j来表示内循环变量,即内循环变量j取值为1到i。并且能写出第i行第j个要打印输出的数为:printf(“%d×%d=%4d”,j,i,j*i);有了例3,例4的基础可以写出如下的程序:
int i,j;
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
printf(“%d×%d=%4d ”,j,i,j*i);
printf(“\n”);
}
2 结语
在循环嵌套结构设计教学中,教师要充分考虑学生的实际情况,要考虑不同专业、不同层次学生的理解能力,设计针对学生实际情况的教学用例,从浅显易懂的例子出发,逐步引导学生思考,采用类比,启发等多种教学方法,教学实践证明,这种方法能够很好的调动学生的学习积极性,学生的理解能力与程序设计能力有了明显的提高。
参考文献
[1] 谭浩强.C程序设计[M].4版.北京:清华大学出版社,2010.
[2] 刘井莲,赵卫绩.C/C++循环嵌套教学实践[J].电脑知识与技术,2012(25).
[3] 唐红杰.C语言循环结构教学探讨[J].软件工程师,2014(10):49-50.
[4] 刘运,程家兴.图形打印案例在计算机高级语言教学中的应用研究[J].山东农业工程学院学报,2014(6):48-49,58.