摘 要 循环结构是结构化程序设计中的三种基本结构之一,也是程序设计的基础。但是,对于初学者来说,循环结构与人类日常的思维习惯不同,较难掌握。本文用几个例子阐述了在《C语言程序设计》课程中循环结构的教学方法,这些方法在日常授课中取得了较好的效果。
关键词 C语言;结构化程序设计;循环结构;效率
1 引言
顺序、分支、循环是结构化程序设计的三种基本结构,所以在高级语言程序设计课程中,掌握这三种结构是学好程序设计的基础。而循环结构是这三者中最复杂的一种结构,几乎所有的程序都离不开循环结构。在C语言中,循环结构主要是由for和while、do-while语句实现的,其中for语句的应用更为普遍一些。for语句的用法对于有程序设计经验的学生来说轻而易举,但是对于那些没有经验的初学者来说,难度却不小。本文从初学者的角度,阐述了C语言中循环结构几种典型应用的实现方法。2 用循环结构输出几何图形
输出简单的几何图形(如图1),是循环结构的典型应用之一。对于这一类型的题目,初学者往往直接采用一条或若干条输出语句printf完成,这样虽然可以完成题目要求,但是很显然缺乏灵活性,不符合程序设计的思想。按照正常的程序设计思想,应该先分析图形的构成,找出其中的规律:如图1(a)中的实心三角形,每一行由若干个空格、星号和一个回车换行符构成,将行号、空格数和星号数分别设为i、m和n,则可以形成下表:表1 实心三角形的构成表
行号i | 空格数m | 星号数n |
1 | 4 | 1 |
2 | 3 | 3 |
3 | 2 | 5 |
4 | 1 | 7 |
5 | 0 | 9 |
for(i=1;i<=5;i++) { /*输出(5-i)个空格;*/ for(m=1;m<=5-i;m++) printf(“ ”); /*输出(2*i-1)个星号;*/ for(n=1;n<=2*i-1;n++) printf(“*”); /*输出回车符;*/ printf(“/n”); } 程序段1 实心三角形的主要程序 |
3 数组中循环结构的应用
在C语言中,for语句经常与数组相结合,用于实现数组元素的赋值、输入与输出。对于初学者来说,更习惯于用顺序结构的语句来实现(如图2左)。我们将图2左的几条语句作比较,可以看出在这5条语句中,不同的只有数组下标,那么就可以将这5条语句合并成一条for语句,将数组下标换成for语句的循环变量i,而i的值从0增加到4。按照for语句的基本语法规则可以很容易的写出图2右的for语句。
[8]电大学习网.免费论文网[EB/OL]. /d/file/p/2024/0424/fontbr />
同样,对于下面这个输出二维数组元素的例子,也可以用上述办法实现,不过转换过程比上例要复杂一些:经过对比图3左侧方框中顺序结构的12条语句,可以发现也是只有数组下标在变化,但是由于是二维数组,行下标和列下标同时都在变化,很显然不能直接用一条简单的for语句来实现(不是绝对不可以实现,后面将会看到)。但是我们可以把这12条语句细分一下,3条语句为一组,而在同一组中的语句只有列下标在变化,这时可以采用上例中的方法,将列下标都用循环变量j来代替,得到图3右上的形式。再次对比图3右上的4条for语句,不同的是行下标,同样用新的循环变量i来代替,合并后得到图3右下最终二重for循环的语句。
在上例中,常规的思路都采用二重for循环与二维数组相结合来实现对数组元素的访问,实际上也可以使用一重for循环来实现:无论如何变化,我们可以先确定的是,输出语句printf肯定要执行12次,如果用一重for循环,那么循环变量i的值就要从0递增到11。再分析数组行下标m和列下标n与循环变量i之间的关系,很显然:i=m*3+n,按照整数除法的思想,行下标m恰好是循环变量i整除3后的商,而列下标n恰好是循环变量i整除3后的余数,即:
m=i/3,n=i%3从而可以写出下面的for语句:for(i=0;i<12;i++)printf(“%d”,a[i/3][i%3]);4 循环结构中的效率问题
对于程序设计的初学者来说,往往以完成题目要求的功能为目的,程序的执行效率是最容易忽略的一个问题。在循环结构中,具体表现为循环体的执行次数。例如,一个经典的素数判定问题。在数学中素数如下定义:素数即指那些大于1,且除了1和它本身外,不能被其它任何数整除的数。根据这一定义,初学者很容易编写出如下程序段2的程序:int isprime(int n) { int i; for(i=2;i<n;i++) if(n%i==0) return 0; return 1; } 程序段2 判断素数的程序段 |
5 结束语
以上这些,都是本人在授课过程中的一些体会,可能比较肤浅,但是从初学者的角度来看,却是必要的。如何让一名初学者尽快摆脱日常的思维定式,更加透彻地理解和掌握程序设计中的基本思想,领会程序设计的精髓,是高级语言程序设计这门课程在讲授过程中,应该时刻注意的问题。希望本文能在这方面起到一点作用,同时望广大同仁多多指教。参考文献
[1] 谭浩强. C 语言程序设计(第二版)[M]. 北京:清华大学出版社,1999[2] 苏运霖译. 计算机程序设计艺术第1 卷 基本算法〔M〕. 北京:国防工业出版社,2002
[8]电大学习网.免费论文网[EB/OL]. /d/file/p/2024/0424/fontbr />
相关文章:
当代艺术家曹雕的作品赏析04-26
浅析艺术市场新经济04-26
著名当代艺术家王永斌作品赏析04-26
探艺术本源 寻美的真谛|拾箴美术馆“艺道拾箴”项目在04-26
肖成:文化艺术传播也需要区别对待04-26
本周重磅 艺术与美的融合04-26
车联网技术与应用学术论文线告会成功举办04-26