第4章 选择结构程序设计(二)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBULecture8SelectionStructures(2/2)——选择结构(2/2)1IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBUCharacteristicsofSelectionStructuresRelationalLogicalExpressionsLogicalExpressionsifStatementsNestedSelectionStructures——if结构的嵌套【重点】嵌套结构的设计方法【难点】else与if的匹配规则ConditionalExpressionsswitchStatementLecture8SelectionStructures(2/2)2IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU预备概念语句的语法单位:完整的if语句构成的选择结构在语法上是一条语句允许出现一条语句之处可以出现一个if语句NestedSelectionStructuresif(E1)S1elseif(E2)S2elseif(E3)S3…elseif(En)SnelseSn+1if(E)Sif(E)S1elseS23IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBUif结构的嵌套概念:在if结构中的语句S1,S2,….中又包含if结构,则称为if结构的嵌套NestedSelectionStructuresif(a!=b)if(ab)printf(”\nab”);else/*此时ab*/printf(”\nab”);elseprintf(”\na==b”);语法上视为一条语句4S1S2IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBUif结构的嵌套if与else的匹配规则【难点】:else总是与它前面最近尚未完结的if配对NestedSelectionStructuresif(a!=b)if(ab)printf(”\nab”);elseprintf(”\na==b”);if(a!=b)if(ab)printf(”\nab”);elseprintf(”\na==b”);if(a!=b){if(ab)printf(”\nab”);}elseprintf(”\na==b”);5{}完结了其内部的if语句课后阅读:【pp100-102】例4.5if(a!=b)if(ab)printf(”\nab”);else;elseprintf(”\na==b”);空语句的作用IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBUif结构的嵌套易读性原则:尽可能避免过深的嵌套,可用if-elseif减少嵌套深度,条件表达式可以用表达式替代if结构NestedSelectionStructuresif(a!=b)if(ab)printf(”\nab”);else/*此时ab*/printf(”\nab”);elseprintf(”\na==b”);if(ab)printf(”\nab”);elseif(ab)printf(”\nab”);elseprintf(”\na==b”);6IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBUif结构的嵌套NestedSelectionStructuresif(E1)S1elseif(E2)S2elseif(E3)S3…elseif(En)SnelseSn+1if(E1)S1elseif(E2)S2elseif(E3)S3…elseif(En)SnelseSn+17等价IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU示例-1:输入当前时刻的时、分、秒,显示增加1秒后的时刻(时:分:秒)如,输入12:16:19时,显示12:16:20输入21:59:59时,显示22:00:00输入23:59:59时,显示00:00:00结构化程序设计要点【算法设计】自顶向下、逐步求精【程序结构】模块化【控制流程】三种控制结构NestedSelectionStructures8IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU算法NestedSelectionStructures9主框架输入时分秒到h,m,s时间合法?YesNo输出错误信息开始结束增加1秒需要细化!输出新时间scanfprintfprintfifelse{}IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU算法NestedSelectionStructures10增加1秒s==60?YesNos=0s++增加1分需要细化!if{}IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU算法NestedSelectionStructures11增加1分m==60?YesNom=0m++增加1小时if{}需要细化!IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU算法NestedSelectionStructures12增加1小时h==24?YesNoh=0h++if编码IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBUNestedSelectionStructures#includestdio.hmain(){unsignedinth,m,s;/*h-时,m-分,s-秒*/}13printf(\nPleaseinputcurrenttime(hh:mm:ss):);scanf(%u:%u:%u,&h,&m,&s);if(h24&&m60&&s60){/*增加1秒*/printf(\nNexttimeis%02u:%02u:%02u,h,m,s);}elseprintf(\nInvalidtime!);主框架s++;if(s==60){s=0;/*增加1分*/}增加1秒m++;if(m==60){m=0;/*增加1小时*/}增加1分h++;if(h==24)h=0;增加1小时IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBUNestedSelectionStructures#includestdio.hmain(){unsignedinth,m,s;/*h-时,m-分,s-秒*/printf(\nPleaseinputcurrenttime(hh:mm:ss):);scanf(%u:%u:%u,&h,&m,&s);if(h24&&m60&&s60){s++;if(s==60){s=0;m++;if(m==60){m=0;h++;if(h==24)h=0;}}printf(\nNexttimeis%02u:%02u:%02u,h,m,s);}elseprintf(\nInvalidtime!);}3个语句3个语句3个语句14为什么不检测是否0?if(++s==60)if(s++==60)表达式计算后副作用产生完毕IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBUif结构的嵌套示例-2:再谈闰年问题算法(y为年度,如2012)如果:y被4整除如果:y不被100整除则:y是闰年否则:如果:y被400整除则:y是闰年否则:y不是闰年否则:y不是闰年NestedSelectionStructures15if-elseif-elseif-elseIntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBUNestedSelectionStructures#includestdio.hmain(){inty,leap;printf(”\nPleaseinputyear”);scanf(”%d”,&y);if(y0){if(y%4==0)if(y%100!=0)leap=1;elseif(y%400==0)leap=1;elseleap=0;elseleap=0;if(leap)printf(”\nLeapyear”);elseprintf(”\nCommonyear”);}elseprintf(”\nInvalidyear!”);}2个语句16变量leap的作用是什么?if(leap==1)…IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBUCharacteristicsofSelectionStructuresRelationalLogicalExpressionsLogicalExpressionsifStatementsNestedSelectionStructuresConditionalExpressions——条件表达式【重点】表达式计算规则【难点】优先级与结合性switchStatementLecture8SelectionStructures(2/2)17IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU运算符?:表达式格式其中E1,E2,E3为表达式,E1与if语句中条件的含义一致求值规则——具有严格求值顺序右结合计算E1如果E1非0,计算E2(不计算E3),即为表达式的最终值如果E1为0,计算E3(不计算E2),即为表达式的最终值ConditionalExpressionsE1?E2:E318IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU特点唯一的三目运算优先级:低于逻辑运算,高于赋值运算结合性:右结合优先级、结合性与求值顺序示例j=i%2==0?1:0;如果i为偶数,把1赋给j,否则把0赋给j(注意优先级)n0?m0?(i=1):(j=1):(k=1)注意结合性与求值顺序:n0一定被先检测!试验时可先把i,j,k初始化为0ConditionalExpressions19可读性差!!()算术运算符关系运算符&&||?:()赋值运算符()逗号运算符右边完整的?:if(n0)if(m0)i=1;/*表达式的值*/elsej=1;/*表达式的值*/elsek=1;/*表达式的值*/IntelligentInformationProcessingLab.,Dept.ofComputerSci.&Tech.,YBU表达式E1?E2:E3值的类型当E2和E3的类型不同时,按隐含类型转换规则对E2和E3的结果进行类型统一决定整个表达式的类型不论E2和E3中之一是否被计算,参照

1 / 46
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功