博学谷——让IT教学更简单,让IT学习更有效
第3章 结构化程序设计
学习目标
? 理解算法的概念
? 能够使用流程图画出顺序、选择、循环三种语句的执行流程 ? 要求熟练使用if、switch语句判断各种选择情况以及嵌套使用 ? 熟练运用while、do-while、for三种循环结构的思想解决实际问题 ? 熟练应用break、continue、goto语句与循环语句的搭配使用
前面的章节一直在介绍C语言的基本语法知识,然而仅仅依靠这些语法知识还不能编写出完整的程序。在程序中,通常需要加入业务逻辑,并根据业务逻辑关系对程序的流程进行控制。本章将针对程序设计的灵魂——算法以及C语言中最基本的三种程序流程进行讲解。
3.1 算法——程序设计的灵魂
3.1.1 算法的概念
假如有一张对称的桌子和无限多大小相同的硬币,有两个人轮流往桌子上放硬币,规定硬币不可以重叠,但可以边贴边放置。最后谁放不下谁就输了。假设让你第一个放置,你如何做才能保证自己肯定赢呢?明确了“做什么”,接下来就是寻求解决办法。首先自己赢的话需要在自己没地方放硬币之前,对方就应该没有地方放硬币了,从这分析可以想到,我们的行为和对方的行为应该有一定的联系性。于是可以得到一个解决办法,首先在桌子中央,放置硬币,接下来等对方放置硬币后,只需要在他的对称位置放就可以了,只要他可以放,那么对称位置一定还有空间,直至他没地方放了,我们就赢了。
这是生活中一个运用智慧解决问题的例子,学习编程也是为了解决问题的。那么程序是什么?程序是为完成一项特定任务而用某种语言编写的一组指令序列。一个程序应当包含以下两方面的内容:
(1)对数据的描述:在程序中指定用到哪些数据以及这些数据的类型和数据的组织形式,这就是数据结构(data structure)。
(2)对数据操作的描述:即操作步骤,也就是算法(algorithm)。 著名计算机科学家沃思(Nikiklaus Wirth)提出了一个程序公式:
程序 = 数据结构 + 算法
其中算法是一个程序的灵魂,直到今天,这个公式对于过程化程序来说依然是适用的。
算法有三种种较为常用的表示方法:伪代码法、N-S结构化流程图和流程图法。在以后的学习中,本书较多地用到了流程图这种描述方法。
1
博学谷——让IT教学更简单,让IT学习更有效
3.1.2 流程图
流程图是描述问题处理步骤的一种常用图形工具,它是由一些图框和流程线组成的。使用流程图描述问题的处理步骤形象直观、便于阅读。画流程图时必须按照功能选用相应的流程图符号,常用的流程图符号如图3-1所示。
起止框输入/输出框判断框处理框
流程线连接点
图3-1 流程图符号
图3-1所示的流程图符号中,列举了四个图框、一个流程线和一个连接点,具体说明如下: ? 起止框用于表示流程的开始或结束;
? 输入/输出框用平行四边形表示,在平行四边形内可以写明输入或输出的内容;
? 判断框用菱形表示,它的作用是对条件进行判断,根据条件是否成立来决定如何执行后续
的操作;
? 处理框用矩形表示,它代表程序中的处理功能,如算术运算和赋值等;
? 流程线用实心单向箭头或直线表示,可以连接不同位置的图框,流程线的标准流向是从左
到右和从上到下,可用直线表示,非标准流向的流程线应使用箭头指示方向; ? 连接点用圆形表示,用于流程图的延续。
通过上面的讲解,读者对流程图符号有了简单的认识,接下来先来看一个简单的流程图,如图3-2所示。
2
博学谷——让IT教学更简单,让IT学习更有效
结束结束输入三个不同变量输入三个不同变量x,y,z x,y,z 的值的值YesYes判断判断x>yx>y是否成立是否成立NoNo判断判断y>zy>z是否成立是否成立判断判断x>zx>z是否成立是否成立YesYes最小数最小数是是zzNoNoYesYes最小数最小数是是yy最小数最小数是是zzNoNo最小数是x输出输出结束结束
图3-2 求三个数中的最小值
图3-2表示的是一个求三个数中的最小值的流程图,下面针对该流程图中的执行顺序进行说明,具体如下:
第1步:程序开始;
第2步:进入输入/输出框,输入三个变量值x,y,z;
第3步:进入判断框,判断x>y是否成立,如果是成立,则进入左边的判断框,继续判断y>z
是否成立;否则进入右边的判断框,判断x>z是否成立;
第4步:进入下一层判断框。如果进入的是左边的判断框,判断y>z是否成立,如果成立,则进入左边的处理框,得出最小值是z;如果不成立,则进入右边的处理框,得出最小值为y。 如果进入的是右边的判断框,则判断x>z是否成立,如果成立,则进入左边的处理框, 得出最小值是z;如果不成立,则进入右边的处理框,得出最小值是x。 第5步:进入输出框,输出结果; 第6步:进入结束框,程序运行结束。
学习画流程图可以有效的进行结构化程序设计,基本的流程结构有3种,即顺序结构、选择结构和循环结构。它们可以编写各种复杂程序。在接下来的小节中,将分别讲解这3种基本流程结构,而流程图可以更好的理解和学习这些流程结构语句。
3.2 C语言的基本语句
经过图3-2的流程分析,理清了思路,那么编程就是信手拈来,但是,再简单的程序也得一句一句的写出。如果把写程序和写小说类比,变量常量等可以看成是字和词,函数可以看成是一个段落,运算符等可以看作是字词的组合方式(规则),那么,字词组成的句子就是小说的最小独立单元,表达了一定的意思,同样,程序的最小独立单元也是“语句”,每个语句表达出完整的意义。小说中有感叹句、疑问句等。同样,程序中也有各种各样的语句。C语言的语句类型如图3-3所示。
3
博学谷——让IT教学更简单,让IT学习更有效
图3-3 C语言的语句类型
接下来针对图3-3中的几个语句作简单介绍,具体如下:
? 表达式语句:在各种表达式的后面加上一个分号,就构成了表达式语句;如a = 5;就是一
个赋值表达式语句。
? 空语句:仅有一个分号构成的语句就是空语句。
? 流程控制语句:在程序中完成特定的控制功能的语句就是流程控制语句。其分类如图3-3。 ? 块语句:用一对{}括起来的若干语句称为块语句,也叫作复合语句。
在这些语句中,最重要的是流程控制语句,它是编写程序要掌握的最基本也最重要的语句类型。 接下来的几个小节就陆续学习这几种流程控制语句。
3.3 顺序结构语句
前面章节讲解的程序都有一个共同的特点,即程序中的所有语句都是从上到下逐条执行的,这样的程序结构称为顺序结构。顺序结构是程序开发中最常见的一种结构,它可以包含多种语句,如变量的定义语句、输入输出语句、赋值语句等。顺序结构流程图如图3-4所示。
处理语句1处理语句2处理语句3
图3-4 顺序语句流程图
顺序结构语句中,语句从上至下一句一句的执行,是最简单的一种结构语句。接下来通过 打印“我爱C语言”这句话为例来讲解顺序结构语句,如例3-1所示。
例3-1
1 #include
printf(\我\\n\printf(\爱\\n\printf(\
4
博学谷——让IT教学更简单,让IT学习更有效
7 8 9 }
printf(\语\\n\printf(\言\\n\
运行结果如图3-5所示。
图3-5 运行结果
在例3-1中,使用了5个printf()语句,从上往下依次输出字符“我、爱、C、语、言”。从运行结果可以看出,程序是按照语句的先后顺序依次执行的,这就是一个顺序结构的程序。
3.4 选择结构语句
在实际生活中做什么事情都不是一帆风顺的,经常需要对一些情况做出判断,比如开车来到一个十字路口,这时需要对红绿灯进行判断,如果前面是红灯,就停车等候,如果是绿灯,就通行。同样,在C语言中也经常需要对一些条件做出判断,从而决定执行哪一段代码,这时就需要使用选择结构语句。选择结构语句又可分为if条件语句和switch条件语句,本节将对它们进行详细地讲解。
3.4.1 if条件语句
if条件语句有三种语法格式,每一种格式都有其自身的特点,我们分别来学习。 1、if语句——单分支结构
if语句是指如果满足某种条件,就进行相应的处理。例如,小明妈妈跟小明说“如果你考试得了100分,星期天就带你去游乐场玩”,这句话可以通过下面的一段伪代码来描述。
如果小明考试得了100分 妈妈星期天带小明去游乐场
在上面的伪代码中,“如果”相当于C语言中的关键字if,“小明考试得了100分”是判断条件,需要用()括起来,“妈妈星期天带小明去游乐场”是执行语句,需要放在{}中。修改后的伪代码如下:
if (小明考试得了100分) {
妈妈星期天带小明去游乐场 }
上面的例子描述了if语句的用法,在C语言中,if语句的具体语法格式如下:
if (判断条件) { }
代码块
上述语法格式中,判断条件的值只能是0或非0,若判断条件的值为0,按“假”处理,若判断
5