首页 > 范文大全 > 正文

对C语言组织循环的方法探讨

开篇:润墨网以专业的文秘视角,为您筛选了一篇对C语言组织循环的方法探讨范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘 要:C语言是一门理想的结构化程序设计语言,是学生学习程序设计的基础课程。可通过对比手工计算,分析C语言组织循环的方法,着重讨论累加、累乘问题的计算,以及组织循环应注意的问题,让学生更好地掌握这一知识。

关键词: C语言;组织循环;计算方法

C语言是一门理想的结构化程序设计语言,开设C语言程序设计课程的目的是要求学生利用C语言进行程序设计,重点在掌握程序设计的方法。程序设计通常包括以下几项:针对提出的问题,研究确定求解的计算方法(算法)、根据计算方法绘制流程图、根据计算流程图编写程序。其中,计算方法是程序设计灵魂,是编程的关键。

一、计算方法的比较

关于计算方法的选择,必须注意到手算和计算机算有很大的差别的。手算更偏重于用人的经验去选择恰当的途径来尽量减少工作量,缩短计算时间,提高计算精度;但是使用计算机时,多采用具有相同算法结构,简单重复的计算,这样能充分发挥计算机的长处,(运算速度快,最适合于重复操作,它有自动判断的功能,因此,能控制重复执行的次数)。循环的计算结构便于编写程序,减少运算次数、提高计算速度,因此,程序设计语言中的循环语句成为具有广泛应用的基本语句之一,程序借助循环语句可以比较简单地实现计算问题中包含的多次重复的计算(有规律的重复问题)。

例如:以下问题求解,用手工操作是这样的:

①试求 1+2+3+4+……+100 的值

[分析与解] 利用等差数列求公式。(首项+末项)×项数÷2=(1+100)×100÷2=5050.

②试求 1×2+2×3+3×4+……+99×100的值

[分析与解] 用整数列项。原式=(1×2×3+2×3×3+3×4×3+4×5×3+……+99×100×3)÷3 = [1×2×3+2×3×(4-1)+3×4×(5-2)+4×5×(6-3)+……+99×100×(101-98) ]÷3=[99×100×101]÷3=333300.

③试求1×1+2×2+3×3+……99×99+100×100的值

[分析与解]利用平方差公式。1×1+2×2+3×3+……+n×n=n(n+1)(2n+1)÷6,原式=100×101×(2×100+1)÷6=338350.

上述问题,用计算机求解是这样的:用“迭代”的方法进行运算。设一个变量s,用它来存放被加数,x作为加数,使s+x?圯s,x值变化,用循环来控制x的增值和使s加x。s的值不断变化,用上一次计算出的s值来求下一次新的s值,然后再以这个新的s值去求下一个s值。每次以新值代替原值。S称为“迭代变量”。具体求和的过程可写成所谓的“括号套”的结构形式:(…(((0+x1)+x2)+x3)+…+x99)+x100

①求 1+2+3+4+……+100 的值中,x1=1、x2=2、x3=3……x100=100. ②求 1×2+2×3+3×4+……+99×100的值中,x1=1×2、x2=2×3、x3=3×4……x100=99×100. ③求1×1+2×2+3×3+……99×99+100×100的值中,x1=1×1、x2=2×2、x3=3×3……x100=100×100. 若用变量s表示部分和,那么上述算式可改写为:

0?圯s s中为0

s+x1?圯s s中为x1

s+x2?圯s s中为x1+x2

s+x3?圯s s中为x1+x2+x3

…… ……

s+x100?圯s s中为x1+x2+x3+……x100

用循环表示此求和过程,C语言实现循环常用三种语句:while、do-while和for语句。循环次数能估计出来时,一般采用for语句。

①试求 1+2+3+4+……+100 的值。源程序为:

# include "stdio.h"

void main()

{

int i,s=0; / *赋初值 0?圯s * /

for(i=1;i

s+=i; / * 累加和s+i?圯s * /

printf("%d \n",s);

}

②试求 1×2+2×3+3×4+……+99×100的值。

# include "stdio.h"

void main()

{

int i;

long s=0; \*初值为0*\

for(i=1;i

s+=i*(i+1);

printf("%ld \n",s) ;

}

以上是求累加数(若干项之和)。同样,若求累乘数 1×2×3×4×……×100 的值,求积过程可写成 (…(((1×x1)×x2)×x3)×…×x99)×x100 结构形式。用循环表示这个求积过程,源程序为:

# include "stdio.h"

void main()

{

int i,s=1;

for(i=1;i

s×=i;

printf("%d \n",s);

}

比较上例可知:此时s的初值是s=1而不是s=0 ,即初始值的确定问题。下面对循环语句使用作进一步说明。

二、关于循环语句,需要弄清楚的几个问题

(1)循环内变量往往需要赋初值。如上例中迭代变量 s赋初值。关于赋初值需考虑两个问题。

其一,选初值的语句应放在程序的什么位置,从上面的实例中可以看到这样的规律:对变量选初值的语句应设在循环体之外,即在for、while语句之前。如s=0、s=1。如果是双循环,则内循环体的变量取初值外循环体外,即在内循环的for、while之前。外循环体中的变量取初值的语句应在外循环外,即在外循环的for、while语句前。

例如:求阶乘之和s=m!的程序嵌套循环中变量的置位问题

# include"stdio.h"

void main()

{

int i,m,p,s;

s=0, m=1; /*累加结果变量s清零*/

while (m

{ p=1,i=1; /*共用变量p复位*/

while ( i

{ p*=i;i++;}

s+=p;m++;}

printf ("s=%d\n",s);

}

说明:程序由组成的二重循环构成。内层循环负责求某数的阶乘,外层循环负责累加各数阶乘的结果。存放累加结果的变量应在二重循环之外清零,存放每个数结果的共用变量p应在完成存放前一个数阶乘结果之后,开始存放新数阶乘结果之前,对共用变量复位,即在外层循环之内、内层循环变量之外对变量p复位。

其二,怎样选择初值,如上例中s=0 , s=1等,循环中的某些语句往往是与计算中题目的相应项一一对应的。若开始初值不知如何确定,一般可以先写出循环体中的语句,然后再选初始值。从例中看出,求累加和运算,一般值为0,求累乘积一般值为1,但要看具体情况。

(2)循环体语句顺序和循环条件有关系。

例如: 求阶乘之和s=m!的程序

#include"stdio.h"

void main()

{

int i=0,s=0;

while (i

{s+=i ;

i++;}

printf("s=%d\n",s) ;

}

上例输出结果为5050,若改变循环体内语句的顺序为 i++,s+=i输出结果5150,这是因为循环被多执行一次,需要把循环条件i

参考文献:

[1]谭浩强.C语言程序设计[M].北京:清华大学出版社,1999.

[2]汪大菊.C语言[M].天津:天津大学出版社,1996.

(新乡职业技术学院)