c语言第五章(苏小红版)

上传人:夏** 文档编号:567627168 上传时间:2024-07-21 格式:PPT 页数:56 大小:2.43MB
返回 下载 相关 举报
c语言第五章(苏小红版)_第1页
第1页 / 共56页
c语言第五章(苏小红版)_第2页
第2页 / 共56页
c语言第五章(苏小红版)_第3页
第3页 / 共56页
c语言第五章(苏小红版)_第4页
第4页 / 共56页
c语言第五章(苏小红版)_第5页
第5页 / 共56页
点击查看更多>>
资源描述

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

1、第第第第5 5 5 5章章章章 选择控制结构选择控制结构选择控制结构选择控制结构哈尔滨工业大学哈尔滨工业大学计算机科学与技术学院计算机科学与技术学院苏小红苏小红2024/7/212/56本章学习内容本章学习内容本章学习内容本章学习内容 算法的描述方法算法的描述方法算法的描述方法算法的描述方法 用于单分支控制的用于单分支控制的用于单分支控制的用于单分支控制的ifif语句语句语句语句 用于双分支控制的用于双分支控制的用于双分支控制的用于双分支控制的if-elseif-else语句语句语句语句 用于多路选择的用于多路选择的用于多路选择的用于多路选择的switchswitch语句语句语句语句 brea

