第5讲结构化程序设计之流程控制语句.

  • 格式:doc
  • 大小:1.12 MB
  • 文档页数:56

河北能源职业技术学院教案

- 1 - 第5讲 结构化程序设计之流程控制语句

教学过程设计

一 新课引入

默认情况下程序是顺序执行的。

当程序员在编写程序时并不知道在一次具体执行中执行者会做些什么时,他可以建立一个执行者用以作出判定的标准。例如:“朋友来了,端出好酒;豺狼来了,拿出猎枪。”。

有时程序的某部分可能需要执行多次。例如:在中草药炮制过程中,对某种药材要经过“九蒸九晒”才符合要求,这种重复必须指明重复的次数。有时重复执行程序的某部分不一定有明确的次数,但可以以是否达到某个目标作为重复终止的判断依据。例如:在把假分数化成真分数时,可以从分子中不断地减去分母,直到分子小于分母为止。

操作之间的关系——操作流程包括:顺序、选择、循环、转向(语言表达所需要的)。其中顺序、选择、循环是三种基本结构,已经证明,由这三种基本结构组成的程序结构,可以解决任何复杂的问题。由基本结构所构成的程序是结构化的程序,它不存在无规律的转向,只在本基本结构内才允许存在分支和向前或向后的跳转。软件工程提倡程序员书写结构化的程序。

C语言提供的流程控制语句有——描述“选择”的语句有:if语句、switch语句;描述“循环”的语句有:while语句、do-while语句、for语句;描述“转向”的语句有:goto语句、break语句、continue语句、return语句。为了达到直观形象、易于理解的效果,我们在进行结构化编程的同时可以辅助以一种图形工具——结构化的流程图。

本讲将主要介绍关于四种操作流程:顺序、选择、循环、转向的C语言描述、图形描述方法,以及由三种基本结构所构成的结构化的程序。

二 讲授新课

1 顺序

默认情况下程序是顺序执行的,所以C语言没有必要提供相关的描述语句来表示。

2 选择

当程序员在编写程序时并不知道在一次具体执行中执行者会做些什么时,他可以建立一个执行者用以作出判定的标准。例如:“朋友来了,端出好酒;豺狼来了,拿出猎枪。”。

C语言提供的描述“选择”的语句有:if语句、switch语句。

河北能源职业技术学院教案

- 2 - if语句

1. if语句的两种形式

C语言提供了两种形式的if语句:

单分支选择if语句

if(“条件”表达式)

语句

说明: “条件”表达式的类型不限于逻辑表达式,可以是任意的数值类型(包括整型、实型、字符型、指针型数据)。

 在if和else后面可以只有一个操作语句,也可以有多个操作语句,此时需用花括号“{}”将几个语句括起来成为一个复合语句。

单分支选择if语句的流程图表示如下图所示。

单分支选择if语句的执行过程是:求“条件”表达式的值。如果“条件”表达式的值为真,则执行“语句”,否则不执行“语句”。

单分支选择if语句的功能是:判定所指定的条件是否满足,根据判定的结果(真或假)决定是否执行给定的一组操作。

双分支选择if语句

if(“条件”表达式)

语句1

else

语句2

河北能源职业技术学院教案

- 3 - 说明同上。

双分支选择if语句的流程图表示如下图所示。

双分支选择if语句的执行过程是:求“条件”表达式的值。如果“条件”表达式的值为真,则执行“语句1”,否则执行“语句2”。

双分支选择if语句的功能是:判定所指定的条件是否满足,根据判定的结果(真或假)决定执行给定的两组操作其一。

2. if语句的嵌套

嵌套的if语句能实现多分支选择。

在if语句中又包含一个或多个if语句称为if语句的嵌套。例如:

if(“条件”表达式)

if(“条件”表达式)

语句1

else

语句2

else

if(“条件”表达式)

语句3

else

语句4

应当注意if与else默认的配对关系——else总是与其前面最近的if配对。因此最好使内嵌if语句也包含else部分,这样if与else的数目相同,从内层到外层一一对应,不致出错。如果if与else的数目不同,要改变这种默认的配对关系,可以加花括弧来确定配对关系。例如:

河北能源职业技术学院教案

- 4 - if(“条件”表达式)

{

if(“条件”表达式)

语句1

}

else

语句2

这时{ }限定了内嵌if语句的范围,因此else与第一个if配对。

常用的一种嵌套形式是:

if(“条件”表达式1)

语句1

else if(“条件”表达式2)

语句2

else if(“条件”表达式n)

语句n

else

语句n+1

说明同上。

其流程图表示如下图所示。

河北能源职业技术学院教案

- 5 -

