C程序语言课件:第5章 选择控制结构_第1页
C程序语言课件:第5章 选择控制结构_第2页
C程序语言课件:第5章 选择控制结构_第3页
C程序语言课件:第5章 选择控制结构_第4页
C程序语言课件:第5章 选择控制结构_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第5章 选择控制结构本章学习内容 算法的描述方法 用于单分支控制的if语句 用于双分支控制的if-else语句 用于多路选择的switch语句 break语句在switch语句中的作用 关系运算符 条件运算符 逻辑运算符分治策略(Divide and Conquer Strategy )Problem: 准备早餐( Prepare a Breakfast)1.Start2.准备早餐3.End5.1生活中与计算机中的问题求解 (Problem Solving Process)1. Start2. 准备早餐 2.1 准备一个金枪鱼三明治 2.2 准备一些薯条 2.3 冲一杯咖啡3. End分治策略

2、(Divide and Conquer Strategy )1. Start2.准备早餐 2.1 准备一个金枪鱼三明治 2.1.1 拿来两片面包 2.1.2 准备一些金枪鱼酱 2.2 准备一些薯条 2.3 冲一杯咖啡3. End分治策略(Divide and Conquer Strategy )1. Start2.准备早餐 2.1 准备一个金枪鱼三明治 2.1.1 拿来两片面包 2.1.2 准备一些金枪鱼酱 2.2 准备一些薯条 2.2.1 将土豆切成条 2.2.2 油炸这些土豆条 2.3 冲一杯咖啡3. End分治策略(Divide and Conquer Strategy )分治策略( D

3、ivide and Conquer Strategy )1. Start2.准备早餐 2.1 准备一个金枪鱼三明治 2.1.1 拿来两片面包 2.1.2 准备一些金枪鱼酱 2.2 准备一些薯条 2.2.1 将土豆切成条 2.2.2 油炸这些土豆条 2.3 冲一杯咖啡 2.3.1 烧些开水放入杯中 2.3.2 在水杯中加入一些咖啡和糖3. End5.2算法的概念及其描述方法面向对象程序 = 对象 + 消息面向过程的程序 = 数据结构 + 算法计算机中的算法( Algorithm )为解决一个具体问题而采取的、确定的、有限的操作步骤,仅指计算机能执行的算法A specific and step-b

4、y-step set of instructions for carrying out a procedure or solving a problem, usually with the requirement that the procedure terminate at some point5.2算法的概念及其描述方法算法的特性有穷性在合理的时间内完成确定性,无歧义 如果x0,则输出Yes;如果x0,则输出No有效性 能有效执行负数开平方没有输入或有多个输入 有一个或多个输出 5.2算法的概念及其描述方法算法的描述方法自然语言描述传统流程图(Flowchart)在1966年,Bohra

5、与 Jacopini 提出N-S结构化流程图1973年,美国学者I.Nassi 和 B.Shneiderman 提出伪码(Pseudocode)表示流程图(Flowchart)Flowchart represents algorithm graphically.Start/EndSymbolSemanticProcessInput/OutputTestConnectorFlow of activities计算机中的问题求解过程Example :买苹果,计算价钱Calculate and display the price of a number of apples if the quantit

6、y in kg and price per kg are given. quantity pricePerkgpriceprice = quantity * pricePerkgInputProcessOutputFirst identify the input and output of the problem.顺序结构( Sequence Structure)给变量赋值赋值表达式语句 赋值表达式 ; price = quantity*pricePerkg;输入输出数据标准库函数调用语句 scanf(%d, &quantity); scanf(%d, &pricePerkg); printf

7、(%d, price);ABC【例5.1】计算两整数的最大值 num1 num2max?InputProcessOutputif - elseSingle SelectionDouble SelectionMultiple Selectionifif - else - if选择结构(分支结构) (Selection Structure)5.3关系运算符与关系表达式Relational OperationDescriptionExamples of ExpressionValueLess than6 91 (true)=Less than or equal to5 Greater than2 6

8、0 (false)=Greater than or equal to9 = 51 (true)=Equal to7 = 50 (false)!=Not equal to6 != 51 (true)5.4用于单分支控制的条件语句(Single Selection)Step aconditionStep mStep nStep xtruefalsestep aconditionstep mstep nstep btruefalsePseudocode Structurestep aif startstep mstep nend_ifstep bif StatementThe structure i

