C语言中循环语句的分析

2017-04-10 06:20张国钦宋伟马俊兴
电脑知识与技术 2017年4期

张国钦++宋伟++马俊兴

摘要:循环结构是程序设计的三种基本结构之一,在程序设计中具有重要地位。分析了C语言中的循环语句,指出了各自所属的循环结构,并对它们的区别和适用场合做了分析。

关键词:循环结构;while语句;do...while语句;for语句

中图分类号:TP312 文献标识码:A 文章编号:1009-3044(2017)04-0063-02

Analysis of Loop Statements in C Language

ZHANG Guo-qin, SONG Wei, MA Jun-xing

(The Center of the Modern Educational Technology, Henan Finance and Banking College, Zhengzhou 450046, China)

Abstract: Loop structure is one of the three basic structures of program design, which has an important position in programming. This paper analyzes the loop statements in C language, and points out their respective loop structures, and analyzes their differences and application occasions.

Key words: loop structure; while statement; do...while statement; for statement

1 背景

1966年,Bohra和Jacopini提出了程序设计的三种基本结构:顺序结构、选择结构和循环结构。循环结构将一些指令组合起来构成循环体,当满足某种条件时反复执行。循环结构包括当型循环结构和直到型循环结构。C语言中实现循环结构的循环语句包括if...goto语句、while语句、do...while语句和for语句。if...goto语句因为不符合结构化程序设计的要求现在已经很少有人使用,while语句和for语句很好理解,而do...while语句却让很多人疑惑,不知道它到底属于当型循环结构还是直到型循环结构。网上也经常有人提出这样的疑问,而很多教材对此解释得不甚清晰,更增加了C语言初学者的困惑。本文将试图厘清这些循环语句及它们所属的循环结构,并对它们的区别和适用场合做一分析。

2 循环结构的分类

2.1 当型(while型)循环结构

当型循环结构如图1(a)所示。它的执行过程为:先判断条件c1,如果c1成立,则执行循环体A,执行完A后,再判断条件c1,如果c1成立,再执行循环体A,如此反复执行循环体A,直到某一次条件c1不成立为止,此时不执行循环体A,而从b点离开循环结构。当型循环结构的主要特点是当循环条件成立时执行循环体,当循环条件不成立时离开循环体。

2.2 直到型(until型)循环结构

直到型循环结构如图1(b)所示。它的执行过程为:先执行循环体A,然后判断条件c2是否成立,如果c2不成立,则继续执行循环体A,然后再对条件c2作判断,如果条件c2仍然不成立,则继续执行循环体A,如此反复执行A,直到给定的条件c2成立为止,此时不再执行循环体A,从b点离开循环结构。直到型循环结构的主要特点是当循环条件成立时离开循环体,当循环条件不成立时执行循环体。

很容易看出,如果当型循环结构和直到型循环结构执行相同的功能,那么循环条件c1和c2之间必然存在关系:c2=,也就是说c1和c2是互为相反的条件。

3 C语言中的循环语句

C语言中的循环语句包括if...goto语句、while语句、do...while语句和for语句。我们用这几个语句分别来求解一个简单的问题(记为问题a):求n的阶乘n!的值(假定n2)。从中来分析它们的区别。

3.1 if...goto语句

goto语句为无条件转移语句,一般格式为goto 语句标号;当goto语句和if语句结合就可以实现有条件的转移,从而实现循环结构。用if...goto语句求问题a的代码为:

当型循环结构 直到型循环结构

3.2 while语句

while语句的一般格式为:while(条件表达式)循环体;。while语句的特点是:

1)当条件表达式为真时,执行循环体;为假时,离开循环体。因此,while语句属于当型循环结构。

2)先判断条件表达式,后执行循环体。

用while语句求解问题a的代码为:

do...while语句的特点是先执行一次循环体,然后判断条件表达式,如果为真,则继续执行循环体;如果为假,则离开循环体。因此,do...while语句属于当型循环结构,虽然它从形式上来说很像直到型循环结构。do...while语句和pascal语言中的repeat...until语句很像,都是先执行循环体,再做条件判断,但repeat...until语句是条件为真时离开循环体,属于直到型循环结构。

用do...while语句求解问题a的代码为:

假如do...while语句是直到型循环结构,那么它的条件表达式和while语句的条件表达式一定是相反的,如果把do...while语句中的条件i<=n改成i>n,则得不到想要的结果。do...while语句和while语句的区别是当循环条件一开始就为假时,do...while语句执行1次循环体,while语句执行0次。

3.4 for語句

for语句的一般格式为:

for(表达式1;表达式2;表达式3)循环体;

其中表达式1为初始化语句,一般情况下包含循环变量的初始化,仅在循环开始时执行一次。表达式2为循环条件表达式,用来判定是否继续循环。在每次执行循环体前先执行此表达式,值为真时继续执行循环体,值为假时离开循环体。因此for语句属于当型循环结构。表达式3作为循环的调整,一般情况下是改变循环变量的值,使循环体执行若干次之后循环条件表达式的值为假,从而离开循环体。

对for语句的说明:

1)表达式1~3都可以省略。省略表达式1以后,表达式1要放到for语句之前以完成对循环变量的初始化;省略表达式2后,表示循环条件永远为真;省略表达式3后,表达式3要放到循环体内。

2)for语句可以改写为while语句的形式:

表达式1;

3.5 几种循环语句的比较

1)while语句和do...while语句一般用于处理循环条件已知,循环次数不确定的情况。

2)for语句一般用于处理循环次数确定的情况,也可以用于循环次数不确定而只给出循环条件的情况,它完全可以代替while语句。因此for语句更为灵活,功能也更为强大。

3)if...goto语句既可以实现当型循环结构,也可以实现直到型循环结构,不过现在已经不常用。while语句、do...while语句和 for语句均属于当型循环结构。

4)这几种语句可以用来处理同一问题,可以相互替代,没有实质上的差别。

4 结束语

循环结构在程序设计中占有重要地位,只有弄清楚基本概念,熟练掌握各种循环语句的基本用法,才能写出可读性更强,执行效率更高的程序。

参考文献:

[1] 谭浩强. C程序设计[M]. 4版.北京: 清华大学出版社, 2010: 26-27.

[2] 李瑞华.C语言循环语句浅析[J]. 电脑知识与技术, 2011, 7(26): 6423-6424.