2、kbreak语句在语句在语句在语句在switchswitch语句中的作用语句中的作用语句中的作用语句中的作用 关系运算符关系运算符关系运算符关系运算符 条件运算符条件运算符条件运算符条件运算符 逻辑运算符逻辑运算符逻辑运算符逻辑运算符 程序测试程序测试程序测试程序测试2024/7/213/56生活中的问题求解:生活中的问题求解:生活中的问题求解:生活中的问题求解:Problem:Problem: 烤蛋糕(烤蛋糕(烤蛋糕(烤蛋糕(Baking a CakeBaking a Cake)How to solve:How to solve:1. 1. StartStart2. 2. 将烤箱预热将烤箱预

3、热将烤箱预热将烤箱预热3. 3. 准备一个盘子准备一个盘子准备一个盘子准备一个盘子4. 4. 在盘子上抹上一些黄油在盘子上抹上一些黄油在盘子上抹上一些黄油在盘子上抹上一些黄油5. 5. 将面粉、鸡蛋、糖和香精混合在一起搅拌均匀将面粉、鸡蛋、糖和香精混合在一起搅拌均匀将面粉、鸡蛋、糖和香精混合在一起搅拌均匀将面粉、鸡蛋、糖和香精混合在一起搅拌均匀6. 6. 将搅拌好的面粉团放在盘子上将搅拌好的面粉团放在盘子上将搅拌好的面粉团放在盘子上将搅拌好的面粉团放在盘子上7. 7. 将盘子放到烤箱内将盘子放到烤箱内将盘子放到烤箱内将盘子放到烤箱内8. 8. End End5.15.1生活中与计算机中的问题求

4、解生活中与计算机中的问题求解生活中与计算机中的问题求解生活中与计算机中的问题求解 (Problem Solving ProcessProblem Solving Process)2024/7/214/56分治策略分治策略分治策略分治策略(Divide and Conquer Strategy Divide and Conquer Strategy )Problem:Problem: 准备早餐(准备早餐(准备早餐(准备早餐( Prepare a BreakfastPrepare a Breakfast)1.Start2.准备早餐准备早餐3.End2024/7/215/561. Start1. S

5、tart2. 2. 准备早餐准备早餐准备早餐准备早餐 2.1 2.1 准备一个金枪鱼三明治准备一个金枪鱼三明治准备一个金枪鱼三明治准备一个金枪鱼三明治 2.2 2.2 准备一些薯条准备一些薯条准备一些薯条准备一些薯条 2.3 2.3 冲一杯咖啡冲一杯咖啡冲一杯咖啡冲一杯咖啡3. End3. End分治策略分治策略分治策略分治策略(Divide and Conquer Strategy Divide and Conquer Strategy )2024/7/216/561. Start1. Start2. 2.准备早餐准备早餐准备早餐准备早餐 2.1 2.1 准备一个金枪鱼三明治准备一个金枪鱼三

6、明治准备一个金枪鱼三明治准备一个金枪鱼三明治 2.1.1 2.1.1 拿来两片面包拿来两片面包拿来两片面包拿来两片面包 2.1.2 2.1.2 准备一些金枪鱼酱准备一些金枪鱼酱准备一些金枪鱼酱准备一些金枪鱼酱 2.2 2.2 准备一些薯片准备一些薯片准备一些薯片准备一些薯片 2.3 2.3 冲一杯咖啡冲一杯咖啡冲一杯咖啡冲一杯咖啡3. End3. End分治策略分治策略分治策略分治策略(Divide and Conquer Strategy Divide and Conquer Strategy )2024/7/217/561. Start1. Start2. 2.准备早餐准备早餐准备早餐准备

7、早餐 2.1 2.1 准备一个金枪鱼三明治准备一个金枪鱼三明治准备一个金枪鱼三明治准备一个金枪鱼三明治 2.1.1 2.1.1 拿来两片面包拿来两片面包拿来两片面包拿来两片面包 2.1.2 2.1.2 准备一些金枪鱼酱准备一些金枪鱼酱准备一些金枪鱼酱准备一些金枪鱼酱 2.2 2.2 准备一些薯片准备一些薯片准备一些薯片准备一些薯片 2.2.1 2.2.1 将土豆切成片将土豆切成片将土豆切成片将土豆切成片 2.2.2 2.2.2 油炸这些土豆片油炸这些土豆片油炸这些土豆片油炸这些土豆片 2.3 2.3 冲一杯咖啡冲一杯咖啡冲一杯咖啡冲一杯咖啡3. End3. End分治策略分治策略分治策略分治策

8、略(Divide and Conquer Strategy Divide and Conquer Strategy )2024/7/218/56分治策略分治策略分治策略分治策略( Divide and Conquer Strategy Divide and Conquer Strategy )1. Start1. Start2. 2.准备早餐准备早餐准备早餐准备早餐 2.1 2.1 准备一个金枪鱼三明治准备一个金枪鱼三明治准备一个金枪鱼三明治准备一个金枪鱼三明治 2.1.1 2.1.1 拿来两片面包拿来两片面包拿来两片面包拿来两片面包 2.1.2 2.1.2 准备一些金枪鱼酱准备一些金枪鱼酱准

9、备一些金枪鱼酱准备一些金枪鱼酱 2.2 2.2 准备一些薯片准备一些薯片准备一些薯片准备一些薯片 2.2.1 2.2.1 将土豆切成片将土豆切成片将土豆切成片将土豆切成片 2.2.2 2.2.2 油炸这些土豆片油炸这些土豆片油炸这些土豆片油炸这些土豆片 2.3 2.3 冲一杯咖啡冲一杯咖啡冲一杯咖啡冲一杯咖啡 2.3.1 2.3.1 烧些开水放入杯中烧些开水放入杯中烧些开水放入杯中烧些开水放入杯中 2.3.2 2.3.2 在水杯中加入一些咖啡和糖在水杯中加入一些咖啡和糖在水杯中加入一些咖啡和糖在水杯中加入一些咖啡和糖3. End3. End2024/7/219/565.25.2算法的概念算法的

10、概念算法的概念算法的概念及其描述方法及其描述方法及其描述方法及其描述方法 面向对象程序面向对象程序 = = 对象对象 + + 消息消息 面向过程的程序面向过程的程序 = = 数据结构数据结构 + + 算法算法 计算机中的算法计算机中的算法( Algorithm )为解决一个具体问题而采取的、确定的、有限的操为解决一个具体问题而采取的、确定的、有限的操为解决一个具体问题而采取的、确定的、有限的操为解决一个具体问题而采取的、确定的、有限的操作步骤,仅指计算机能执行的算法作步骤,仅指计算机能执行的算法作步骤,仅指计算机能执行的算法作步骤,仅指计算机能执行的算法A specific and step-

11、by-step set of instructions for A specific and step-by-step set of instructions for carrying out a procedure or solving a problem, usually carrying out a procedure or solving a problem, usually with the requirement that the procedure terminate at with the requirement that the procedure terminate at

12、some pointsome point2024/7/2110/565.25.2算法的概念算法的概念算法的概念算法的概念及其描述方法及其描述方法及其描述方法及其描述方法 算法的特性算法的特性有穷性有穷性有穷性有穷性 在合理的时间内完成在合理的时间内完成在合理的时间内完成在合理的时间内完成确定性,无歧义确定性,无歧义确定性,无歧义确定性,无歧义 如果如果如果如果x x0000,则输出,则输出,则输出,则输出YesYesYesYes;如果如果如果如果x x0000,则输出,则输出,则输出,则输出NoNoNoNo有效性有效性有效性有效性 能有效执行能有效执行能有效执行能有效执行负数开平方负数开平方负

13、数开平方负数开平方没有输入或有多个输入没有输入或有多个输入没有输入或有多个输入没有输入或有多个输入 有一个或多个输出有一个或多个输出有一个或多个输出有一个或多个输出 2024/7/2111/565.25.2算法的概念算法的概念算法的概念算法的概念及其描述方法及其描述方法及其描述方法及其描述方法 算法的描述方法算法的描述方法自然语言描述自然语言描述自然语言描述自然语言描述传统流程图(传统流程图(传统流程图(传统流程图(FlowchartFlowchart) 在在在在19661966年,年,年,年,Bohra Bohra 与与与与 Jacopini Jacopini 提出提出提出提出N-SN-S结

14、构化流程图结构化流程图结构化流程图结构化流程图 19731973年,美国学者年,美国学者年,美国学者年,美国学者I.Nassi I.Nassi 和和和和 B.Shneiderman B.Shneiderman 提出提出提出提出伪码(伪码(伪码(伪码(PseudocodePseudocode)表示)表示)表示)表示2024/7/2112/56流程图流程图流程图流程图(FlowchartFlowchart) Flowchart represents algorithm graphically.Start/EndSymbolSymbolSemanticSemanticProcessInput/Out

15、putTestConnectorFlow of activities2024/7/2113/56计算机中的问题求解过程计算机中的问题求解过程Example Example :买苹果,计算价钱:买苹果,计算价钱:买苹果,计算价钱:买苹果,计算价钱Calculate and display the price of a number of apples Calculate and display the price of a number of apples if the quantity in kg and price per kg are given.if the quantity in kg

16、 and price per kg are given. quantityquantity pricePerkg pricePerkgpricepriceprice = quantity * pricePerkgprice = quantity * pricePerkgInputInputProcessOutputOutputFirst identify the input and output of the problem.First identify the input and output of the problem.2024/7/2114/56顺序结构(顺序结构( Sequence

17、Structure) 给变量赋值给变量赋值赋值表达式语句赋值表达式语句赋值表达式语句赋值表达式语句 赋值表达式赋值表达式赋值表达式赋值表达式 ; ; price = quantity*pricePerkg; 输入输出数据输入输出数据标准库函数标准库函数标准库函数标准库函数调用语句调用语句调用语句调用语句 scanf(%d, &pricePerkg); printf(%d, price);ABC2024/7/2115/56【例例5.1】计算两整数的最大值计算两整数的最大值 num1num1 num2 num2maxmax?InputInputProcessOutputOutput2024/7/2

18、116/56if - elseSingle SelectionDouble SelectionMultiple Selectionifif - else - if选择结构(分支结构)选择结构(分支结构)选择结构(分支结构)选择结构(分支结构) (Selection StructureSelection Structure)2024/7/2117/565.35.3关系运算符与关系表达式关系运算符与关系表达式关系运算符与关系表达式关系运算符与关系表达式Relational OperationDescriptionExamples of ExpressionValueLess than6 91 (t

19、rue)=Less than or equal to5 Greater than2 60 (false)=Greater than or equal to9 = 51 (true)=Equal to7 = 50 (false)!=Not equal to6 != 51 (true)2024/7/2118/565.45.4用于用于用于用于单分支单分支单分支单分支控制的条件语句控制的条件语句控制的条件语句控制的条件语句(SingleSingle Selection Selection)Step aStep aconditionconditionStep mStep mStep nStep nSte

20、p xStep xtruetruefalsefalsestep astep aconditionconditionstep mstep mstep nstep nstep bstep btruetruefalsefalsePseudocode StructurePseudocode Structurestep aif startstep mstep nend_ifstep b2024/7/2119/56if if StatementStatementThe structure is similar to single selection (flowchart)The structure is

21、similar to single selection (flowchart)Syntax:ifif (expression)(expression)statement;statement;ororifif (expression)(expression) statement1;statement1;statement2;statement2; 复合语句复合语句compound statement被当做一条语句看待被当做一条语句看待表达式非表达式非表达式非表达式非0 0为真为真为真为真2024/7/2120/56if if StatementStatementThe structure is

22、similar to single selection (flowchart)The structure is similar to single selection (flowchart)Syntax:ifif (expression)(expression)statement;statement;ororifif (expression)(expression) statement1;statement1;statement2;statement2; Dont forget the Dont forget the bracesbraces ! !Dont forget the Dont f

23、orget the parenthesesparentheses ! !2024/7/2121/56#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.15.1】计算两整数的最大值计算两整数的最大值计算两整数的最大值计算两整数的最大值 2024/7/2122/56P

24、seudocode StructurePseudocode StructureStep aif startStep mStep nend_ifelse startStep xStep yend_elseStep zStep aStep aconditionconditionStep mStep mStep nStep nStep zStep ztruetruefalsefalseStep xStep xStep yStep yStep aStep aconditionconditionStep mStep mStep nStep nStep zStep ztruetruefalsefalseS

25、tep xStep xStep yStep y5.55.5用于用于用于用于双分支双分支双分支双分支控制的条件语句控制的条件语句控制的条件语句控制的条件语句( DoubleDouble SelectionSelection)2024/7/2123/56if - elseif - else StatementStatementThe structure is similar to double selection (flowchart)The structure is similar to double selection (flowchart)Syntax:ifif (expression)(e

26、xpression) statement1;statement1;elseelse statement2;statement2;or ifif (expression) (expression) statement1; statement1; statement3; statement3; elseelse statement2; statement2; statement4; statement4; 2024/7/2124/56NoNoYesYesFlowchart: Calculate the MaximumFlowchart: Calculate the MaximumFlowchart

27、: Calculate the MaximumInput Input a and ba and bOutput maxOutput maxa b?a b?max max b bmax max a aStartStartEndEnd【例例例例5.25.2】计算两整数的最大值计算两整数的最大值计算两整数的最大值计算两整数的最大值 2024/7/2125/56scanf(%d,%d, &a, &b);scanf(%d,%d, &a, &b);if (a b)if (a b) max = a; max = a;elseelse max = b; max = b;Turn Flowchart to C

28、ProgramTurn Flowchart to C ProgramTurn Flowchart to C ProgramNoNoYesYesInput a and bInput a and bOutput maxOutput maxa b?a b?max max b bmax max a aStartStartEndEnd【例例例例5.25.2】计算两整数的最大值计算两整数的最大值计算两整数的最大值计算两整数的最大值 printf(max = %dn, printf(max = %dn, max);max);2024/7/2126/56#include main() int a, b, ma

29、x; 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.25.2】计算两整数的最大值计算两整数的最大值计算两整数的最大值计算两整数的最大值 2024/7/2127/56#include main() int a, b, max; printf(Input a, b:); scanf(%d,%d, &a, &b); if (a b) max = a; else ma

30、x = b; printf(max = %d, max); max = a b ? a : b;表达式表达式表达式表达式1 ? 1 ? 1 ? 1 ? 表达式表达式表达式表达式2 : 2 : 2 : 2 : 表达式表达式表达式表达式3 3 3 35.65.6条件运算符和条件表达式条件运算符和条件表达式条件运算符和条件表达式条件运算符和条件表达式【例例例例5.35.3】2024/7/2128/565.75.7用于用于用于用于多分支多分支多分支多分支控制的条件语句控制的条件语句控制的条件语句控制的条件语句(Multiple SelectionMultiple Selection)Multi-way

31、 Multi-way if ifStep aifif (expression1)Step m ifif (expression2) Step n Step zStep aStep aexpression1expression1Step mStep mStep nStep nStep zStep ztruetruefalsefalseexpression2expression2truetruefalsefalseStep aStep aexpression1expression1Step mStep mStep nStep nStep zStep ztruetruefalsefalseexpre

32、ssion2expression2truetruefalsefalse2024/7/2129/565.75.7用于用于用于用于多分支控制多分支控制多分支控制多分支控制的条件语句的条件语句的条件语句的条件语句(Multiple SelectionMultiple Selection)Cascaded Cascaded if ifStep aifif (expression1) Step m else ifelse if (expression2) Step n else else Step x Step zStep aStep aexpression1expression1Step mStep

33、mStep nStep nStep zStep ztruetruefalsefalseexpression2expression2truetruefalsefalseStep xStep xStep aStep aexpression1expression1Step mStep mStep nStep nStep zStep ztruetruefalsefalseexpression2expression2truetruefalsefalseStep xStep x2024/7/2130/565.8用于多路选择的用于多路选择的switch语句语句 The structure is simila

34、r to multiple selection (flowchart)switchswitch ( (expressionexpression) ) casecase value1value1 : :statement1;statement1;break;break;case case value2value2 : :statement2;statement2;break;break;defaultdefault : :statementX;statementX;break;break; Dont forget the Dont forget the braces !braces !Dont

35、forget the Dont forget the colons !colons !Dont forget the Dont forget the blank !blank ! 2024/7/2131/56Important Rule !switchswitch ( (expressionexpression) ) casecase value1value1 : :statement1;statement1;break;break;case case value2value2 : :statement2;statement2;break;break;defaultdefault : :sta

36、tementX;statementX;break;break; Must be Must be intint or or charchar! !5.8用于多路选择的用于多路选择的switch语句语句 注意!注意!注意!注意!2024/7/2132/56Example: 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,

37、Assume month = 1, so so this step will be this step will be executed. Later executed. Later casecase is terminated is terminated here. Jump to here. Jump to January_JanuaryEnd _5.85.8用于多路选择的用于多路选择的用于多路选择的用于多路选择的switchswitch语句语句语句语句 2024/7/2133/56Example: switch (month) case 1:printf(Januaryn);break;

38、case 2:printf(Februaryn);break;case 3:printf(Marchn);break;default:printf(Othersn);break; printf(End);this step will be this step will be executed. Later executed. Later March_MarchEnd _Assume month = 3, Assume month = 3, so so casecase is terminated is terminated here. Jump to here. Jump to 5.85.8用

39、于多路选择的用于多路选择的用于多路选择的用于多路选择的switchswitch语句语句语句语句 2024/7/2134/56Example: 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 Nowwhat will happen if this happen if this breakbreak is taken out fr

40、om the is taken out from the program?program?5.85.8用于多路选择的用于多路选择的用于多路选择的用于多路选择的switchswitch语句语句语句语句 2024/7/2135/56Example: switch (month) case 1:printf(Januaryn);break;case 2:printf(Februaryn);case 3:printf(Marchn);break;default:printf(Othersn);break; printf(End);No more !No more !5.85.8用于多路选择的用于多路选

41、择的用于多路选择的用于多路选择的switchswitch语句语句语句语句 2024/7/2136/56Example: switch (month) case 1:printf(Januaryn);break;case 2:printf(Februaryn);case 3:printf(Marchn);break;default:printf(Othersn);break; printf(End);this step will be this step will be executed. Later executed. Later February_March _Assume month =

42、2, Assume month = 2, so so casecase is terminated is terminated here. Jump to here. Jump to End _execution continues. Thus, execution continues. Thus, this step is executed . So this step is executed . So 5.85.8用于多路选择的用于多路选择的用于多路选择的用于多路选择的switchswitch语句语句语句语句 2024/7/2137/56Example: switch (month) ca

43、se 1:printf(Januaryn);break;case 2:printf(Februaryn);case 3:printf(Marchn);break;default:printf(Othersn);break; printf(End);Nowwhat will Nowwhat will happen if these happen if these breakbreaks s are taken out are taken out from the program?from the program?And And if month = 1 ?if month = 1 ?And An

44、d if month = 34 ?if month = 34 ?5.85.8用于多路选择的用于多路选择的用于多路选择的用于多路选择的switchswitch语句语句语句语句 最好不省略最好不省略!2024/7/2138/56【例例例例5.55.5】 计算器程序计算器程序计算器程序计算器程序 编程设计一个简单的计算器程序,要求用户从键盘输入如编程设计一个简单的计算器程序,要求用户从键盘输入如编程设计一个简单的计算器程序,要求用户从键盘输入如编程设计一个简单的计算器程序,要求用户从键盘输入如下形式的表达式:下形式的表达式:下形式的表达式:下形式的表达式: 操作数操作数操作数操作数1 1 运算符运算

45、符运算符运算符op op 操作数操作数操作数操作数2 2 然后,计算并输出表达式的值然后,计算并输出表达式的值然后,计算并输出表达式的值然后,计算并输出表达式的值 指定的运算符为指定的运算符为指定的运算符为指定的运算符为 加(加(加(加(+ +) 减(减(减(减(- -) 乘(乘(乘(乘(* *) 除(除(除(除(/ /) 2024/7/2139/56mainmain()() intint data1, data2; /* data1, data2; /*定义两个操作符定义两个操作符定义两个操作符定义两个操作符* */ /charchar op; /* op; /*定义运算符定义运算符定义运算

46、符定义运算符* */ /printf(Please enter the expression:);printf(Please enter the expression:);scanf(%d%c%d, &data1, &op, &data2); /*scanf(%d%c%d, &data1, &op, &data2); /*输入运算表达式输入运算表达式输入运算表达式输入运算表达式* */ /switchswitch (op) (op) casecase +: /* +: /*处理加法处理加法处理加法处理加法* */ /printf(%d + %d = %dn, data1, data2, dat

47、a1 + data2); printf(%d + %d = %dn, data1, data2, data1 + data2); breakbreak; ;casecase -: /* -: /*处理减法处理减法处理减法处理减法* */ /printf(%d - %d = %dn, data1, data2, data1 - data2);printf(%d - %d = %dn, data1, data2, data1 - data2);breakbreak; ;casecase *: /* *: /*处理乘法处理乘法处理乘法处理乘法* */ /printf(%d * %d = %dn, d

48、ata1, data2, data1 * data2); printf(%d * %d = %dn, data1, data2, data1 * data2); breakbreak; ;casecase /: /* /: /*处理除法处理除法处理除法处理除法* */ /ifif ( (0 = data20 = data2) ) printf(Division by zero!n); printf(Division by zero!n);elseelse printf(%d/%d = %dn, data1, data2, data1/data2); printf(%d/%d = %dn, da

49、ta1, data2, data1/data2); breakbreak; ;defaultdefault: : printf(Invalid operator! n);printf(Invalid operator! n); 【例例例例5.55.5】 Why?注释掉会怎样注释掉会怎样? ?2024/7/2140/56思考题思考题思考题思考题 语句语句语句语句if(0=data2)if(0=data2)的必要性的必要性的必要性的必要性避免避免避免避免“ “除零错误除零错误除零错误除零错误” ”19981998年年年年1111月,月,月,月,科学美国人科学美国人科学美国人科学美国人杂志描述了美国

50、导弹巡杂志描述了美国导弹巡杂志描述了美国导弹巡杂志描述了美国导弹巡洋舰约克敦号上的一起事故,除零错导致军舰推进系统洋舰约克敦号上的一起事故,除零错导致军舰推进系统洋舰约克敦号上的一起事故,除零错导致军舰推进系统洋舰约克敦号上的一起事故,除零错导致军舰推进系统的关闭的关闭的关闭的关闭 为什么不用为什么不用为什么不用为什么不用if (data2 = 0)if (data2 = 0)? 如果要求输入的算术表达式中的操作数和运算符之如果要求输入的算术表达式中的操作数和运算符之如果要求输入的算术表达式中的操作数和运算符之如果要求输入的算术表达式中的操作数和运算符之间可以加入任意多个空格符,那么程序如何修

51、改?间可以加入任意多个空格符,那么程序如何修改?间可以加入任意多个空格符,那么程序如何修改?间可以加入任意多个空格符,那么程序如何修改?2024/7/2141/56mainmain()() intint data1, data2; data1, data2; charchar op; op; printf(Please enter the expression:);printf(Please enter the expression:);scanf(%d %c%d, &data1, &op, &data2); scanf(%d %c%d, &data1, &op, &data2); /* %c

52、/* %c前有一个空格前有一个空格前有一个空格前有一个空格 * */ / switchswitch (op) (op) casecase +: +:printf(%d + %d = %dn, data1, data2, data1 + data2); printf(%d + %d = %dn, data1, data2, data1 + data2); breakbreak; ;casecase -: -:printf(%d - %d = %dn, data1, data2, data1 - data2);printf(%d - %d = %dn, data1, data2, data1 -

53、data2);breakbreak; ;casecase *: *:printf(%d * %d = %dn, data1, data2, data1 * data2); printf(%d * %d = %dn, data1, data2, data1 * data2); breakbreak; ;casecase /: /:ifif ( (0 = data20 = data2) ) printf(Division by zero!n); printf(Division by zero!n);elseelse printf(%d/%d = %dn, data1, data2, data1/d

54、ata2); printf(%d/%d = %dn, data1, data2, data1/data2); breakbreak; ;defaultdefault: : printf(Invalid operator! n);printf(Invalid operator! n); 【例例例例5.55.5】 空格空格2024/7/2142/56思考题思考题思考题思考题 如果要求对浮点数进行运算,那么程序如何修改?如果要求对浮点数进行运算,那么程序如何修改?如果要求对浮点数进行运算,那么程序如何修改?如果要求对浮点数进行运算,那么程序如何修改? 修改例修改例修改例修改例5.55.5程序,使其能

55、进行浮点数的算术运算,程序,使其能进行浮点数的算术运算,程序,使其能进行浮点数的算术运算,程序,使其能进行浮点数的算术运算,同时允许使用字符同时允许使用字符同时允许使用字符同时允许使用字符* *、x x与与与与X X作为乘号,并且允许输作为乘号,并且允许输作为乘号,并且允许输作为乘号,并且允许输入的算术表达式中的操作数和运算符之间加入任意入的算术表达式中的操作数和运算符之间加入任意入的算术表达式中的操作数和运算符之间加入任意入的算术表达式中的操作数和运算符之间加入任意多个空格符。多个空格符。多个空格符。多个空格符。 2024/7/2143/56mainmain()() floatfloat d

56、ata1, data2; data1, data2; charchar op; op; printf(Please enter the expression:);printf(Please enter the expression:);scanf(%scanf(%f f %c%c%f f, &data1, &op, &data2); , &data1, &op, &data2); switchswitch (op) (op) casecase +: +:printf(%printf(%f f + % + %f f = % = %f fn, data1, data2, data1 + data2

57、); n, data1, data2, data1 + data2); breakbreak; ;casecase -: -:printf(%printf(%f f - % - %f f = % = %f fn, data1, data2, data1 - data2);n, data1, data2, data1 - data2);breakbreak; ;casecase *: *: case x:case x:case X:case X:printf(%printf(%f f * % * %f f = % = %f fn, data1, data2, data1 * data2); n,

58、 data1, data2, data1 * data2); breakbreak; ;casecase /: /:if (fabs(data2) = 1e-7) /* if (fabs(data2) = A) & (ch = A) & (ch = 1) & (b+ = 5) ( 0 = 1 ) ( 0 = 1 ) & ( b& ( b+ = 5 ) = 5 ) 0 & 0 & ( b( b+ = 5 ) = 5 ) 0 0a0b5c15d17复合表达式复合表达式复合表达式复合表达式(Compound ExpressionCompound Expression)的值的值的值的值尽量使用最少的操

59、作数来确定表达式的值,这就尽量使用最少的操作数来确定表达式的值,这就意味着表达式中的某些操作数可能不会被计算意味着表达式中的某些操作数可能不会被计算 2024/7/2147/565.105.10本章扩充内容本章扩充内容本章扩充内容本章扩充内容 测试的主要方式测试的主要方式测试的主要方式测试的主要方式给定特定的输入,运行被测软件给定特定的输入,运行被测软件给定特定的输入,运行被测软件给定特定的输入,运行被测软件检查软件的输出是否与预期结果一致检查软件的输出是否与预期结果一致检查软件的输出是否与预期结果一致检查软件的输出是否与预期结果一致 测试用例的选取方法测试用例的选取方法测试用例的选取方法测试

60、用例的选取方法尽量覆盖所有分支,减少重复覆盖尽量覆盖所有分支,减少重复覆盖尽量覆盖所有分支,减少重复覆盖尽量覆盖所有分支,减少重复覆盖 测试的目的测试的目的测试的目的测试的目的通过运行测试用例找出软件中的通过运行测试用例找出软件中的通过运行测试用例找出软件中的通过运行测试用例找出软件中的BugBugBugBug成功的测试在于发现迄今为止尚未发现的成功的测试在于发现迄今为止尚未发现的成功的测试在于发现迄今为止尚未发现的成功的测试在于发现迄今为止尚未发现的BugBugBugBug测试人员的主要任务是站在使用者的角度,通过不断测试人员的主要任务是站在使用者的角度,通过不断测试人员的主要任务是站在使用

61、者的角度,通过不断测试人员的主要任务是站在使用者的角度,通过不断使用和攻击,尽可能多地找出使用和攻击,尽可能多地找出使用和攻击,尽可能多地找出使用和攻击,尽可能多地找出BugBugBugBug测试的过程就像黑客的攻击过程,专门找软件漏洞测试的过程就像黑客的攻击过程,专门找软件漏洞测试的过程就像黑客的攻击过程,专门找软件漏洞测试的过程就像黑客的攻击过程,专门找软件漏洞2024/7/2148/565.105.10本章扩充内容本章扩充内容本章扩充内容本章扩充内容 采用测试用例,通过运行程序查找程序错误的方法采用测试用例,通过运行程序查找程序错误的方法采用测试用例,通过运行程序查找程序错误的方法采用测

62、试用例,通过运行程序查找程序错误的方法实质是一种抽样检查,彻底的测试是不可能的实质是一种抽样检查,彻底的测试是不可能的实质是一种抽样检查,彻底的测试是不可能的实质是一种抽样检查,彻底的测试是不可能的彻底的测试不现实,要考虑时间、费用等限制,不允许彻底的测试不现实,要考虑时间、费用等限制,不允许彻底的测试不现实,要考虑时间、费用等限制,不允许彻底的测试不现实,要考虑时间、费用等限制,不允许无休止的测试无休止的测试无休止的测试无休止的测试 测试只能证明程序有错,不能证明程序无错测试只能证明程序有错,不能证明程序无错测试只能证明程序有错,不能证明程序无错测试只能证明程序有错,不能证明程序无错 E.W

63、.DijkstraE.W.Dijkstra 测试能提高软件质量,但提高软件质量不能依赖于测试能提高软件质量,但提高软件质量不能依赖于测试能提高软件质量,但提高软件质量不能依赖于测试能提高软件质量,但提高软件质量不能依赖于测试测试测试测试2024/7/2149/56软件测试方法的分类软件测试方法的分类软件测试方法的分类软件测试方法的分类 白盒测试(结构测试)白盒测试(结构测试)白盒测试(结构测试)白盒测试(结构测试)在完全了解程序的结构和处理过程的情况下,按照程在完全了解程序的结构和处理过程的情况下,按照程在完全了解程序的结构和处理过程的情况下,按照程在完全了解程序的结构和处理过程的情况下,按照

64、程序内部的逻辑测试程序,检验程序中的每条逻辑路径序内部的逻辑测试程序,检验程序中的每条逻辑路径序内部的逻辑测试程序,检验程序中的每条逻辑路径序内部的逻辑测试程序,检验程序中的每条逻辑路径是否都能按预定要求正确工作是否都能按预定要求正确工作是否都能按预定要求正确工作是否都能按预定要求正确工作主要用于测试的早期主要用于测试的早期主要用于测试的早期主要用于测试的早期 黑盒测试(功能测试)黑盒测试(功能测试)黑盒测试(功能测试)黑盒测试(功能测试)把系统看成一个黑盒子,不考虑程序内部的逻辑结构把系统看成一个黑盒子,不考虑程序内部的逻辑结构把系统看成一个黑盒子,不考虑程序内部的逻辑结构把系统看成一个黑盒

65、子,不考虑程序内部的逻辑结构和处理过程,只根据需求规格说明书的要求,设计测和处理过程,只根据需求规格说明书的要求,设计测和处理过程,只根据需求规格说明书的要求,设计测和处理过程,只根据需求规格说明书的要求,设计测试用例,检查程序的功能是否符合它的功能说明试用例,检查程序的功能是否符合它的功能说明试用例,检查程序的功能是否符合它的功能说明试用例,检查程序的功能是否符合它的功能说明主要用于测试的后期主要用于测试的后期主要用于测试的后期主要用于测试的后期通常结合使用选择有限数量的重要路径进行白通常结合使用选择有限数量的重要路径进行白盒测试,对重要的功能需求进行黑盒测试盒测试,对重要的功能需求进行黑盒

66、测试2024/7/2150/56# #includeinclude # #includeinclude main()main() floatfloat a, b, c; a, b, c; printf(Input the three edge length:);printf(Input the three edge length:);scanf(%f, %f, %f, &a, &b , &c); scanf(%f, %f, %f, &a, &b , &c); ifif (a+bc & b+ca & a+cb) (a+bc & b+ca & a+cb)/*/*三角形的基本条件三角形的基本条件三角

67、形的基本条件三角形的基本条件* */ / ifif (a=b | b=c | c=a) (a=b | b=c | c=a)printf(printf(等腰三角形等腰三角形等腰三角形等腰三角形););elseelse ifif (a*a+b*b=c*c | a*a+c*c=b*b | b*b+c*c=a*a) (a*a+b*b=c*c | a*a+c*c=b*b | b*b+c*c=a*a)printf(printf(直角三角形直角三角形直角三角形直角三角形););elseelseprintf(printf(一般三角形一般三角形一般三角形一般三角形);); elseelse printf(pri

68、ntf(不是三角形不是三角形不是三角形不是三角形n);n); 错在哪里?错在哪里?【例例例例5.75.7】判断三角形的类型判断三角形的类型判断三角形的类型判断三角形的类型2024/7/2151/56【例例例例5.75.7】判断三角形的类型判断三角形的类型判断三角形的类型判断三角形的类型一般三角形一般三角形一般三角形一般三角形不是三角形不是三角形不是三角形不是三角形等边等边等边等边等腰等腰等腰等腰直角直角直角直角等腰等腰等腰等腰直角直角直角直角有交叉关系的用并列的有交叉关系的用并列的有交叉关系的用并列的有交叉关系的用并列的ifif非此即彼的用非此即彼的用非此即彼的用非此即彼的用if-elseif

69、-else注意!注意!注意!注意!2024/7/2152/56main()main() floatfloat a, b, c; a, b, c;intint flag = 1; flag = 1;ifif (a+bc & b+ca & a+cb) (a+bc & b+ca & a+cb)/*/*三角形的基本条件三角形的基本条件三角形的基本条件三角形的基本条件* */ / ifif (a=b | b=c | c=a) (a=b | b=c | c=a) printf(printf(等腰等腰等腰等腰););flag = 0;flag = 0; ifif (a*a+b*b=c*c | a*a+c*c

70、=b*b | b*b+c*c=a*a) (a*a+b*b=c*c | a*a+c*c=b*b | b*b+c*c=a*a) printf(printf(直角直角直角直角););flag = 0;flag = 0; if (flag)if (flag) printf(printf(一般一般一般一般);); printf(printf(三角形三角形三角形三角形n);n); elseelse printf(printf(不是三角形不是三角形不是三角形不是三角形n);n); 【例例例例5.75.7】2024/7/2153/56main()main() ifif (a+bc & b+ca & a+cb)

71、 /* (a+bc & b+ca & a+cb) /*三角形的基本条件三角形的基本条件三角形的基本条件三角形的基本条件* */ / if (a=b & b=c & c=a)if (a=b & b=c & c=a) printf(printf(等边等边等边等边););flag = 0;flag = 0; if (a=b | b=c | c=a)if (a=b | b=c | c=a) printf(printf(等腰等腰等腰等腰););flag = 0;flag = 0; ifif (a*a+b*b=c*c | a*a+c*c=b*b | b*b+c*c=a*a) (a*a+b*b=c*c |

72、a*a+c*c=b*b | b*b+c*c=a*a) printf(printf(直角直角直角直角););flag = 0;flag = 0; ifif (flag) (flag)printf(printf(一般一般一般一般););printf(printf(三角形三角形三角形三角形n);n); elseelseprintf(printf(不是三角形不是三角形不是三角形不是三角形n);n); 【例例例例5.75.7】错在哪里?错在哪里?2024/7/2154/56main()main() ifif (a+bc & b+ca & a+cb) /* (a+bc & b+ca & a+cb) /*三

73、角形的基本条件三角形的基本条件三角形的基本条件三角形的基本条件* */ / ifif (a=b & b=c & c=a) (a=b & b=c & c=a) printf(printf(等边等边等边等边););flag = 0;flag = 0; else ifelse if (a=b | b=c | c=a) (a=b | b=c | c=a) printf(printf(等腰等腰等腰等腰););flag = 0;flag = 0; ifif (a*a+b*b=c*c | a*a+c*c=b*b | b*b+c*c=a*a) (a*a+b*b=c*c | a*a+c*c=b*b | b*b+

74、c*c=a*a) printf(printf(直角直角直角直角););flag = 0;flag = 0; ifif (flag) (flag)printf(printf(一般一般一般一般););printf(printf(三角形三角形三角形三角形n);n); elseelseprintf(printf(不是三角形不是三角形不是三角形不是三角形n);n); 【例例例例5.75.7】2024/7/2155/56main()main() ifif (a+bc & b+ca & a+cb) /* (a+bc & b+ca & a+cb) /*三角形的基本条件三角形的基本条件三角形的基本条件三角形的基

75、本条件* */ / ifif (a=b | b=c | c=a) (a=b | b=c | c=a) printf(printf(等腰等腰等腰等腰););flag = 0;flag = 0; else ifelse if (a=b & b=c & c=a) (a=b & b=c & c=a) printf(printf(等边等边等边等边););flag = 0;flag = 0; ifif (a*a+b*b=c*c | a*a+c*c=b*b | b*b+c*c=a*a) (a*a+b*b=c*c | a*a+c*c=b*b | b*b+c*c=a*a) printf(printf(直角直角直角直角););flag = 0;flag = 0; ifif (flag) (flag)printf(printf(一般一般一般一般););printf(printf(三角形三角形三角形三角形n);n); elseelseprintf(printf(不是三角形不是三角形不是三角形不是三角形n);n); 等腰在先等腰在先等边在后等边在后是否可以是否可以? ?【例例例例5.75.7】2024/7/2156/56 Questions and answersQuestions and answers

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 文学/艺术/历史 > 人文/社科

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