C语言程序设计新视角 教学课件 ppt 作者 周幸妮 全书教案_ 第3章

上传人:E**** 文档编号:89373297 上传时间:2019-05-24 格式:PPT 页数:235 大小:1.20MB
返回 下载 相关 举报
C语言程序设计新视角 教学课件 ppt 作者 周幸妮 全书教案_ 第3章_第1页
第1页 / 共235页
C语言程序设计新视角 教学课件 ppt 作者 周幸妮 全书教案_ 第3章_第2页
第2页 / 共235页
C语言程序设计新视角 教学课件 ppt 作者 周幸妮 全书教案_ 第3章_第3页
第3页 / 共235页
C语言程序设计新视角 教学课件 ppt 作者 周幸妮 全书教案_ 第3章_第4页
第4页 / 共235页
C语言程序设计新视角 教学课件 ppt 作者 周幸妮 全书教案_ 第3章_第5页
第5页 / 共235页
点击查看更多>>
资源描述

《C语言程序设计新视角 教学课件 ppt 作者 周幸妮 全书教案_ 第3章》由会员分享,可在线阅读,更多相关《C语言程序设计新视角 教学课件 ppt 作者 周幸妮 全书教案_ 第3章(235页珍藏版)》请在金锄头文库上搜索。

1、第3章 程 序 语 句,3.1 程序的语句与结构 3.2 顺序结构 3.3 选择结构 3.4 循环结构 3.5 本章小结,【主要内容】 基本程序语句; 同类程序语句的特点、相互间的联系、选用条件等; 流程图分析程序的效率训练; 自顶向下算法设计的训练; 读程序的训练; 语句调试要点的介绍。,【学习目标】 掌握用基本语句进行顺序、选择和循环结构程序设计的方法; 掌握表达式语句的格式,理解表达式与表达式语句的区别; 掌握C语言的基本控制结构和基本控制语句的使用方法; 掌握简单的程序调试方法; 了解测试用例选取方法。,1C程序语句类型 从程序流程的角度来看,程序可以分为三种基本结构,即顺序结构、分支

2、(选择)结构和循环结构。这三种基本结构可以组成所有的复杂程序。C语言提供了多种语句来实现这些程序结构。C程序的执行部分是由语句组成的,程序的功能也是由执行语句实现的。C语句可分为如表3.1所示的几类。,3.1 程序的语句与结构,表3.1 C程序语句类型,2C程序的构成 顺序结构、分支结构和循环结构可以相互嵌套,在循环中可以有分支、顺序结构,分支中也可以有循环、顺序结构。不管哪种结构,我们均可广义地把它们看成一个语句。在实际编程过程中常将这三种结构相互结合以实现各种算法,设计出相应程序。 当要编程处理的问题较大时,编写出的程序就往往很长、结构重复多,造成可读性差,难以理解,解决这个问题的方法是将

3、C程序设计成模块化结构。所谓模块化程序结构,就是把较长的、复杂的C程序分为若干模块,,每个模块都编写成一个C函数,然后通过主函数调用函数及函数调用函数来实现一大型问题的C程序编写,因此可以说: C程序=主函数+子函数 从程序的模块化结构来看,C程序由函数组成,必须有一个主函数,可以有0个到多个子函数,具体格式参见表3.2。,表3.2 C程序的构成,顺序结构的执行流程如图3.1所示,当A执行完后,无条件地执行B。语句按照书写的顺序由上至下逐条执行。,3.2 顺 序 结 构,图3.1 顺序结构的流程,【例3-1】 顺序结构程序的例子。从键盘输入4位学生的学号和英语考试成绩,打印这4人的学号和成绩,

4、最后输出4人的英语平均成绩。 1 /*顺序结构程序的例子*/ 2 #include 3 int main( ) 4 5 int number1,number2, number3, number4; /* 设4个学号 */,6 float grade1, grade2, grade3, grade4; /* 设4个成绩 */ 7 float ave; /* 平均成绩 */ 8 9 printf(“input number:n “); /* 提示 */ 10 /* 输入4个学号 */ 11 scanf(“%d%d%d%d“,12 printf(“input grader:n “);/* 提示 */