其执行过程是:求“条件”表达式1的值,如果“条件”表达式1的值为真,则执行“语句1”,否则求“条件”表达式2的值,如果“条件”表达式2的值为真,则执行“语句2”,否则……,依此类推。当出现某个“条件”表达式的值为真时,则执行其对应的语句。如果所有的“条件”表达式的值均为假,则执行“语句n+1”。

其功能是:多次判断。每判断一步,都分别分离出一些范围(这些范围已能用于作出相应的结论),逐步缩小判定的范围,直到不必再缩小判定的范围就可以作出相应的结论。

switch语句

我们可以用嵌套的if语句来实现多分支选择,但如果分支越多,则多嵌套的if语句的层数就越多,程序冗长而且可读性降低。

某些时候,在使用嵌套的if语句时,所有的分支看起来都非常相似,因为它们都在对一个完全相同的“条件”表达式(“条件”表达式的类型只能为整型、字符型或枚举型)进行求值,惟一的区别是每个分支都将“条件”表达式的值与一个不同的值(也相应地只能为整型、字符型或枚举型)进行比较。例如:

if (day = = 0)

dayName = "Sunday";

else if (day = = 1)

河北能源职业技术学院教案

- 6 - dayName = "Monday";

else if (day = = 2)

dayName = "Tuesday";

else if (day = = 3)

...

else

dayName = "Unknown";

在这些情况下,通常需要将嵌套的if语句改写为一个使用break语句的switch语句,使程序更简洁、更易懂。

switch语句的一般形式如下:

switch(“条件”表达式)

{

case 常量表达式1:语句1

case 常量表达式2:语句2

case 常量表达式n:语句n

default:语句n+1

其流程图表示如下图所示。

河北能源职业技术学院教案

- 7 -

说明: switch后面括号中的“条件”表达式的类型只能为整型、字符型或枚举型。

 每一个case后面都需要一个常量表达式(例如:1、'a'、3+4),且该常量表达式的值的类型要与switch后面括号中的“条件”表达式的值的类型相匹配。

 每一个case后面的常量表达式的值必须互不相同,否则就会出现逻辑上互相矛盾的现象——对switch后面括号中的“条件”表达式的同一个值,有两种或多种执行方案。

 一个switch语句中可以没有default标号或只能有一个default标号,default标号表示不是任何case标号所提供的其他情况。

 default标号和各个case标号之间无先后顺序。

 多个case标号可以共用一组执行语句。例如:

case 'A':

case 'B':

case 'C':printf(">60\n");break;

grade的值为A、B或C时都执行同一组语句。

河北能源职业技术学院教案

- 8 -  switch后面括号中的“条件”表达式实际上并非进行真正的条件判断,而只是一种跳转指示(与 if 语句不同),表示下面应该跳转到什么位置继续执行。而各个“case常量表达式”和default实际上只是一个语句标号,并不是在该处进行条件判断。执行时根据switch后面括号中的“条件”表达式的值找到匹配的入口标号,就跳转到此标号后面的语句处,并从此语句开始执行下去,而不再通过判断来决定是否继续执行——即执行完一个标号后面的语句后,流程控制转移到下一个标号后面的语句继续执行,直到整个switch语句结束(即遇到“}”)。

在标号后面虽然包含一个以上执行语句,但可以不必用花括号括起来,会自动顺序执行本标号后面所有的执行语句。当然加上花括号也可以。

如果要在执行一个标号后面的语句组后使流程跳出switch语句,必须在其语句组最后加上break语句,最后一个标号可以不加break语句。使用break语句的switch语句的一般形式如下:

switch(“条件”表达式)

{

case 常量表达式1:语句1

break;

case 常量表达式2:语句2

break;

case 常量表达式n:语句n

break;

default:语句n+1

(break;)

其流程图表示如下图所示。

河北能源职业技术学院教案

- 9 -

switch语句的执行过程:首先计算switch后面括号中“条件”表达式的值(switch后面括号中的“条件”表达式只求值一次。),然后在作为具体的复合语句中的语句序列中从前开始查找带case标号的带标号语句。如果某个带case标号的带标号语句中case后常量表达式的值与所求得的“条件”表达式的值相同,那么就从该带标号语句开始往后执行,直到遇到break等语句退出该switch语句或执行到该复合语句末尾(执行到右花括号“}”处。)。如果没有一个带标号语句中case后常量表达式的值与所求得的“条件”表达式的值相同,那么就接着查找其后有无带default标号的带标号语句。若有,则从default标号所标记的语句往后执行,直到执行到该复合语句末尾或遇到break等语句退出本switch语句;否则,不执行该复合语句中任何语句,直接退出switch语句。

选择结构的嵌套

程序举例

【例】由用户输入某一年份,判断该年份是否为闰年,并将判断结果输出到屏幕。