论文导读:循环结构式结构化程序设计的三种基本结构之一,应用相当广泛,利用循环结构来处理各种重复操作,既简单,又方便。C语言提供了三种用于实现循环结构的语句,while、do~while和for语句,其中,前两个语句又被称为条件循环,也就是根据条件来决定是否继续循环,后一个语句又被称为计数循环,即就是根据设定的次数来执行循环。由于for语句的功能最强,使用也最为灵活方便,在这我们就主要探讨一下for语句的应用。
关键词:C语言,循环结构,for
循环结构式结构化程序设计的三种基本结构之一,应用相当广泛,利用循环结构来处理各种重复操作,既简单,又方便。C语言提供了三种用于实现循环结构的语句,while、do~while和for语句,其中,前两个语句又被称为条件循环,也就是根据条件来决定是否继续循环,后一个语句又被称为计数循环,即就是根据设定的次数来执行循环。由于for语句的功能最强,使用也最为灵活方便,在这我们就主要探讨一下for语句的应用。
1、for语句的一般形式
for(表达式1;表达式2;表达式3)
循环体语句
其执行过程采用流程图1-1来表示。
(1)求解表达式1
(2)求解表达式2,若表达式2的值为真(非0),则执行循环体语句,然后执行第(3)步。若表达式2的值为假(0),则退出循环,执行第(4)步。
(3)求解表达式3,返回第(2)步继续执行。
(4)循环结束,执行for语句的后续语句。
既然for语句是用来实现循环结构,那么它就必须包含循环结构的三个基本要素,第一,循环变量赋初化,用于在循环开始前为循环变量设置初始值。第二,循环控制条件,用于控制循环执行的条件,决定循环的次数。第三,循环变量增值,用于修改循环变量,使得循环能够趋于结束。这三要素通常是由表达式1,表达式2,表达式3分别给出。所以for语句的一般形式也可以表示成如下形式:
for(循环变量初始化;循环控制条件;循环变量增值)
循环体语句
例1: 计算sum=1+2+3+……+99+100。
分析:这是一个典型的累加问题,它的重复操作就是加法运算,由于每一项加数都是呈规律性的变化,所以可以把加数作为循环变量,初值为1,进行完一次加法运算后,自增一次,一直变化到100。对于被加数而言,它既是被加数,又要存放累加和,所以在使用前需要清0。
程序:
#include <stdio.h>
void main()
{int sum=0,i;
for(i=1;i<=100;i++)
sum+=i;
printf(“sum=%d ”,sum);
}
2、for语句的变形
for语句的灵活多变,主要体现在3个表达式上,一般情况下,三个表达式用来给出循环的三个基本要素,但这三个表达式也可以是与三要素无关的任意表达式,也可以进行任意表达式的省略,在省略表达式时,表达式与表达式之间的“;”绝对不能省。免费论文。下面就来具体看一下for语句的几种变化形式。
(1)省略表达式1。
省略表达式1,即就是省略了循环变量初始化的语句,根据for语句的执行流,那么就需要在求解表达式2之前完成对循环变量初始化语句的添加。
i=1;
for( ;i<=100;i++)
sum+=i;
(2)省略表达式2。
省略表达式2,即就是省略了循环的控制条件,那么循环控制条件始终为真,这就使得循环陷入到死循环中,所以同样根据for语句的执行流,需要在执行循环体语句之前完成对循环控制条件的添加。
for(i=1; ;i++)
if(i<=100) sum+=i;
else break;
说明:break用在跳出所在的循环体,即提前结束循环。
(3)省略表达式3。
省略表达式3,即就是省略了循环变量增值,那么循环变量始终不发生变化,也就无法使得循环趋于结束,同样会使循环陷入到死循环中,所以需要在执行完循环体语句后添加修改循环变量的语句。
for(i=1;i<=100; )
sum+=i;
i++
(4)其它形式。
i=1;
for(sum=0;i<=100;sum+=i,i++)
;
这里貌似表达式1、2、3都在,但是仔细观察可以看出,表达式1跟循环变量初始化并无关系,实际上相当于是缺省了表达式1的情况。表达式3是一个逗号表达式,不光完成了修改循环变量,还将循环体语句也放在这里进行求解,因此for后面的“;”必须有,这说明循环体语句为空,若缺少这个分号,程序在执行的过程中会错误把循环结构的后续语句作为循环体语句反复执行。
从上面介绍可以看出,for语句使用起来非常灵活,变化形式多样,可以把循环体和一些与循环控制无关的操作放在表达式1或表达式3中完成,使得程序变得短小简洁,但若过分的利用这一特点又会使for语句显得杂乱,降低程序的可读性,所以建议大家最好将3个表达式就用来描述循环的三个基本要素,而与循环三要素无关的语句,放在其它位置进行处理。
3、常见问题的处理。
学生在初学循环结构时,往往不太清楚在什么情况下该用循环结构以及如何用好循环结构,现将教学中常见的需要用循环结构来解决的问题归纳出来,并给出这些问题的编程思路。
第一类题:数值计算题如:
(1)求累加和1+2+3+……+99+100问题;
(2)求阶乘n!=1×2×3×4×……×n问题;
(3)求1!+2!+3!+4!+……+ n!;
(4)求11+22+33+……+nn;
(5)利用公式 ……;求
直到最后一项的绝对值小于10-6;等等这些类似多个数据加减乘除的问题,数据之间有一定的规律,一般是每个参与运算的数值或与前一个数值有关、或与相号有关,这类问题可以按照以下方法编程实现:
首先找出循环的三个基本要素。其次给出关键步骤,也就是他的重复操作部分。第三就是根据关键步骤里涉及到的变量,该定义的定义,该赋初值的赋初值。最后输出结果。
按照这样的方式,以(5)为例,进行说明。
第一步:循环变量i的初值为1,循环控制条件是最后一项的绝对值小于10-6,设t为下一个运算数,则循环控制条件就为fabs(t)>=1e-6。免费论文。循环变量增值,i=i+2。
第二步:设sum既是被加数,又用来存放结果。进行一次累加后,就需要求解下一项加数t, sum=sum+t;s=-s;t=s/(i+2);循环体语句数目超过一条,所以用一对{}括起,使其在逻辑结构上成为一条语句。
第三步:对使用到的变量进行定义,需要赋值的赋值,最后输出结果。若在程序中使用到了库函数,就将该库函数所对的头文件包含进来。
程序如下:
#include <math.h>
#include <stdio.h>
void main()
{int i,s=1;
float sum=0,t=1;
for(i=1;fabs(t)>=1e-6;i=i+2)
{sum=sum+t;
s=-s;
t=s/(i+2.0)
}
printf(“sum=%f ”,sum*4);
}
第二类题:枚举题,如:(1)输入一串字符,分别统计其中的数字、字符、大写字母、小写字母和空格的个数;(2)输出所有的水仙花数(水仙花数是指3位数的各位数字的立方和等于这个3位数本身);(3)找出1000以内所有的完数(完数是其值恰好等于其因子之和的数);(4)求100以内所有的素数等等;这类题循环体中要用到条件判断语句(即选择语句),找出一个范围内的所有数据,判断这些数据是否符合某些条件,若符合这些条件则输出。
第三类题:作图题,如:输出菱形图、输出杨辉三角、输出九九乘法表等。这类题要用二重循环,其中外层循环用于控制有多少行,内层循环用于控制有多少列。
第四类题:排序题,如冒泡排序、选择排序等,一般也要用到二重循环。
第五类题:查找题,如对有序数列的折半查找和对无序数列的顺序查找。
第六类题:可以用递归解决的问题,如求n!、求菲波拉契数列、求Xn等等。一般是将大数化小数,如求n!问题变为求(n-1)!的问题。
第七类题:有关矩阵的问题,如:(1)求矩阵各元素的和(或积);(2)求矩阵对角线的和(或积);(3)求矩阵两条对角线的和(或积),要求不能重复相加(或相乘);(4)输出矩阵中的最大(或最小)元素值;(5)输出两个矩阵相乘的结果等问题。涉及到矩阵的编程,一定要用二维数组。
第八类题:可以用迭代法求解的题目。
上述8类是常见的需要用循环结构编程解决的问题,通过把这些问题归纳出来并给出了一般的编程思路,学生对于“什么情况下用循环?”以及“如何实现循环?”会有清晰的了解。
4、小结
循环结构在程序设计中被广泛的使用,而for语句又是使用最为灵活的用于实现循环结构的控制语句。免费论文。对于初学者在学习过程中,应该对问题多做分析,同时通过上机练习,熟练掌握for语句的使用。
[1]谭浩强. C程序设计(第三版)[M]. 北京:清华大学出版社. 2005
[2]杨路明. C语言程序设计[M]. 北京:北京邮电大学出版社. 2003
[3]黄维通,马力妮. C语言程序设计[M]. 北京:清华大学出版社. 2003
|