c语言(第三章)(上)

上传人:san****019 文档编号:70891735 上传时间:2019-01-18 格式:PPT 页数:48 大小:818.81KB
返回 下载 相关 举报
c语言(第三章)(上)_第1页
第1页 / 共48页
c语言(第三章)(上)_第2页
第2页 / 共48页
c语言(第三章)(上)_第3页
第3页 / 共48页
c语言(第三章)(上)_第4页
第4页 / 共48页
c语言(第三章)(上)_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《c语言(第三章)(上)》由会员分享,可在线阅读,更多相关《c语言(第三章)(上)(48页珍藏版)》请在金锄头文库上搜索。

1、第三章 C程序的流程控制,一、程序设计方法简述 1、计算机处理问题的过程,【例一】让某学生解方程 ax2+bx+c=0 求解过程:,分析问题 这是一个一元二次方程(代数问题,须中学代数知识) 确定处理方案 用求根公式 确定解题步骤 确定a、b、c的值 求出b2 -4ac的值 如果 b2 -4ac0(双实根) X1= X2= 如果 b2 -4ac=0(单实根) X1=X2= 如果 b2 -4ac0(双复根) X1= X2= 根据上述步骤计算 写出答案,整理、分析结果,一、程序设计方法简述 1、计算机处理问题的过程,2、编程要诀自顶向下,逐步求精 “先大纲,后文章” 如同写文章:分几部分每部分几个

2、问题每个问题几点 优点:不易顾此失彼;易于检查;减少后期修改工作量 对于面向过程的程序设计语言: 程序=数据结构+算法(做什么,如何做) 对比:文章=材料+构思,程序测试与修改,二、算法与流程图 1、算法(algorithm),算法:解题思路(解题步骤等) 算法有表示方式: 伪码(pseudocode) 用人类语言的形式(通常是英语)表示算法。 伪码不在计算机上执行,仅供程序员缩写程序之前构思时用(*注意伪码程序只包含执行语句,没有声明语句,后者仅仅是给编译器提供的信息) 流程图(flow chart) 用图示方式表示算法 编程依据(便于检查) 编程时用 使用流程图的优点:不易出错/便于编程/

3、便于别人阅读和检查程序。 通常编程的技术路线是: 用伪码和自顶向下、逐步求精的方法来制定算法,然后再编写相应的C语言程序。 复杂程序处理部分宜用流程图表示程序处理的过程。,1976年瑞士计算机科学家Niklaus Wirth在他的惊世之作中提出了一个著名的公式: 算法 + 数据结构 = 程序 算法两大要素: (1)操作 (2)控制结构 : 顺序结构、选择结构、 循环结构 算法的基本性质 有效性 确定性 有穷性,2、算法的描述工具 示例:根据学生成绩输出评定结果。,伪码语句示例之一 if students grades greater than or equal to 60 display ”

4、Passed” else display ”Failed”,伪码语句示例之二 如果学生成绩大于或等于60 显示”及格” 否则 显示 ”不及格”,C语言源程序段示例 if (grade=60) printf(“Passed!”); else printf(“Failed”);,二、算法的描述工具 1、传统流程图,特点: 直观形象; 使用流线。 缺点: 占面积大,使用流线任意转移,易出现“乱麻”现象,造成编程与阅读程序困难。,图3.2 常用的流程图标准化符号,(a)顺序结构,(b)选择结构,(c)重复结构,(a)一个三数中取大的算法,(b)另一个三数中取大的算法,图3.4 三数中取大算法的流程图描

5、述,2、N-S结构化流程图,77年美学者I.Nassi和B.Scheiderman提出。 特点 取消流线 不允许流程任意转移,只能从上而下顺序执行 规定三种基本结构的流程图单元,由这些基本结构象搭积木似的组成各种算法(结构化设计)。 优点 算法清晰,流程不会无规律乱转移。,S1,S2,S3,当P,S,(c)当型重复结构,(a)顺序结构,(b)选择结构,图3.6 用N-S图描述三种基本流程结构,与图3.4(a)、(b)流程图对应的N-S图。注意,空白的处理框表示没有操作。,(a)采用选择结构,(b)采用当型重复结构,图3.7 三数中取大算法的N-S图描述,3、伪代码,介于自然语言与计算机语言之间

6、的文字符号算法描述的工具。 无固定的、严格的语法规则 一般专业人员习惯用伪代码进行算法描述。,输入a,b,c; if(a=b) max=a; else max=b if(max=c) 输出max; else 输出c;,二、算法的描述工具 4、三种基本结构,通常情况下,程序中的语句是以所编写的顺序一句接一句地执行,这种执行方法称为“顺序执行”。许多C语句能够让程序员指定不按编写顺序执行下一条执行语句,这种执行方法称为“控制转移”。 Bohm和Jacopini的研究证实,所有的程序都能够只用三种控制结构编写,即 顺序结构 选择结构(selection structure) 循环结构(repetit

7、ion structure) 顺序结构是C语言的基本结构,除非指示转移,否则计算机自动以语句编写的顺序一句一句地执行C语句。 任何C语言程序都是由七种控制结构(顺序结构、三种选择结构和三种循环结构)构成的。,顺序结构 A块、B块顺序执行(每块代表一个或一组操作),选择结构 条件p成立时执行a块(否则执行b块) if 选择结构 条件为真时执行某个指定的操作,条件为假时跳过该操作(单路选择) ifelse选择结构 条件为真时执行某个指定的操作,为假时执行另一个指定的操作(双路选择) switch选择结构 根据表达式的值执行众多不同操作中的某个指定的操作(多路选择),循环结构 分当型和直到型两类。