9、s similar to single selection (flowchart)Syntax:if (expression)statement;orif (expression) statement1;statement2; 复合语句compound statement被当作一条语句看待表达式非0为真if StatementThe structure is similar to single selection (flowchart)Syntax:if (expression)statement;orif (expression) statement1;statement2; Dont fo

10、rget the braces !Dont forget the parentheses !#include main() int a, b, max; printf(Input a,b:); scanf(%d,%d, &a, &b); if (a b)max = a; if (a = b)max = b; printf(max = %dn, max);Input a,b: _Input a,b: 20 15_Input a,b: 20 15max = 20_【例5.1】计算两整数的最大值 Pseudocode StructureStep aif startStep mStep nend_if

11、else startStep xStep yend_elseStep zStep aconditionStep mStep nStep ztruefalseStep xStep yStep aconditionStep mStep nStep ztruefalseStep xStep y5.5用于双分支控制的条件语句( Double Selection)if - else StatementThe structure is similar to double selection (flowchart)Syntax:if (expression) statement1;else statemen

12、t2;or if (expression) statement1; statement3; else statement2; statement4; NoYesFlowchart: Calculate the MaximumInput a and bOutput maxa b?max bmax aStartEnd【例5.2】计算两整数的最大值 scanf(%d,%d, &a, &b);if (a b) max = a;else max = b;Turn Flowchart to C ProgramNoYesInput a and bOutput maxa b?max bmax aStartEn

13、d【例5.2】计算两整数的最大值 printf(max = %dn, max);#include main() int a, b, max; printf(Input a, b:); scanf(%d,%d, &a, &b); if (a b) max = a; else max = b; printf(max = %d, max); if (a b) max = a; if (a = b) max = b;【例5.2】计算两整数的最大值 #include main() int a, b, max; printf(Input a, b:); scanf(%d,%d, &a, &b); if (

14、a b) max = a; else max = b; printf(max = %d, max); max = a b ? a : b;表达式1 ? 表达式2 : 表达式35.6条件运算符和条件表达式【例5.3】5.7用于多分支控制的条件语句(Multiple Selection)Multi-way ifStep aif (expression1)Step m if (expression2) Step n Step zStep aexpression1Step mStep nStep ztruefalseexpression2truefalseStep aexpression1Step m

15、Step nStep ztruefalseexpression2truefalse5.7用于多分支控制的条件语句(Multiple Selection)Cascaded ifStep aif (expression1) Step m else if (expression2) Step n else Step x Step zStep aexpression1Step mStep nStep ztruefalseexpression2truefalseStep xStep aexpression1Step mStep nStep ztruefalseexpression2truefalseSt

16、ep x5.8用于多路选择的switch语句 The structure is similar to multiple selection (flowchart)switch (expression) case value1 :statement1;break;case value2 :statement2;break;default :statementX;break;Dont forget the braces !Dont forget the colons !Dont forget the blank ! Important Rule !switch (expression) case

17、value1 :statement1;break;case value2 :statement2;break;default :statementX;break;Must be int or char!5.8用于多路选择的switch语句 注意!Example: switch (month) case 1:printf(Januaryn);break;case 2:printf(Februaryn);break;case 3:printf(Marchn);break;default:printf(Othersn);break; printf(End);Assume month = 1, so

18、this step will be executed. Later case is terminated here. Jump to January_JanuaryEnd _5.8用于多路选择的switch语句 Example: switch (month) case 1:printf(Januaryn);break;case 2:printf(Februaryn);break;case 3:printf(Marchn);break;default:printf(Othersn);break; printf(End);this step will be executed. Later Marc

19、h_MarchEnd _Assume month = 3, so case is terminated here. Jump to 5.8用于多路选择的switch语句 Example: switch (month) case 1:printf(Januaryn);break;case 2:printf(Februaryn);break;case 3:printf(Marchn);break;default:printf(Othersn);break; printf(End);Nowwhat will happen if this break is taken out from the pro

20、gram?5.8用于多路选择的switch语句 Example: switch (month) case 1:printf(Januaryn);break;case 2:printf(Februaryn);case 3:printf(Marchn);break;default:printf(Othersn);break; printf(End);No more !5.8用于多路选择的switch语句 Example: switch (month) case 1:printf(Januaryn);break;case 2:printf(Februaryn);case 3:printf(March

21、n);break;default:printf(Othersn);break; printf(End);this step will be executed. Later February_March _Assume month = 2, so case is terminated here. Jump to End _execution continues. Thus, this step is executed . So 5.8用于多路选择的switch语句 Example: switch (month) case 1:printf(Januaryn);break;case 2:print

