程序设计语言的三种控制结构是软件评测师考试的重要考点,经常出现在上午场的客观选择题当中,下午场白盒测试也会涉及。控制成分指明语言允许表述的控制结构,程序开发人员使用控制成分来构造程序中的控制逻辑。理论上已经证明,可计算问题的程序都可以用顺序、选择和循环这三种控制结构来描述。下面就该知识点并结合例题进行总结学习。
一、顺序结构
顺序结构用来表示一个计算操作序列,整个程序整体上都是符合从上到下的顺序操作的。计算过程从所描述的第一个操作开始,按顺序依次执行后续的操作,直到序列的最后一个操作,顺序结构内也可以包含其他控制结构,其中各语句可以用“{”和“}”括起来表示自己的控制范围,被括起来的所有语句组成一个可执行的单元。如下图所示:
二、选择结构
选择结构提供了在两种或多种分支中选择其中之一的逻辑。基本的选择结构是指定一个条件P,然后根据条件的成立与否决定控制流走A还是走B,只能从两个分支中选择一个来执行,如下图(a)所示。这种结构经常用if...else语句来表示,格式为:
if(表达式)
语句1;
else
语句2;
选择结构中的A或B还可以包含顺序、选择和循环结构。
程序设计语言中通常还提供简化了的选择结构,当上面语句2为空语句时,可以简化为:
如下图(b)所示,此时语句B是不存在的,但是不成立这条分支是存在的,此时经常用if语句表示。
使用if语句时,需要注意if和else的匹配关系,else总是与离它最近的尚没有else的if相匹配。
程序设计语言通常还提供描述多分支的选择结构,例如switch语句。switch语句描述了多分支的选择结构,其一般形式为:
switch(表达式){
case常量表达式1:语句1;
case常量表达式2:语句2;
...
case常量表达式n:语句n;
default:语句n+1;
}
执行switch语句时,首先计算表达式的值,然后用所得的值与列举的常量表达式的值依次比较,若常量表达式1至常量表达式n都不能与表达式的值相匹配,就执行在default部分的“语句序列n+1",然后结束switch语句。若所得的值与常量表达式i(i=1,…,n)的值相同,则执行“语句序列i”,当casei的语句序列i中没有break语句时,则执行随后的语句序列i+1,语句序列i+2...直到语句序列n+1执行完成后,才退出switch语句;或者遇到了break而跳出switch
语句。要使得程序在执行完“语句序列i”后结束整个switch语句,在语句序列i中应包含控制流能够到达的break语句。
三、循环结构
循环结构描述了重复计算的过程,通常由三个部分组成:初始化、需要重复计算的部分和重复的条件。其中,初始化部分有时在控制的逻辑结构中不进行显式的表示。重复结构主要有两种形式:while/for型重复结构和do-while型重复结构。while/for型结构的逻辑含义是先判断条件P,若成立,则进行需要重复的计算A,然后再去判断重复条件;否则,控制就退出重复结构,如下图所示。
(1)while语句
while语句描述了先判断条件再执行重复计算的控制结构,while语句的一般形式是:
while(条件表达式)
循环体语句;
其中,循环体语句是内嵌的语句,当循环体语句多于一条时,应使用“{”和“}”括起来。执行while语句时,先计算条件表达式的值,当值为非0时,就执行循环体语句,然后重新计算条件表达式的值后再进行判断,否则就结束while语句的执行过程。
(2)for语句
for语句的基本格式是:
for(表达式1;表达式2;表达式3)
一般表达式1用于赋初始值,表达式2用于判定循环条件是否成立,表达式3用于变量值的变化操作,例如自增1操作等。
用while语句等价地表示为:
表达式1;
while(表达式2){
表达式3;
for语句的使用很灵活,其内部的三个表达式都可以省略,但用于分隔三个表达式的分号不能遗漏。
do-while型结构的逻辑含义是先执行循环体A,然后再判断条件P,若成立则继续执行循环体A的过程并判断条件;否则,控制就退出重复结构,如下图所示。
(3)do-while语句
do-while语句描述了先执行需要重复的计算再判断条件的控制结构,其一般格式是:
do
while(条件表达式);
执行do-while语句时,先执行内嵌的循环体语句,然后再计算条件表达式的值,若值为非0,则再次执行循环体语句和计算条件表达式并判断,直到条件表达式的值为0时,才结束do-while语句的执行过程。所以do-while循环体的执行次数刚好等于循环条件的判断次数。
下面是近几年对该知识点考察过的真题,以后仍是考试出题的重点,大家要重视起来。
【2017年第18题】在单入口单出口的do...while循环结构中,()
A、循环体的执行次数等于循环条件的判断次数
B、循环体的执行次数多于循环条件的判断次数
C、循环体的执行次数少于循环条件的判断次数
D、循环体的执行次数与循环条件的判断次数无关
解析:本题考查程序语言循环结构的基础知识。
do…while为先执行后判断,执行次数和判断次数相等。
故正确答案为:A
【2019年第22题】在C程序中,对于如下的两个for语句,其运行后a和b的值分别为()。
for(inta=0;a==0;a++);
for(intb=0;b=0;++b);
A、0,0
B、0,1
C、1,0
D、1,1
解析:本题考查程序设计语言的基础知识。
本题主要是学会区分赋值“=”与判等号“==”的不同意义。
for(inta=0;a==0;a++);语句中a==0成立1次,所以执行一次循环体,执行完a++后,a的值为1,最后不满足判定,跳出循环。
for(intb=0;b=0;++b);b的初值为0,然后把0赋给b,此时b的值为0,为假,所以条件第一次就不成立,一次也不执行,最终b=0。