文档介绍:第2单元控制结构
本单元教学目标
介绍结构化程序设计方法的基本思想以及C++的基本控制结构和控制转移语句。
学习要求
通过本单元学习,掌握结构化程序设计方法的基本思想和C++的几种基本控制转移语句,熟悉使用伪代码的编程方法。
授课内容
程序的基本控制结构
我们知道,C++源程序由若干函数构成, 而函数又是由语句构成的。对于一个程序员来说,编程序的一个主要内容就是如何将解决一个应用问题所使用的算法用C++的语句和函数来描述。换句话说,也就是如何组织C++程序的结构。在本单元中,首先要介绍的是构成程序的几种基本结构,并进而介绍如何使用这些基本结构编写比较复杂的程序。
结构化设计方法是以模块化设计为中心,将待开发的软件系统划分为若干个相互独立的模块, 这样使完成每一个模块的工作变单纯而明确,为设计一些较大的软件打下了良好的基础。由于模块相互独立,因此在设计其中一个模块时,不会受到其它模块的牵连,因而可将原来较为复杂的问题化简为一系列简单模块的设计。模块的独立性还为扩充已有的系统、建立新系统带来了不少的方便,因为我们可以充分利用现有的模块作积木式的扩展。按照结构化设计方法设计出的程序具有结构清晰、可读性好、易于修改和容易验证的优点。C++是一种支持结构化程序设计思想的程序设计语言, 使用C++编写程序时, 应该遵循结构化程序设计方法。
在结构化程序设计方法中, 模块是一个基本概念。一个模块可以是一条语句、一段程序、一个函数等。在流程图中, 模块用一个矩形框表示, 如图2-1所示。模块的基本特征是其仅有一个入口和一个出口, 即要执行该模块的功能, 只能从该模块的入口处开始执行(用图2-1矩形上面的有向线段表示), 执行完该模块的功能后, 从模块的出口转而执行其他模块的功能(用图2-1矩形下面的有向线段表示), 即使模块中包含多个语句, 也不能随意从其他语句开始执行, 或提前退出模块。
按照结构化程序设计的观点, 任何算法功能都可以通过由程序模块组成的三种基本程序结构的组合: 顺序结构、选择构和循环结构来实现。
顺序结构由两个程序模块串接构成, 如图2-2左部所示。由图中可以看出, 这两个程序模块是顺序执行的, 即首先执行<程序模块1>, 然后执行<程序模块2>。
顺序结构中的两个程序模块可以合并成一个新的程序模块,即将图2-2中的左边部分整个看成一个新的模块,如图2-2的右部。通过这种方法,可以将许多顺序执行的语句合并成一个比较大的程序模块。但无论怎样合并,生成的新的程序模块仍然是一个整体,只能从模块的顶部(入口) 进入模块开始执行模块中的语句,执行完模块中的所有语句之后再从模块的底部(出口) 退出模块。事实上,顺序结构是最常见的程序结构形式,在一般程序中大量存在。但是设想一下,是不是所有程序都可以只使用顺序结构编写呢?显然答案是否定的。在求解实际问题时,常常要根据输入数据的实际情况进行逻辑判断,对不同的结果分别进行不同的处理;或者需要反复执行某些程序段落,以避免多次重复编写结构相似的程序段落带来的程序结构上的臃肿。这就需要在程序中引入选择结构和循环结构。一个结构化程序正是由这三种基本程序结构交替综合而构成的。
选择结构如图2-3所示。从图中可以看出,根据逻辑条件成立与否,分别选择执行<模块1>或者<模块2>。虽然选择结构比顺序结构稍微复杂了一点,但是仍然可以将其整个作为一个新的程序模块:一个入口(从顶部进入模块开始判断),一个出口(无论执行了<模块1>还是<模块2>,都应从选择结构框的底部出去)。
在编程实践中,还可能遇到选择结构中的一个分支没有实际操作的情况,如图2-4所示。这种形式的选择结构可以看成是图2-3中的选择结构的特例。
循环结构如图2-5所示。在进入循环结构后首先判断条件是否成立,如果成立则执行<程序模块>,反之则退出循环结构。执行完<程序模块>后再去判断条件, 如果条件仍然成立则再次执行内嵌的<程序模块>,循环往复,直至条件不成立时退出循环结构。
与顺序和选择结构相同, 循环结构也可以抽象为一个新的模块。图2-5中的循环结构可以描述为“当条件成立时反复执行程序模块”,故又称为while (当) 型循环。除了while型循环以外, 还可以构造出其他类型的循环来,如do-while型循环结构,其特点是进入循环结构后首先执行<程序模块>,然后再判断条件是否成立,如果成立则再次执行<程序模块>,直到条件不成立时退出循环结构。do-while型循环结构如图2-6所示。
“自顶向下, 逐步求精”的程序设计方法
在上面介绍的顺序、选择和循环三种基本程序结构中的程序模块又可以是由这三种基本程序结构抽象而成的新程序模块, 因此可以通过组合、嵌套这些基本程序结构来构造更复杂的程序。已