22、f(Februaryn);case 3:printf(Marchn);break;default:printf(Othersn);break; printf(End);Nowwhat will happen if these breaks are taken out from the program?And if month = 1 ?And if month = 4 ?5.8用于多路选择的switch语句 最好不省略!【例5.5】 计算器程序编程设计一个简单的计算器程序,要求用户从键盘输入如下形式的表达式: 操作数1 运算符op 操作数2 然后,计算并输出表达式的值 指定的运算符为 加(+)

23、 减(-) 乘(*) 除(/) main()int data1, data2; /*定义两个操作符*/char op; /*定义运算符*/printf(Please enter the expression:);scanf(%d%c%d, &data1, &op, &data2); /*输入运算表达式*/switch (op) case +: /*处理加法*/printf(%d + %d = %dn, data1, data2, data1 + data2); break;case -: /*处理减法*/printf(%d - %d = %dn, data1, data2, data1 - d

24、ata2);break;case *: /*处理乘法*/printf(%d * %d = %dn, data1, data2, data1 * data2); break;case /: /*处理除法*/if (0 = data2) printf(Division by zero!n);else printf(%d/%d = %dn, data1, data2, data1/data2); break;default: printf(Invalid operator! n);【例5.5】 Why?注释掉会怎样?思考题语句if(0=data2)的必要性避免除零错误1998年11月,科学美国人杂志

25、描述了美国导弹巡洋舰约克敦号上的一起事故,除零错导致军舰推进系统的关闭为什么不用if (data2 = 0)?如果要求输入的算术表达式中的操作数和运算符之间可以加入任意多个空格符,那么程序如何修改?main()int data1, data2; char op; printf(Please enter the expression:);scanf(%d %c%d, &data1, &op, &data2); /* %c前有一个空格 */ switch (op) case +:printf(%d + %d = %dn, data1, data2, data1 + data2); break;ca

26、se -:printf(%d - %d = %dn, data1, data2, data1 - data2);break;case *:printf(%d * %d = %dn, data1, data2, data1 * data2); break;case /:if (0 = data2) printf(Division by zero!n);else printf(%d/%d = %dn, data1, data2, data1/data2); break;default: printf(Invalid operator! n);【例5.5】 空格思考题如果要求对浮点数进行运算,那么程

27、序如何修改?修改例5.5程序,使其能进行浮点数的算术运算,同时允许使用字符*、x与X作为乘号,并且允许输入的算术表达式中的操作数和运算符之间可以加入任意多个空格符。 main()float data1, data2; char op; printf(Please enter the expression:);scanf(%f %c%f, &data1, &op, &data2); switch (op) case +:printf(%f + %f = %fn, data1, data2, data1 + data2); break;case -:printf(%f - %f = %fn, da

28、ta1, data2, data1 - data2);break;case *: case x:case X:printf(%f * %f = %fn, data1, data2, data1 * data2); break;case /:if (fabs(data2) = 1e-7) /* 实数与0比较 */ printf(Division by zero!n);else printf(%f/%f = %fn, data1, data2, data1/data2); break;default: printf(Invalid operator! n);【例5.6】 取绝对值函数switch语

29、句和else-if语句的比较else-if比switch的条件控制更强大一些else-if可以依照各种逻辑运算的结果进行流程控制switch只能进行=判断,并且只能是整数判断csae后面的常量表达式不能用一个区间表示,也不 能出现任何运算符。 例: csae 90=score=100:语句; case 90100:语句;switch比else-if更清晰两者都要尽量避免用得过多、过长,尤其不要嵌套得太多,否则,会大大增加程序的分支,使逻辑关系显得混乱,不易维护,易出错。#include main( ) int x,y; scanf(“%d”, &x); if (x0) y=-1; else i

30、f (x=0) y=0; else y=1; printf(“x=%d, y=%d”, x, y);#include main( ) int x,y; scanf(“%d”, &x); if(x=0) if(x=0) y = 0; else y = 1; else y=-1; printf(“x = %d, y = %d”, x, y); -1 (x0)有一函数: -1 (x0)编一程序,输入一个x值,输出y值。Symbol Description & 与(AND)当且仅当两者都为真,则结果为真 | 或(OR) 只要两者中有一个为真,结果就为真 ! 非(NOT)aba & ba | b!a!b0000110101101001011111005.9逻辑运算符和逻辑表达式( Logical Operators )! & |高低ch是大写英文字母(ch = A) &

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论