8、当型 先判断,只要条件为真就反复执行A块,为假则结束循环。 直到型 先执行A块,再判断条件是否为真,为真则继续执行循环体,为假则结束循环。 C语言提供了三种循环结构,即while循环结构,dowhile循环结构和for循环结构。,三、判断,1 命题的“真”、“假”与C语言中的逻辑值 选择结构和循环结构流程的改变都由判断决定。 需根据判断决定选择,根据判断决定是否循环以及循环的结束。 判断是针对命题的“真”、“假”进行的。如,下面是一些命题: 今天下雨。 550。 abc,即ab 且bc。 ab 或cb。 如果a不能被b整除。 命题的值都只能是一个逻辑(布尔)值:“真”或“假”。 早期C语言不提

9、供专门的逻辑(布尔)类型,规定用非0值表示“真”,用0值表示“假”。 表达式,只要值为非0(包括负数),就说明其为“真”;只要其值为0,就说明其为“假”。从而给判断带来很大的灵活性。 在C99中,增加了_Bool类型,并增加了头文件,在其中定义了宏bool、true和false,用true存储1,用false存储0。,2.关系运算符 (1)C语言的关系运算符 (大于) = (大于或等于) = (等于) != (不等于) 注意:由两个字符组成的运算符之间不可以加空格,如:=就不能写成: = 。,(2)关系运算符是双目运算符,具有自左至右的结合性。 例如: a+bc+d 应理解为 : (a+b)(

10、c+d),六种运算符: , =, =, !=,以上运算符中,前四种关系运算符(, =)的优先级别相同;后两种(=, !=)优先级相同;且前四种级别高于后两种。,关系运算符、算术运算符和赋值运算符之间,优先级的次序是: 算术运算符优先级最高 关系运算符次之, 赋值预算符最低。,3.关系表达式及关系表达式的值 (1)由关系运算符组成的表达式,称为关系表达式。 关系运算符两边的运算对象可以是C语言中任意合法的表达式或基本数据类型。 如:a=b、(a=3)(b=4)、54=3等都是合法的关系表达式。,(2)关系表达式的结果是一个整数值:0或者1(非零)。,(3)当关系运算符两边的值类型不一致时,若一边

11、是整型,一边是实型,系统将自动把整型数转换为实型数,然后进行比较。,例如: 有: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中是允许的。 整个关系表达式的值为多少? (2)关系表达式的值是整型数0或1,可以看成是一种整型表达式。 如,若有: int i=1, j=7,a; a=i+(j%4!=0); 则a的值为? (3)字符在关系表达式中出现按照

12、其ASCII值参与运算: 如:aA b=B-32的值分别为? (4)避免对两个实数表达式作“相等”或“不相等”的判别, 考虑用其差绝对值之差小于一个很小的值的形式: 如: fabs (1.0/3.0* 3.0-1.0)1e-5 (5)表示x在区间a,b中,使用a=x & x=b 例如: -10=x & x=10 若使用:-10x10。 若x=10,结果为? 若x=100,结果为? 若x=-100,结果为?,4.逻辑运算符及逻辑表达式,(1)C语言中的逻辑运算符 & 逻辑与 | 逻辑或 ! 逻辑非 其中,& 和 | 运算符是双目运算符, 如: (ab)&(xy)。 ! 运算符是单目运算符,应出现

13、在运算对象的左边 如: !(ab)。,(a)逻辑“与”,(b)逻辑“或”,(c)逻辑“非”,4.逻辑运算符及逻辑表达式,(2)C语言中的逻辑运算符优先级和结合性 优先级高低: ! (逻辑非)级别最高, &(逻辑与)次之, |(逻辑或)最低。 逻辑运算符与赋值运算、算术运算、关系运算符之间从高到低的运算优先次序(由高到低)是: !(逻辑非)、算术运算、关系运算、&(逻辑与) 、|(逻辑或)、赋值运算。 结合性: &和|是二元运算符,结合方向为自左至右; !为一元运算符, 结合方向为自右至左。,(3)逻辑表达式和逻辑表示式的值,由逻辑运算符和运算对象所组成的表达式称为逻辑表示式。 逻辑表达式的运算

14、结果或者为1(”真”),或者为0(”假”)。 例如:在关系表达式(xy)为真的条件下: 若a为10,b为16,表达式(ab)&(xy)的值则为”假”,输出0值; 若a为10,b为6,表达式(ab)&(xy)的值则为”真”,输出1值。,逻辑表达式中的运算规则,例 a=4;b=5; !a a&b a|b !a|b 4&0|2 53&2|84-!0 c&d,值为1,值为0,值为1,值为1,值为1,值为1,/(53)&2|(8(4-(!0) 值为1, 逻辑运算中有很多有趣的规律。由 运算后a和b的值分别为? 诸如此类关于表达式的值的规律有如下一些,这些规律,能使复杂的逻辑运算简化、清晰: 0|a=a

15、1&a=a 1|a=1 0&a=0 a|!a=1 0&!a=0 以及 a|a=a a&a=a !(a|b)=!a&!b !(a&b)=!a|!b !(!a)=a,四、选择结构程序设计 1、if语句(三种形式),if(表达式) 语句; (p73),if(表达式) (p72) 语句1; else 语句2;,if(表达式1) (p75-76) 语句1; else if(表达式2) 语句2; else if(表达式n) 语句n; else 语句n+1;,1、if语句 示例,【例一】以下程序 设有任意数x,它的绝对值为 判断内容:x0是否成立。 两路分支:x=x (当x0) ; x= -x (当x0 ) double abstr (double x) if (x0.0) x=-x; else x=x; return (x); ,/*求一个数的绝对值*/,可以改写为: double abstr (double x) if (x0.0) x=-x; return (x); ,四、选择结构程序设计 1、if语句 示例,【例二】以下程序的作用是什么? main( ) char c; printf(“Input :”); scanf(“%c”

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

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

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