




已阅读5页,还剩42页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章选择结构程序设计 2 0 本章内容 控制结构选择结构三种结构形式单分支 双分支 多分支两种语句格式if elseif else switchbreak语句在switch中的作用嵌套选择结构 3 1 选择结构 选择结构的特征程序的流程由多路分支组成在程序的一次执行过程中 根据不同情况只有一条支路被选中执行其他的分支上的语句被直接跳过选择结构的要素语句if语句switch语句条件 4 1 选择结构 选择结构的要素条件由关系表达式或由关系表达式组合而成的逻辑表达式用数值1表示逻辑 真 用0表示逻辑 假 在判断条件时又以非0为 真 以0为 假 少数情况下也可以是算术表达式这个表达式的结果将决定程序下一步的执行顺序例C1是否为小写字母的条件是 X在 1 10 和 200 210 之间为真 否则为假的条件是 c1 a c1 z x 1 x 200 x 210 5 1 选择结构 选择结构的要素条件由关系表达式或由关系表达式组合而成的逻辑表达式用数值1表示逻辑 真 用0表示逻辑 假 在判断条件时又以非0为 真 以0为 假 少数情况下也可以是算术表达式这个表达式的结果将决定程序下一步的执行顺序例C1是否为小写字母的条件是 X在 1 10 和 200 210 之间为真 否则为假的条件是 c1 a c1 z x 1 x 200 x 210 6 2 if语句 简单if语句语句格式 if 表达式 s1 表达式表示对一个条件的判断表达式的结果为0或1通常为关系表达式或逻辑表达式也可以直接表示成某一数值表达式必须用括号s1从语法上应是一条语句当在此执行多条语句 必须用大括号将它们括起来 构成复合语句语法上它仍然是一条语句 7 执行过程计算表达式的值若为 真 则执行语句1否则将跳过语句1执行if语句的下一条语句 8 2 if语句 简单if语句例if x y 9 2 if语句 简单if语句例if x y 10 2 if语句 简单if语句例 计算一个整数的绝对值 main inta absa printf enteronenumber scanf d a absa a if a 0 absa a printf d d a absa 11 2 if语句 if esle 语句语句格式 明确指出作为表达式为 真 时做什么 为 假 时做什么功能计算表达式的值若表达式的值为 真 执行s1 并跳过s2 继续执行if else语句的下一条语句若表达式的值为 假 跳过s1 执行s2 继续执行if else语句的下一条语句提示S1和S2每次只能有一个被执行 if e S1 elseS2 12 2 if语句 例3 题可改写为 main inta absa printf enteronenumber scanf d main inta absa printf enteronenumber scanf d a absa a if a 0 absa a printf d d a absa 13 2 if语句 例4 求分段函数值 main floatx y scanf f 14 例5 输入整数a和b 若a2 b2大于100 则输出a2 b2百位以上的数字 否则输出两数之和 main inta b x y scanf d d a b x a a b b if x 100 y x 100 printf d y elseprintf d a b main inta b scanf d d a b if a a b b 100 printf d a a b b 100 elseprintf d a b 2 if语句 17 2 if语句 if elseif 语句对于一个问题可能需要从多方面进行判断 有多种可能的情况进行处理语句格式 if 表达式e1 语句S1 elseif 表达式e2 语句S2 elseif 表达式e3 语句S3 else语句Sn 18 2 if语句 if elseif 语句执行过程示意图 e1 语句S1 e2 语句S2 en 语句Sn 语句Sn 1 提示 这是一条语句属于双分支结构的嵌套 19 2 if语句 例 求分段函数的值 20 2 if语句 源程序 include math h include stdio h main floatx y printf enterax scanf f x if x 1 0 y x x 2 x sin X elseif x 10 0 y 2 x 1 elsey sqrt 3 x x 1 printf x f y f x y 21 2 if语句 If语句嵌套if语句体中又包含一个或多个if语句 称为if语句的嵌套在简单if语句和if else语句形式中 s1或s2可以是任意合法语句当s1或s2也是if语句 就构成嵌套的if语句嵌套形式 if e1 if e2 s1 elses2 elses3 if e1 if e2 s1 elses2 if e1 s1 elseif e2 s2 elses3 22 2 if语句 If语句嵌套C语言规定的原则从最内层开始 else总是与它前面最近的同一复合语句内的不带else的if结合如果if和else的数目不统一 可以加 明确配对关系提示嵌套中的if与else的配对关系非常重要对多重if 最容易犯的错误就是if与else配对错误即使 表达式 的后面只有一条语句 也尽量不要省略花括号 这样做的目的不单单是为了解决if和else配对的问题 更主要是为了以后对程序进行修改做准备 23 2 if语句 If语句嵌套 例如 if x if y printf y n elseif z printf z n elseprintf x n if x if y printf y n else if z printf z n else printf x n 不仅解决了问题 也使程序结构和层次清晰 如果要实现例中书写形式的意图 可写成如下形式 if x if y printf y n else if z printf z n else printf x n 24 2 if语句 If语句嵌套程序的书写缩排所谓缩排 就是上一行与下一行相比 行首向右缩进若干字符适当的缩排使程序的结构 层次清晰 一目了然 增加程序的易读性 复合语句在if结构中的使用if语句中有时需要执行的语句不止一条 需要采用复合语句无论包括多少条语句 复合语句从逻辑上将被看成是一条语句复合语句在分支结构和循环结构中 使用的非常普遍 十分广泛 25 2 if语句 例 阅读程序回答问题 includemain inta b m n scanf d d 1 当输入为 1 2 程序的运行结果为多少 2 当输入为10 程序的运行结果为多少 3 为了输出n 4 变量a和b应具备的条件是什么 m 1n 2 m 2n 3 0 a b 26 2 if语句 例 从键盘上输入每个学生三门课程的成绩 计算其平均值当平均成绩高于90分时 输出A 平均分在80 89之间 输出B 平均分在70 79之间 输出C 平均分在60 69之间 输出D 平均成绩不及格 小于60分 时输出E 27 2 if语句 程序代码 main intinp1 inp2 inp3 sum ave printf Enterstudentsscoresinthreetests n scanf d d d 28 2 if语句 使用if语句 使用if语句 if ave 90 printf A if ave 80 if ave 90 printf A elseif ave 80 printf B elseif ave 70 printf C elseif ave 60 printf D elseprintf E 29 2 if语句 提示if语句中花括号 与分号 的使用一般地 语句部分需要采用 括起来其中各条语句后必须有 表示其结束当仅有一条语句时 可以省略表达式的使用常见的表达式是逻辑表达式或关系表达式也可以是任意的数值类型整型 实型 字符型 指针型数据等因为在if中只要表达式的值为非0 则认为是 真 逻辑1 否则 被认为是 假 逻辑0 多分支语句的选择用if语句嵌套实现的多分支结构 分支较多 容易使程序冗长不清晰 可读性差应使用C语言提供的switch开关语句专门处理多分支结构可以简化程序的结构 程序简洁 2 If语句的练习 习题P111 5 4 5 5 5 6 31 3 switch语句 switch语句功能可以根据某一表达式的不同取值 直接进行多分支选择处理语句格式 语句格式 switch 表达式e case常量表达式a1 语句序列S1 break case常量表达式a2 语句序列S2 break case常量表达式an 语句序列Sn break default 语句S 32 3 switch语句 switch语句执行示意图 33 3 switch语句 switch语句执行过程首先计算表达式的值表达式的结果只能是整数 字符或枚举量将e的值依次与每一个case后的常量表达式ai a1 a2 ai an 进行比较常量表达式ai不允许重复如果相等 执行常量表达式ai后的语句序列Si若si结束处有break语句 则跳出switch语句 执行结束若没有break语句 在执行完Si后将无条件的继续执行下一条case语句的语句此时并不再检查后面的case后的标号ai是否与e的值相等如果未找到与之匹配的常量表达式ai 则做如下处理若有default语句 则执行default后的语句序列S后结束若没有default语句 switch语句直接结束 什么也没有做 34 3 switch语句 switch语句提示特殊情况下 如果switch表达式的多个值都需要执行相同的语句可以采用下面的格式 switch i case1 case2 case3 语句1 break case4 语句2 break case5 case6 语句3 break default 语句4 执行过程 当整型变量i的值为1 2或3时 执行语句1 当整型变量i的值为4时执行语句2 当整型变量i的值为5 6时 执行语句3 否则执行语句4 35 3 switch语句 switch语句例 输入月份打印1999年该月有多少天 includemain intmonth intday printf pleaseinputthemonthnumber scanf d month switch month case1 case3 case5 case7 case8 case10 case12 day 31 break case4 case6 case9 case11 day 30 break case2 day 28 break default day 1 if day 1 printf invalidmonthinput n elseprintf 1999 dhas ddays n month day 36 3 switch语句 switch语句提示switch后面括号中可以是任何表达式 取其整数部分与各常量表达式进行比较常量表达式中不能出现变量 且类型必须是整型 字符型或枚举型各常量表达式互不相同语句si可以是一条或多条语句 多条语句时不必用 将它们括起来语句si处也可以没有语句 程序执行到此会自动向下顺序执行采用一个break语句或return语句退出switch语句是必要的default语句一般出现在所有case语句之后 也可以出现在case语句之前或两个case语句之间default语句可以缺省使用switch语句的前提条件是条件表达式必须是基于同一个整型 或字符型 变量实型和字符串都是不允许的 37 3 switch语句 switch语句什么时候用一条switch语句比用多条if语句更好 switch语句与if语句不同switch语句只能对等式进行测试if语句可以计算关系表达式或逻辑表达式等如果有两条以上基于同一个整型变量的条件表达式 那么最好使用switch语句例如 if x 1 printf xisequaltoone n elseif x 2 printf xisequaltotwo n elseif x 3 printf xisequaltothree n elseprintf xisnotequaltoone two three n 38 3 switch语句 switch语句 不如使用如下switch代码 它更易于阅读和维护 switch x case1 printf xisequaltoone n break case2 printf xisequaltotwo n break case3 printf xisequaltothree n break default printf xisnotequaltoone two three n 39 3 switch语句 switch嵌套语句在switch语句中 每个case后面可以出现另一个switch语句 从而形成嵌套switch语句例 阅读下面程序 计算结果 includemain inta 2 b 7 c 5 switch a 0 case1 switch b 0 case1 printf break case2 printf break case2 switch c 5 case0 printf break case1 printf break default printf break default printf 执行结果 40 4 例题 main inta b c printf inputa b c n scanf d d d a b c if a b min a elsemin b if c min min c printf theresultis d n min 例1 输入三个数 找出并打印最小数算法如下设3个数分别是a b和c将a b中较小者赋值给min用min与c进行比较 取其中较小者重新赋值给min将min作为最后结果输出 41 4 例题 例2 编写一个程序根据用户输入的三角形的三边判定三角形的类型并求其面积算法分析设三角形的三变为a b c是否能组成三角形条件a b c a c b b c a如果组成三角形计算三角形的面积判断是什么类型三角形 等边三角形等腰三角形直角三角形一般三角形 42 4 例题 程序代码 include stdio h include math h main floata b c floats area printf a b c scanf f f f 43 4 例题 例3 编写一个程序 完成两个数的四则运算 数与运算符由键盘给入 分析调用输入函数输入操作数和运算符四则运算规则问题 怎样将 运算加入 includemain floatx y charop printf ntypeinyourexpression scanf f c f 44 4 例题 switch op case printf 6 2f c 6 2f 6 2f n x op y x y break case printf 6 2f c 6 2f
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 司索工安全培训课件
- 消防学校面试题目及答案
- 相关学科面试题目及答案
- 机械厂生产安全知识培训课件
- 文书专业面试题目及答案
- 移动商务基础(第二版)教案 第八章 社会化客户服务
- 维稳面试题目及答案
- 铜川医院面试题目及答案
- 青教版三上数学试卷
- 牡丹江六月冲刺数学试卷
- 2025年特种设备监管b证考试试题及答案
- 2025年少先队知识竞赛试题库附答案
- 2025年事业单位工勤技能-湖北-湖北防疫员二级(技师)历年参考题库含答案解析(5卷)
- 一键报警管理办法
- GB/T 9775-2025纸面石膏板
- 2024年广州越秀区招聘社区专职工作人员真题
- 防蚊培训课件
- 北方民族大学《高等数学Ⅱ》2025-2026学年期末试卷(A卷)
- 弥漫性大B细胞淋巴瘤病例讨论
- 2025年医院血透室人员培训工作计划
- 2025年公务员考试时政热点必做题(附答案)
评论
0/150
提交评论