荷兰学者Dijkstra提出了一种“结构化程序设计”的思想,这种思想要求程序设计者需要按照一定的结构形式来设计和便携程序,其主要的目的是使程序员编写的程序具有良好的结构,使程序的设计简单,容易理解,容易修改调试,以提高程序的设计效率和维护效率。
结构化程序设计规定了以下三种基本结构作为程序的基本组成单元:
一 、顺序结构
这个结构中的各块是只能顺序执行的。见图1:
图 1
二、 选择结构
根据给定的条件P选择执行A模块或者B模块。见图2
图 2
三、 循环结构
循环分为
“直到型”循环(图3)和
“当型”循环(图4)。
图 3 图4
图3表示的结构称为“直到型”循环,它的含义是:执行A模块直到满足给定的条件为止(满足了条件之后就不在执行A模块)。
图4表示的结构称为i“当型”循环,它的含义是:当给定的条件P满足时执行A模块,否则不执行A模块,而直接跳转到下面部分执行。
这两种循环的区别是:“直到型”循环是先执行,然后再判断条件,而“当型”循环是先判断条件,然后再根据条件执行程序,因此,“直到型”循环至少执行一次,而“当型”循环“可能一次也不执行。
这三种结构的共同特点是:1. 有一个入口 2. 有一个出口 3. 结构中的每一部分都有被只执行的机会 4. 没有死循环。
以上的三种结构可以派生出其他的形式的结构,由这三种基本结构构成的算法可以处理任何复杂的问题。
接下来详细介绍一下常用的三种循环结构(goto 尽量少用,在此不做介绍),以及各自的特点以及使用时的注意事项:
1. while循环,while()循环属于“当型”循环。
-
while(条件)
-
{
-
执行模块A
-
}
-
.
-
.
-
.
2. do{……}while(条件);属于“直到型”循环
-
do{
-
循环体
-
}while(条件);
-
.
-
.
-
.
3. for()循环;属于“当型”循环
-
for(相关变量初始化(1);循环继续或终止条件(2);使循环向结束方向变化的语句(3))
-
{
-
循环体(4);
-
}
-
.
-
.
-
.
特别注意的是for循环中各个部分的执行顺序:很多同学误以为是首先执行顺序是:(1)==>(2)==>(3)==>(4),这种逻辑是错误,正确是执行顺序是:(1)==>(2)==>(4)==>(3);即先执行(1):相关变量初始化(一般是控制循环次数的变量),并且这一部分语句只执行一次,并不是每次都执行 ;然后执行(2),即判断循环条件是否为真;然后再执行(4),即执行循环体;最后执行(3),即执行
使循环向结束方向变化的语句。这一轮完了会再次执行(2),即判断循环条件,若为真,则继续执行循环体(4),如此往复循环……直到循环的条件不满足退出循环,继续执行后面的程序语句。
一个有意义的循环(不是死循环),具有以下三个基本要素:
(1) 循环相关变量赋值启动初值,比如常用的for循环中i = 0赋初值。
(2) 循环继续或者结束条件。比如for循环中的i < 100.
(3) 循环中要有使循环向结束方向变化的语句。比如for循环中的i++。
以上三个循环都能够实现循环的操作,那么我们应该选择那种循环呢?
一般情况下,当知道
循环结束条件时,优先用while循环,当知道循环次数时优先使用for循环。建议尽量使用for循环来实现循环操作,优点是在for循环中显式的把循环的三个基本要素写在一起,即保证了循环的正确性,而while循环中,一般只有第二个条件是已知的,而相关变量的赋初值必须要在while循环之前完成,然后还需要在循环体中添加使循环向结束方向变化的语句,而这些条件恰恰是比较容易漏掉的,很容易出现一些逻辑错误。
阅读(1006) | 评论(0) | 转发(0) |