《第三章C语言的流程控制1资料》由会员分享,可在线阅读,更多相关《第三章C语言的流程控制1资料(7页珍藏版)》请在金锄头文库上搜索。
1、1 授课题目授课题目 C C 语言的流程控制(语言的流程控制(1 1) 授课类型授课类型讲授 首次授课时间首次授课时间学时学时2 课时 教学目标教学目标 1、 了解算法的有关知识。 2、 掌握 C 语言中的关系运算符和关系运算。 3、 掌握 C 语言中的逻辑运算符和逻辑运算。 4、 掌握 C 语言中的基本语句 重点与难点重点与难点 难点:算法的有关知识 重点:关系运算符与关系运算,逻辑运算符与逻辑运算,C 语言中的基 本语句 教学手段与方法教学手段与方法多媒体、讲解、演示、案例、启发 教学过程教学过程: (包括授课思路包括授课思路、过程设计过程设计、讲解要点及讲解要点及各部分各部分具体具体内容
2、内容、时间分配时间分配 等等) 一、一、 算法算法 通过前两章的学习可以看出, 计算机尽管可以完成许多极其复杂的工作, 但实质上这些 工作都是按照人事先编好的程序的规定进行的。 所以人们常把程序称为计算机的灵魂。 随着 计算机应用的日益广泛和深入,人们在研究和开发新的软、硬件技术的同时,也对程序本身 和程序设计方法进行了深入的探讨。1976 年瑞士计算机科学家 Niklaus Wirth 在他的惊世 之作中提出了一个著名的公式: 算法 + 数据结构 = 程序 他认为, “程序就是在数据的某些特定表示方式和结构的基础上对抽象算法的具体表 述” 。Wirth 企图用这个公式来对程序进行一个概括性的
3、定义。从今天的观点来看,它只能 是对过程化程序的一个抽象定义, 对面向对象的程序而言则不尽然。 不过对学习 C 语言这样 的面向过程的程序设计语言而言,是完全适用的。也就是说,面向过程的程序有两大要素: 算法和数据结构。 数据结构是程序所处理的对象数据的表示和组织形式。 数据类型就是 其重要内容。关于数据结构的概念在学习完第 5、6、7 章后,才会有较深的体验。 3.1.1算法的组成要素与基本性质 算法是程序设计的精髓,程序设计的实质就是构造解决问题的算法,并将其解释为程 序设计语言。 1、算法含有两大要素: (1)操作 算法是由一系列操作组成的。 每个操作的确定不仅取决于问题的需求, 还取决
4、于它们取 自哪个操作集,它与使用的工具系统有关。在高级语言中所描述的操作主要包括:算术运算 (+、-、*、/)、逻辑运算(“与” 、 “或” 、 “非”等)、关系运算(=、=、=、!= 等)、函数运算、位运算、I/O 操作等。计算机算法是由这些操作所组成的。 (2)控制结构 算法的另一要素是其控制结构。每一个算法都要由一系列的操作组成。同一操作序列, 按不同的顺序执行, 就会得出不同的结果。 控制结构即如何控制组成算法的各操作的执行顺 序。结构化程序设计方法要求:一个程序只能由三种基本控制结构(或由它们派生出来的结 构)组成。1966 年 Bohm 和 Jacopini 证明,由这三种基本结构
5、可以组成任何结构的算法,解 决任何问题。这三种基本结构是: 1) 顺序结构。 2) 选择结构。 3) 循环结构(或称重复结构)。 2 2. 算法的基本性质 简单地说,算法就是进行操作的方法和操作步骤。计算机程序是用某种程序 设计语言描述的解题算法。通常认为算法有如下一些性质: (1)有效性 有效性指算法所规定的操作都应当是能够有效执行的。例如,对于操作汽车 的算法,有效的操作就是加速、刹车、换档、转动方向盘、鸣笛等,要让汽车执 行“跳起”就是无效的操作。同样,一个计算机算法必须是计算机能够执行的。 (2)确定性 确定性具有两重意义:一是所描述的操作应当具有明确的意义,不应当有歧 义性。例如,不
6、能发出这样的操作指令: “执行一个算术操作” 。因为它既没有指 出算术操作的类型,也没有指出操作数。 确定性的另一重意义: 1)操作作序列只有一个初始动作,序列中每一动作仅有一个后继动作; 2)序列终止表示问题得到解答或问题没有解答,不能没有任何结论。 3)有穷性 有穷性指算法所规定的操作序列必须在允许的时间内结束。例如,一个计算 机算法要执行 100 年以上,就失去有穷性。 3.1.2算法描述工具 为了描述算法,人们创建了许多算法描述工具。下面介绍程序设计中常用的 几种方法,并主要介绍如何用这些工具描述算法的三种基本结构。 1. 流程图 流程图是一种流传很广的算法描述工具。 这种工具的特点是
7、用一些图框表示 各种类型的操作,用线表示这些操作的执行顺序。我国国家标准 GB 152689 中推荐的一套流程图标准化符号,它与国际标准化组织 ISO(International Standard Organization)提出的 ISO 流程图符号是一致的。图 3.2 为其中常用的 一些符号。 过程判断数据预定义 起止流程线连接注释 图 3.2常用的流程图标准化符号 2、图 3.3(a)、(b)、(c)中的虚线框,分别为用流程图表示的三种基本流程控制 结构。这三种基本结构有一个明显的特征:单入口和单出口。从整体上看都相当 于一个处理框。用它们所组成的程序来龙去脉十分清晰。 3 2. N-S
8、图描述 灵活的流线是程序中隐藏错误的祸根。针对这一弊病,1973 年美国学者 I. Nassi 和 B. Shneiderman 提出了一种无流线的流程图,称为 N-S 图。它的三种 基本结构如图 3.6 所示。 N-S 图的每一种基本结构都是一个矩形框,整个算法可以像堆积木一样堆 成。 由于 N-S 图中没有了流线,所以绝对不会出现由于乱用流线造成的 BS 算法 结构。 (a)顺序结构(b)选择结构(c)当型重复结构 图 3.6用 N-S 图描述三种基本流程结构 3. 伪代码 伪代码(pseudo code)是用介于自然语言与计算机语言之间的文字符号算法 描述的工具。它无固定的、严格的语法规
9、则,通常是借助某种高级语言的控制结 构,中间的操作可以用自然语言(如中文或英文),也可以用程序设计语言,或使 用自然语言与程序设计语言的混合体。一般专业人员习惯用伪代码进行算法描 述。 下面是与图 3.7 相对应的三数中取大算法的伪代码描述。 (1)与图 3.7(a)相对应的三数中取大算法的伪代码描述: 输入 a,b,c; if(a=b) max=a; else max=b if(max=c) 输出 max; else 输出 c; (2)与图 3.7(b)相对应的三数中取大算法的伪代码描述: 初始化:mac=0,i=1; 4 当(i=max) max=n; ) 输出 max; (3)与图 3.
10、7(b)相对应的三数中取大算法的伪代码描述: 初始化:mac=0,i=1; ( 输入 n; i+; if(n=max) max=n; ) 直到(i3) 输出 max; 3.23.2 判断判断 3.2.1 命题的“真” 、 “假”与 C 语言中的逻辑值 不论是选择结构,还是循环结构,流程的改变都是由判断决定的。即需要根 据判断决定选择,根据判断决定是否循环以及循环的结束。通常,判断是针对命 题的“真” 、 “假”进行的。例如,下面是一些命题: (行驶中)前面的交通信号灯是红色的。 今天下雨。 ab。 abc,即 ab 且 bc。 ab 或 cb。 如果 a 不能被 b 整除。 这些命题的值都只能
11、是一个逻辑(布尔)值: “真”或“假” 。 在 C99 中,增加了_Bool 类型,并增加了头文件,在其中定义 了宏 bool、true 和 false,用 true 存储 1,用 false 存储 0。 3.2.2 关系运算与关系表达式 关系表达式和逻辑表达式是 C 语言中描述命题的两种基本形式。 1. C 语言的关系运算符 关系运算是指对两个表达式值的大小比较。C 语言中提供有如下 6 个关系运 算符: (大于)=(大于或等于) (小于) =(小于或等于)=(等于)!=(不等于) 后两个(=和!=)的优先级小于前 4 个,但它们都低于纯算术类,高于赋值类, 并且它们结合方式都是从左向右的。
12、例如: a+bc+d应理解为(a+b)(c+d) 2. 关系运算符的值 关系表达式的值只有两个:关系表达式成立,即为“真” (通常为 1) ;关系 表达式不成立,即为“假”(0)。例如对于声明: 5 int x=2, y=3,z; 表达式x=y的值为 0。 而表达式xy的值为 1。 那么表达式z=3-1=x+1=y+2的值呢? 在这个表达式中有赋值、关系、算术三种运算。 先进行算术运算得z=2=3=5, 然后计算 2=3,其值为 0(假) ,得 z=0=5, 再计算 0=5,值为 1(真) ,故有 z 的值为 1。 注意:注意: (1)表达式 5278 在数学上是不允许的,而在 C 中是允许的
13、。按自左而右 的结合求解: 52 值为 1; 17 值为 0; 08 的值为 0。 即整个关系表达式的值为 0。 (2)由于关系表达式的值是整型数 0 或 1,故也可以将其看成是一种整型表达 式。例如,若有: int i=1, j=7,a; a=i+(j%4!=0); 由于 j%4 的值为 3,而 3!=0 的值为 1(真),故 a 的值为 2。但这种表达式的 含义不易被理解,初学时不宜多用。 (3)字符数据的比较按期 ASCII 码值进行。例如: a0其值为 1(真)A100 的值为 0(假) (4)在判定两个浮点数是否相等时,由于存储上的误差,会得出错误的结果。 例如: 1.0/3.0*3
14、.0=1.0,在数学上显然应该是一个恒等式,但由于 1.0/3.0 得到的值的有效位数是有限的,并不等于 0.3333333333333,因此上面关系表 达式的值为 0(假),并不为 1(真)。所以应避免对两个实数表达式作“相等”或 “不相等”的判别。上式可改写为: fabs (1.0/3.0* 3.0-1.0)1e-5,其中 fabs 是求绝对值函数。 只要 1.0/3.0 与 1.0 之间的差小于 10-5(或一个其它的很 小的数),就认为 1.0/3.0*3.0 与 1.0 相等。 (5)要表示 x 在区间a,b中,在数学中使用表达式 axb。但在 C 语言中 使用表达式“a=x=b”会
15、与原来的意义不同。假设 a=0;b=0.5。若 x=0.3,则 执行 a=x=b 时先求出“a=x”的值得 1(真),再计算“1=b”得 0(假)。 因此,为了判别 x 是否在a,b范围内,应写成: a=x char ch15; void fun(int n); 注意: 在函数体或复合语句中,声明语句必须写在其他语句的前面。 2、表达式语句 表达式语句是由表达式加上分号组成,其一般形式为: (1)运算符表达式语句 k+;x+=10;5+6; 执行运算符表达式语句就是计算表达式的值 (2)函数调用表达式语句 函数名(实际参数表) ; printf(“ave=%.2fn”,ave); 7 3、复合
16、语句 把多个单一语句用花括号括起来便组成一个复合语句, 复合语句在语法上相 当于一条语句。复合语句的形式为 内部数据描述语句 数据操作语句 1; 数据操作语句 n; 注意:复合语句内的各条语句都必须以分号结尾,在外不能加分号。 4、空语句 仅仅有分号组成的语句,空语句是什么也不执行的语句,在程序中空语句长 用来做空循环体。 5、流程控制语句 控制语句用于控制程序的流程,它们由特定的语句定义符组成。 (1)条件判断语句 ifswitch (2)循环执行语句 forwhiledowhile (3)流程转向语句 breakgotocontinuereturn 课堂小结课堂小结 思考题、讨论题、作业思考题、讨论题、作业 教学后记教学后记