论文部分内容阅读
摘要: 循环结构是结构化程序设计中的三种基本结构之一,也是程序设计的基础,它和顺序结构、选择结构共同作为各种复杂程序的基本构造单元。但是,对于初学者来说,循环结构与人类日常的思维习惯不同,较难掌握。本文用几个实例阐述了在《C语言程序设计》课程中循环结构的教学方法。
关键词: 循环结构 C语言 程序设计
引言
顺序、选择、循环是结构化程序设计的三种基本结构,所以在高级语言程序设计课程中,掌握这三种结构是学好程序设计的基础。循环结构是这三者中最复杂的一种,几乎所有的程序都离不开循环,因此,熟练掌握循环结构是程序设计的最基本的要求。在C语言中,循环结构主要是由for和while、do-while语句实现的,其中for语句的应用更为普遍一些。for语句的用法对于有程序设计经验的学生来说轻而易举,但是对于那些没有经验的初学者来说难度却不小。本文从初学者的角度,阐述了C语言中循环结构几种典型应用的实现方法。
一、用循环结构实现几何图形
输出简单的几何图形,是循环结构的典型应用之一。对于这一类型的题目,初学者往往直接采用一条或若干条输出语句printf完成,这样虽然可以完成题目要求,但是很显然缺乏灵活性,不符合程序设计的思想。按照正常的程序设计思想,应该先分析图形的构成,找出其中的规律:如图1中的实心三角形,每一行由若干个空格、星号和一个回车换行符构成,将行号、空格数和星号数分别设为i、m和n,则可形成表1:
*
***
*****
*******
*********
由表1可以得出,行号i与空格数m、星号数n有如下的数学关系:
m=5-i,n=2×i-1
则实心三角形的构成规律可以描述为:第i行由(5-i)个空格和(2×i-1)个星号和一个回车符构成。把行号i作为for语句的循环变量,则此程序中的循环部分如下:
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”);
}
采用上面的方法,可以使学生很容易编写出类似的程序,其中关键在于让学生找出图形中行号与每一行的空格数及星号数的关系。
二、循环结构在数组中的应用
在C语言中,for语句经常与数组相结合,用于实现数组元素的赋值、输入和输出。对于初学者来说,更习惯于用顺序结构的语句来实现(如图2左)。我们将图2左的几条语句作比较,可以看出在这5条语句中,不同的只有数组下标,那么就可以将这5条语句合并成一条for语句,将数组下标换成for语句的循环变量i,而i的值从0增加到4。按照for语句的基本语法规则可以很容易写出图2右的for语句。
同样,对于下面这个输出二维数组元素的例子,也可以用上述方法实现,不过转换过程比上例要复杂一些:经过对比图3左侧方框中顺序结构的12条语句,可以发现也是只有数组下标在变化,但是由于是二维数组,行下标和列下标同时都在变化,很显然不能直接用一条简单的for语句来实现。但是我们可以把这12条语句细分一下,3条语句为一组,而在同一组中的语句只有列下标在变化,这时可以采用上例中的方法,将列下标都用循环变量j来代替,得到图3右上的形式。再次对比图3右上的4条for语句,不同的是行下标,同样用新的循环变量i来代替,合并后得到图3右下最终二重for循环的语句。
三、循环结构中的效率问题
程序设计的初学者往往以完成题目要求的功能为目的,程序的执行效率是最容易忽略的一个问题。在循环结构中,具体表现为循环体的执行次数。例如,一个经典的素数判定问题。在数学中素数的定义为:素数即指那些大于1,且除了1和它本身外,不能被其它任何数整除的数。根据这一定义,初学者很容易编写出如下所示的程序段:
int isprime(int n)
{
int i;
for(i=2;i<n;i )
if(n%i==0)return 0;
return 1;
}
上面的程序,完全可以实现题目要求的功能,初学者往往满足于此。但是当对for循环的执行次数进行分析时,我们发现:当n不是素数时,没有任何问题;而当n是素数时,循环体就要执行(n-2)次,而实际上是不需要这么多次的。根据数学的知识,可以将次数降为n/2或n的算术平方根,这样可以大大减少循环体的执行次数,提高程序的效率。
程序的执行效率是编程中时刻需要考虑的问题,也是程序设计中的基本要求。这需要许多算法方面的知识,对于初学者来说,要求可能过高,但是我们在讲授过程中要注意向学生灌输这种思想,从学习之初就要打下良好的基础,尤其是类似上面例子中这样显而易见的情况,可以提醒学生在编制完一道程序以后,检验一下,是否还有可优化的地方,这对以后进一步学习高级编程都是必要的。
如何让一名初学者尽快摆脱日常的思维定式,更加透彻地理解和掌握程序设计中的基本思想,领会程序设计的精髓,是高级语言程序设计这门课程的讲授过程中应该时刻注意的问题。希望本文能在这方面起到一点作用。
参考文献:
[1]谭浩强.C语言程序设计(第二版)[M].北京:清华大学出版社,1999.
[2]苏运霖译.计算机程序设计艺术第1卷.基本算法[M].北京:国防工业出版社,2002.
关键词: 循环结构 C语言 程序设计
引言
顺序、选择、循环是结构化程序设计的三种基本结构,所以在高级语言程序设计课程中,掌握这三种结构是学好程序设计的基础。循环结构是这三者中最复杂的一种,几乎所有的程序都离不开循环,因此,熟练掌握循环结构是程序设计的最基本的要求。在C语言中,循环结构主要是由for和while、do-while语句实现的,其中for语句的应用更为普遍一些。for语句的用法对于有程序设计经验的学生来说轻而易举,但是对于那些没有经验的初学者来说难度却不小。本文从初学者的角度,阐述了C语言中循环结构几种典型应用的实现方法。
一、用循环结构实现几何图形
输出简单的几何图形,是循环结构的典型应用之一。对于这一类型的题目,初学者往往直接采用一条或若干条输出语句printf完成,这样虽然可以完成题目要求,但是很显然缺乏灵活性,不符合程序设计的思想。按照正常的程序设计思想,应该先分析图形的构成,找出其中的规律:如图1中的实心三角形,每一行由若干个空格、星号和一个回车换行符构成,将行号、空格数和星号数分别设为i、m和n,则可形成表1:
*
***
*****
*******
*********
由表1可以得出,行号i与空格数m、星号数n有如下的数学关系:
m=5-i,n=2×i-1
则实心三角形的构成规律可以描述为:第i行由(5-i)个空格和(2×i-1)个星号和一个回车符构成。把行号i作为for语句的循环变量,则此程序中的循环部分如下:
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”);
}
采用上面的方法,可以使学生很容易编写出类似的程序,其中关键在于让学生找出图形中行号与每一行的空格数及星号数的关系。
二、循环结构在数组中的应用
在C语言中,for语句经常与数组相结合,用于实现数组元素的赋值、输入和输出。对于初学者来说,更习惯于用顺序结构的语句来实现(如图2左)。我们将图2左的几条语句作比较,可以看出在这5条语句中,不同的只有数组下标,那么就可以将这5条语句合并成一条for语句,将数组下标换成for语句的循环变量i,而i的值从0增加到4。按照for语句的基本语法规则可以很容易写出图2右的for语句。
同样,对于下面这个输出二维数组元素的例子,也可以用上述方法实现,不过转换过程比上例要复杂一些:经过对比图3左侧方框中顺序结构的12条语句,可以发现也是只有数组下标在变化,但是由于是二维数组,行下标和列下标同时都在变化,很显然不能直接用一条简单的for语句来实现。但是我们可以把这12条语句细分一下,3条语句为一组,而在同一组中的语句只有列下标在变化,这时可以采用上例中的方法,将列下标都用循环变量j来代替,得到图3右上的形式。再次对比图3右上的4条for语句,不同的是行下标,同样用新的循环变量i来代替,合并后得到图3右下最终二重for循环的语句。
三、循环结构中的效率问题
程序设计的初学者往往以完成题目要求的功能为目的,程序的执行效率是最容易忽略的一个问题。在循环结构中,具体表现为循环体的执行次数。例如,一个经典的素数判定问题。在数学中素数的定义为:素数即指那些大于1,且除了1和它本身外,不能被其它任何数整除的数。根据这一定义,初学者很容易编写出如下所示的程序段:
int isprime(int n)
{
int i;
for(i=2;i<n;i )
if(n%i==0)return 0;
return 1;
}
上面的程序,完全可以实现题目要求的功能,初学者往往满足于此。但是当对for循环的执行次数进行分析时,我们发现:当n不是素数时,没有任何问题;而当n是素数时,循环体就要执行(n-2)次,而实际上是不需要这么多次的。根据数学的知识,可以将次数降为n/2或n的算术平方根,这样可以大大减少循环体的执行次数,提高程序的效率。
程序的执行效率是编程中时刻需要考虑的问题,也是程序设计中的基本要求。这需要许多算法方面的知识,对于初学者来说,要求可能过高,但是我们在讲授过程中要注意向学生灌输这种思想,从学习之初就要打下良好的基础,尤其是类似上面例子中这样显而易见的情况,可以提醒学生在编制完一道程序以后,检验一下,是否还有可优化的地方,这对以后进一步学习高级编程都是必要的。
如何让一名初学者尽快摆脱日常的思维定式,更加透彻地理解和掌握程序设计中的基本思想,领会程序设计的精髓,是高级语言程序设计这门课程的讲授过程中应该时刻注意的问题。希望本文能在这方面起到一点作用。
参考文献:
[1]谭浩强.C语言程序设计(第二版)[M].北京:清华大学出版社,1999.
[2]苏运霖译.计算机程序设计艺术第1卷.基本算法[M].北京:国防工业出版社,2002.