5、 13 /* 输入4个成绩 */ 14 scanf(“%f%f%f%f“,18 printf(“%d: %fn “, number2, grade2); 19 printf(“%d: %fn “, number3, grade3); 20 printf(“%d: %fn “, number4, grade4); 21 printf(“average=%fn “, ave); 22 return 0; 23 ,程序结果: input number: 1 2 3 4 input grader: 86 92 75 64 1: 86.000000 2: 92.000000 3: 75.000000 4

6、: 64.000000 average=86.000000,可以看到,这个程序中,重复的类似变量和语句比较多,在后续的章节中可以看到改进的处理方法。,对于选择程序结构,先判断给定的条件,再根据判断的结果来控制程序的流程。C有三种形式的条件语句,如表3.3所示。,3.3 选 择 结 构,表3.3 C 条 件 语 句,3.3.1 二选一结构if 语句 if语句有单路选择和双路选择两种基本形式,其对应的执行流程如图3.2所示。,图3.2 选择结构执行流程,1单路选择的if语句 (1) 基本格式: if(表达式)语句A; (2) 执行过程:执行if语句时,首先计算紧跟在if后面一对圆括号中的表达式的值

7、。如果表达式的值为非零(“真”),则执行其后的if子句,然后执行if语句后面的下一条语句;如果表达式的值为零(“假”),则跳过if子句,直接执行if语句后面的下一条语句。,2双路选择的if语句 (1) 基本格式: if(表达式) 语句A; else语句B; (2) 执行过程:执行if-else语句时,首先计算紧跟在if后面一对圆括号内表达式的值。如果表达式的值为非零(“真”),则执行if子句,然后跳过else子句,去执行if-else语句之后的下一条;如果表达式的值为零(“假”),则跳过if子句,会执行else子句,执行完之后接着执行if-else语句之后的下一条语句。,说明: (1) 图3.

8、2中的语句A、B既可以是一条语句,也可以是复合语句。以后各种C语句的语法中凡出现“语句”的地方,其含义都相同。 (2) 图3.2中的表达式,理论上是条件或逻辑表达式,其结果为“真”或“假”。 【例3-2】 if语句的例子1。用if语句实现表3.4的功能。,表3.4 y与x的关系式1,【解】 if (x2) y=1; else y=2; 【例3-3】 if语句的例子2。用if语句实现表3.5的功能。,表3.5 y与x的关系式1,【解法一】 if (x=0 程序的执行过程是怎样的呢? 直接读程序是不大容易看得清楚的,画出流程图就一目了然了,见图3.3。,图3.3 例3-3方法1,从流程图3.3中,

9、我们可以发现什么问题呢? (1) 若x满足0x2,则在第一次遇到的条件判断中为真,得到结果y=0,后面再判断x2和判断x0就是多余做的工作了。 (2) 若x满足x2,则判断x0就是多余做的工作了。 由此,我们可以对此程序得出评价可读性好,效率不高。,【解法二】 由方法1改进后的流程如图3.4所示。 if (x=0) ,图3.4 例3-3方法2,改进后的程序同方法一相比,能看出x和y的关系吗? 答:是不太容易看清楚,也就是说,此程序的可读性不好。那是不是有程序又清晰,执行效率又高的方法呢?我们看一下解法三。,图3.5 例3-3方法3,【解法三】 由方法2改进后的流程如图3.5所示。 改进后的效果

10、依然是从流程图3.5看起来比较直观,对应程序如下: y=0; if (x2) y=1; else if (x0) y=2; 到此,程序可读性好、执行效率高的目标就达到了。,相对于程序语句,流程图可以帮助我们更直观清晰地观察程序的执行状况。 下面举例说明嵌套的if-else语句中的对应规则。 实例1: if ( ) if ( ) 语句1; else 语句2; 实例2: if ( ), if ( ) 语句1; else 语句2; 在上面的两个嵌套的条件语句if-else实例中,else和哪个if配对,都有两种可能性。为了避免二义性,C语言中有相应的规则。,对于实例2,哪个if算是与else最近呢?

11、从语法上看, 中的内容是复合语句,应该是第一个if后语法上要求的语句,即属于这个if的一部分,所以else应该和第一个if匹配。 注:复合语句是用 括起来的一组语句。 if语句的嵌套结构中,else总是与最近的if匹配的。 【例3-4】 if语句的例子3。求a、b、c三个整数中最大者(a、b、c的值通过键盘输入)。,我们在第1章中已经介绍了设计算法的一般步骤,首先分析一下要处理的数据a、b、c之间可能的关系,可以有表3.6所示的情形。,表3.6 例3-4数据分析 按照设计算法的第一个步骤,应该选择上述第一种情形来设计处理的流程,待算法设计完毕,再去测试数据的特殊情形和临界状态,如果有问题,再进

12、行修改。 【解法一】 根据题目的要求,可以给出相应的顶部伪代码以及细化的伪代码,如表3.7表3.9所示。,表3.7 例3-4方法一伪代码1,表3.8 例3-4方法一伪代码2,表3.9 例3-4方法一伪代码3,图3.6 例3-4方法一流程图,表3.10 例3-4特例情形测试用例,测试样例验证通过后,根据第二步细化结果或流程图就可以编程了,程序如下: 1 /*求出整数a、b、c三者中大者,放入max*/ 2 #include 3 int main() 4 5 int a, b, c, max; 6,7 scanf(“%d,%d,%d“, 13 ,14 else 15 16 max=c; /*max

13、取a、c中的大者*/ 17 18 19 else 20 21 if (bc) 22 ,23 max=b; 24 25 else 26 27 max=c; /*max取b、c中的大者*/ 28 29 30 printf(“max=%d“, max); /*输出结果*/,31 return 0; 32 成对括号,成对输入。 上机练习输入程序时,括号的输入,最好养成一次输入一对的习惯,如main() ,然后在 中输入程序语句。这样做的好处是在程序较长时,也不会有忘记配对括号的输入问题。输入时丢括号,也是初学者经常会犯的编译错误,往往要花大量的时间还不容易找到错误,这也是因为编译错误提示得并不明确。,

14、【解法二】 方法一中,既然max记录最大值,则可以在a与b的比较时就使用它,改进的伪代码如表3.11所示,对应的流程如图3.7所示。 表3.11 例3-4方法二伪代码,图3.7 例3-4方法二流程图,根据图3.7所示的流程,对应条件ab的二选一语句很容易写出来: if (ab) max=a; else max=b; 对应条件maxc的二选一语句,写的时候会有如下问题。 实现情形一: if (maxc) printf(); else max=c; printf();,这种情形只有一个输出与流程不完全对应。 实现情形二: if (maxc) max=max; else max=c; printf(

15、); 其中的max=max语句实属多余。 怎么让程序与流程图完全对应起来呢? 实现情形三:把流程中的maxc。 if ( max c) max=c;,printf() 【解法三】 用条件表达式: max=(ab)? a : b; max=(maxc)? max : c; 评价:此法简洁而清晰。,3.3.2 多选一结构swich语句 在实际应用中,要在多种情况中选择一种情况,执行某一部分语句,当然可以使用嵌套的if或if else if语句来处理,但其分支过多,程序冗长、难读且不够灵巧。 【例3-5】 多选一的例子。输入百分制成绩score,转换成相应的五分制成绩grade并输出。分数和等级的对应关系见表3.12。,表3.12 成 绩 转 换 表,用if语句实现的方法如下: 1 #include 2 int main() 3 4 int score; 5 printf(“Please input score: “); 6 scanf(“%d“, /*输入成绩*/ 7 if ( score100 | score 0 ),8

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号