




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本章学习内容算法的描述方法用于单分支控制的if语句用于双分支控制的if-else语句用于多路选择的switch语句
break语句在switch语句中的作用关系运算符条件运算符逻辑运算符程序测试第1页/共51页第一页,共52页。生活中的问题求解:Problem:
烤蛋糕(BakingaCake)Howtosolve:
Start
将烤箱预热
准备一个盘子
在盘子上抹上一些黄油
将面粉、鸡蛋、糖和香精混合在一起搅拌均匀将搅拌好的面粉团放在盘子上
将盘子放到烤箱内End5.1生活中与计算机中的问题求解
(ProblemSolvingProcess)第2页/共51页第二页,共52页。
分治策略
("DivideandConquer"Strategy)Problem:
准备早餐(PrepareaBreakfast)
1. Start2. 准备早餐3. End第3页/共51页第三页,共52页。1.Start2.准备早餐
2.1准备一个金枪鱼三明治2.2准备一些薯条2.3冲一杯咖啡3.End
分治策略
("DivideandConquer"Strategy)第4页/共51页第四页,共52页。1.Start2.准备早餐
2.1准备一个金枪鱼三明治2.1.1拿来两片面包2.1.2准备一些金枪鱼酱
2.2准备一些薯片2.3冲一杯咖啡3.End
分治策略
("DivideandConquer"Strategy)第5页/共51页第五页,共52页。1.Start2.准备早餐2.1准备一个金枪鱼三明治2.1.1拿来两片面包2.1.2准备一些金枪鱼酱
2.2准备一些薯片
2.2.1将土豆切成片2.2.2油炸这些土豆片
2.3冲一杯咖啡3.End分治策略
("DivideandConquer"Strategy)
第6页/共51页第六页,共52页。分治策略("DivideandConquer"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.End第7页/共51页第七页,共52页。5.2算法的概念及其描述方法面向对象程序=对象+消息面向过程的程序=数据结构+算法计算机中的算法(Algorithm)为解决一个具体问题而采取的、确定的、有限的操作步骤,仅指计算机能执行的算法Aspecificandstep-by-stepsetofinstructionsforcarryingoutaprocedureorsolvingaproblem,usuallywiththerequirementthattheprocedureterminateatsomepoint第8页/共51页第八页,共52页。5.2算法的概念及其描述方法算法的特性有穷性在合理的时间内完成确定性,无歧义如果x≥0,则输出Yes;如果x≤0,则输出No有效性能有效执行负数开平方没有输入或有多个输入有一个或多个输出第9页/共51页第九页,共52页。5.2算法的概念及其描述方法算法的描述方法自然语言描述传统流程图(Flowchart)在1966年,Bohra与Jacopini提出N-S结构化流程图1973年,美国学者I.Nassi和B.Shneiderman提出伪码(Pseudocode)表示第10页/共51页第十页,共52页。流程图(Flowchart)Flowchartrepresentsalgorithmgraphically.Start/EndSymbolSemanticProcessInput/OutputTestConnectorFlowofactivities第11页/共51页第十一页,共52页。计算机中的问题求解过程Example:买苹果,计算价钱Calculateanddisplaythepriceofanumberofapplesifthequantityinkgandpriceperkgaregiven.
quantitypricePerkgpriceprice=quantity*pricePerkgInputProcessOutputFirstidentifytheinputandoutputoftheproblem.第12页/共51页第十二页,共52页。顺序结构(Sequence
Structure)给变量赋值赋值表达式语句
赋值表达式;
price=quantity*pricePerkg;输入输出数据标准库函数调用语句
scanf("%d",&pricePerkg);
printf("%d",price);ABC第13页/共51页第十三页,共52页。【例5.1】计算两整数的最大值
num1num2max????InputProcessOutput第14页/共51页第十四页,共52页。if-elseSingleSelectionDoubleSelectionMultipleSelectionifif-else-if选择结构(分支结构)
(SelectionStructure)第15页/共51页第十五页,共52页。5.3关系运算符与关系表达式RelationalOperationDescriptionExamplesofExpressionValue<Lessthan6<91(true)<=Lessthanorequalto5<=51(true)>Greaterthan2>60(false)>=Greaterthanorequalto9>=51(true)==Equalto7==50(false)!=Notequalto6!=51(true)第16页/共51页第十六页,共52页。5.4用于单分支控制的条件语句
(SingleSelection)StepaconditionStepmStepnStepxtruefalsestepaconditionstepmstepnstepbtruefalsePseudocodeStructurestepaif<conditionistrue>start stepm stepnend_ifstepb第17页/共51页第十七页,共52页。ifStatementThestructureissimilartosingleselection(flowchart)Syntax:
if
(expression) statement;or
if
(expression){ statement1; statement2; }复合语句compoundstatement被当做一条语句看待表达式非0为真第18页/共51页第十八页,共52页。ifStatementThestructureissimilartosingleselection(flowchart)Syntax:
if
(expression) statement;or
if
(expression){ statement1; statement2; }Don’tforgetthebraces
!!Don’tforgettheparentheses
!!第19页/共51页第十九页,共52页。#include<stdio.h>main(){inta,b,max;printf("Inputa,b:");scanf("%d,%d",&a,&b);
if(a>b) max=a;if(a<=b) max=b;printf("max=%d\n",max);}Inputa,b:_Inputa,b:2015_Inputa,b:2015max=20_【例5.1】计算两整数的最大值第20页/共51页第二十页,共52页。PseudocodeStructureStepaif<conditionistrue>start Stepm Stepnend_ifelsestart Stepx Stepyend_elseStepzStepaconditionStepmStepnStepztruefalseStepxStepyStepaconditionStepmStepnStepztruefalseStepxStepy5.5用于双分支控制的条件语句(
Double
Selection)第21页/共51页第二十一页,共52页。if-else
StatementThestructureissimilartodoubleselection(flowchart)Syntax:
if
(expression)
statement1;
else
statement2;or
if
(expression)
{ statement1; statement3;}
else
{ statement2; statement4;}第22页/共51页第二十二页,共52页。NoYesFlowchart:CalculatetheMaximumInputaandbOutputmaxa>b?maxbmaxaStartEnd【例5.2】计算两整数的最大值第23页/共51页第二十三页,共52页。scanf("%d,%d",&a,&b);if(a>b)max=a;elsemax=b;TurnFlowcharttoCProgramNoYesInputaandbOutputmaxa>b?maxbmaxaStartEnd【例5.2】计算两整数的最大值printf("max=%d\n",max);第24页/共51页第二十四页,共52页。#include<stdio.h>main(){inta,b,max;
printf("Inputa,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】计算两整数的最大值第25页/共51页第二十五页,共52页。#include<stdio.h>main(){inta,b,max;
printf("Inputa,b:");scanf("%d,%d",&a,&b);
if(a>b) max=a;
else max=b;printf("max=%d",max);}}
max=a>b?a:b;表达式1?表达式2:表达式35.6条件运算符和条件表达式【例5.3】第26页/共51页第二十六页,共52页。5.7用于多分支控制的条件语句
(MultipleSelection)Multi-wayifStepaif
(expression1){ Stepm}if
(expression2)
{ Stepn}StepzStepaexpression1StepmStepnStepztruefalseexpression2truefalseStepaexpression1StepmStepnStepztruefalseexpression2truefalse第27页/共51页第二十七页,共52页。5.7用于多分支控制的条件语句
(MultipleSelection)CascadedifStepaif
(expression1){ Stepm}elseif
(expression2){ Stepn}
else{ Stepx}StepzStepaexpression1StepmStepnStepztruefalseexpression2truefalseStepxStepaexpression1StepmStepnStepztruefalseexpression2truefalseStepx第28页/共51页第二十八页,共52页。5.8用于多路选择的switch语句
Thestructureissimilartomultipleselection(flowchart)switch(expression){
case
value1:
statement1; break;
case
value2:
statement2; break;
……
default
:
statementX; break;}Don’tforgetthebraces!!Don’tforgetthecolons!!Don’tforgettheblank!!
第29页/共51页第二十九页,共52页。ImportantRule!switch(expression){
case
value1:
statement1; break;
case
value2:
statement2; break;
……
default
:
statementX; break;}Mustbeintorchar!5.8用于多路选择的switch语句
注意!第30页/共51页第三十页,共52页。Example:switch(month){ case1: printf("January\n"); break; case2: printf("February\n"); break; case3: printf("March\n"); break; default: printf("Others\n"); break; } printf("End");Assumemonth=1,so……thisstepwillbeexecuted.Later……caseisterminatedhere.Jumpto…January_JanuaryEnd_5.8用于多路选择的switch语句
第31页/共51页第三十一页,共52页。Example:switch(month){ case1: printf("January\n"); break; case2: printf("February\n"); break; case3: printf("March\n"); break; default: printf("Others\n"); break; } printf("End");…thisstepwillbeexecuted.Later…March_MarchEnd_Assumemonth=3,so……caseisterminatedhere.Jumpto…5.8用于多路选择的switch语句
第32页/共51页第三十二页,共52页。Example:switch(month){ case1: printf("January\n"); break; case2: printf("February\n"); break; case3: printf("March\n"); break; default: printf("Others\n"); break;}printf("End");Now…whatwillhappenifthisbreakistakenoutfromtheprogram?5.8用于多路选择的switch语句
第33页/共51页第三十三页,共52页。Example:switch(month){ case1: printf("January\n"); break; case2: printf("February\n");
case3: printf("March\n"); break; default: printf("Others\n"); break; } printf("End");Nomore!5.8用于多路选择的switch语句
第34页/共51页第三十四页,共52页。Example:switch(month){ case1: printf("January\n"); break; case2: printf("February\n");
case3: printf("March\n"); break; default: printf("Others\n"); break; } printf("End");…thisstepwillbeexecuted.Later…February_March_Assumemonth=2,so……caseisterminatedhere.Jumpto…End_…executioncontinues.Thus,thisstepisexecuted.So…5.8用于多路选择的switch语句
第35页/共51页第三十五页,共52页。Example:switch(month){ case1: printf("January\n"); break; case2: printf("February\n");
case3: printf("March\n"); break; default: printf("Others\n"); break;} printf("End");Now…whatwillhappenifthesebreaksaretakenoutfromtheprogram?And…ifmonth=1?And…ifmonth=34?5.8用于多路选择的switch语句
最好不省略!第36页/共51页第三十六页,共52页。【例5.5】计算器程序编程设计一个简单的计算器程序,要求用户从键盘输入如下形式的表达式:操作数1运算符op操作数2
然后,计算并输出表达式的值指定的运算符为 加(+) 减(-) 乘(*) 除(/)第37页/共51页第三十七页,共52页。main(){
intdata1,data2;/*定义两个操作符*/
charop;/*定义运算符*/ printf("Pleaseentertheexpression:"); scanf("%d%c%d",&data1,&op,&data2);/*输入运算表达式*/
switch(op) {
case'+':/*处理加法*/ printf("%d+%d=%d\n",data1,data2,data1+data2);
break;
case'-':/*处理减法*/ printf("%d-%d=%d\n",data1,data2,data1-data2);
break;
case'*':/*处理乘法*/ printf("%d*%d=%d\n",data1,data2,data1*data2);
break;
case'/':/*处理除法*/
if(0==data2) printf("Divisionbyzero!\n");
else
printf("%d/%d=%d\n",data1,data2,data1/data2);
break;
default: printf("Invalidoperator!\n"); }}【例5.5】Why?注释掉会怎样?第38页/共51页第三十八页,共52页。思考题语句if(0==data2)的必要性——避免“除零错误”1998年11月,《科学美国人》杂志描述了美国导弹巡洋舰约克敦号上的一起事故,除零错导致军舰推进系统的关闭为什么不用if(data2==0)?如果要求输入的算术表达式中的操作数和运算符之间可以加入任意多个空格符,那么程序如何修改?第39页/共51页第三十九页,共52页。main(){
intdata1,data2;
charop; printf("Pleaseentertheexpression:"); scanf("%d%c%d",&data1,&op,&data2);/*%c前有一个空格*/
switch(op) {
case'+': printf("%d+%d=%d\n",data1,data2,data1+data2);
break;
case'-': printf("%d-%d=%d\n",data1,data2,data1-data2);
break;
case'*': printf("%d*%d=%d\n",data1,data2,data1*data2);
break;
case'/':
if(0==data2) printf("Divisionbyzero!\n");
else
printf("%d/%d=%d\n",data1,data2,data1/data2);
break;
default: printf("Invalidoperator!\n"); }}【例5.5】空格第40页/共51页第四十页,共52页。思考题如果要求对浮点数进行运算,那么程序如何修改?修改例5.5程序,使其能进行浮点数的算术运算,同时允许使用字符*、x与X作为乘号,并且允许输入的算术表达式中的操作数和运算符之间加入任意多个空格符。第41页/共51页第四十一页,共52页。main(){
floatdata1,data2;
charop; printf("Pleaseentertheexpression:"); scanf("%f%c%f",&data1,&op,&data2);
switch(op) {
case'+': printf("%f+%f=%f\n",data1,data2,data1+data2);
break;
case'-': printf("%f-%f=%f\n",data1,data2,data1-data2);
break;
case'*':
case'x': case'X': printf("%f*%f=%f\n",data1,data2,data1*data2);
break;
case'/':
if(fabs(data2)<=1e-7)/*实数与0比较*/ printf("Divisionbyzero!\n");
else
printf("%f/%f=%f\n",data1,data2,data1/data2);
break;
default: printf("Invalidoperator!\n"); }}【例5.6】取绝对值函数第42页/共51页第四十二页,共52页。Symbol
Description
&& 与(AND)当且仅当两者都为真,则结果为真|| 或(OR)只要两者中有一个为真,结果就为真! 非(NOT)aba&&ba||b!a!b0000110101101001011111005.9逻辑运算符和逻辑表达式
(LogicOperatorsandLogicExpression)!&&||高低第43页/共51页第四十三页,共52页。ch是大写英文字母(ch>='A')&&(ch<='Z')判断某一年year是否是闰年的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年质量知识考试题库及答案
- 2025年营养学专业考生测评试题及答案
- 护理伦理学题库各章解析及答案解析
- 2025年铁道专业考试题及答案
- 初三物理中考试卷及答案
- 陕西省安全c证题库练习及答案解析
- lng安全知识测试题及答案解析
- 基金资格从业考试模拟及答案解析
- 北京的安全员考试题库及答案解析
- 护理学教育题库及答案解析
- 矿井避震知识培训课件
- 呼衰患者的肠内营养
- 《抗生素的临床应用》课件
- 微生物检验技能-细菌的生化试验
- 导数的应用-函数的零点问题(5题型分类)-2025年高考数学一轮复习(解析版)
- 2025年1月上海市春季高考模拟英语试卷(含答案解析)
- 中国慢性阻塞性肺疾病基层诊疗指南(2024年)解读
- 第十中学八年级上学期语文10月月考试卷(含答案)
- 2024年代还款三方协议书模板范本
- 外研版(2024)七年级上册 Unit 2 More than fun练习(含答案)
- 江苏省南京市联合体2024-2025学年八年级上学期期中考试语文试题含答案
评论
0/150
提交评论