




已阅读5页,还剩38页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章选择结构 本章要点 4 1关系运算和逻辑运算4 2if语句和用if语句构成的选择结构4 3条件表达式构成的选择结构4 4switch语句以及用switch语句和break语句构成的选择结构4 5语句标号和goto语句 4 1关系运算和逻辑运算 4 1 1C语言中的逻辑值C语言中 参与逻辑运算的量为非零值或整数零 非零值和整数零分别表示运算量为 真 或 假 逻辑运算的结果值 即逻辑表达式的值应该是一个逻辑值 真 或 假 C语言编译系统在给出逻辑运算结果时 以数值1代表 真 以0代表 假 但在判断一个量是否为 真 时 以0代表 假 以非0代表 真 4 1 2关系运算符和关系表达式关系运算实际上就是 比较运算 将两个数进行比较 判断比较的结果是否符合指定的条件 1 关系运算符关于关系运算符的说明 1 表4 1中前4种运算符 的优先级别相同 后两种也相同 前4种优先级别高于后两种 如 优先级别高于 2 关系运算符与算术运算符 赋值运算符的优先级关系如下 算术运算符 高 关系运算符 中 赋值运算符 低 即 算术运算符优先级别高于关系运算符 关系运算符优先级别又高于赋值运算符 3 关系运算符的结合方向是 自左向右 C语言有六种关系运算符 如表4 1所示 表4 1C语言中的关系运算符 2 关系表达式及关系表达式的值用关系运算符将两个表达式 算术表达式 关系表达式 逻辑表达式 赋值表达式 字符表达式等 连接起来的式子 称关系表达式 例如 a b a c等 在C语言中 关系表达式的结果值为1或0 当关系表达式成立时 其结果值为1 否则 其值为0 若a 10 b 6 表达式a b为 真 其值为1 当关系运算符两边的值类型不一致时 系统将自动进行转换 转换规则与双目运算中的类型转换规则相同 关系运算示例 试求x 5 3 1的值 分析 x 5 3 1相当于 x 5 3 1 1 1 0故x的值为0 关系表达式主要用于选择结构中的条件判断 重点提示 表示 等于 关系的运算符 和 不等于 关系的运算符 与数学中的表示方法不同 在使用它们时请予以注意 以免写错关系运算符而导致错误的结果 例如 欲判断x是否等于0 如果写成 x 0就不是判断x是否等于0的含义了 而成了把0赋值给变量x 正确的写法应为 x 0 4 1 3逻辑运算符和逻辑表达式1 C语言中的逻辑运算符关系表达式只适于描述单一的条件 对于较复杂的复合条件就需要将若干个关系表达式连接起来才能描述 如描述 x大于0且不等于2 就需要将两个关系表达式x 0和x 2连接起来 x 0 x 2 其中 是C语言中的逻辑运算符 C语言提供了三种逻辑运算符 如表4 2所示 表4 2C语言中的逻辑运算符 关于逻辑运算符的说明 1 逻辑运算符的优先次序如下 高 中 低 2 逻辑运算符具有自左向右的结合性 3 逻辑运算符与赋值运算符 关系运算符 算术运算符的优先次序如下 由高到低 逻辑非 算术运算 关系运算 逻辑与 逻辑或 赋值运算 例如 a b x y 可以写为 a b x y a b x y 可以写为 a b x y a a b 可以写为 a a b2 逻辑表达式和逻辑表达式的值用逻辑运算符将关系表达式或逻辑值连接起来的式子称逻辑表达式 一个逻辑表达式中可以包含多个逻辑运算符 如x y a b c参与逻辑运算的量为非零值或整数零 非零值和整数零分别表示运算量为 真 或 假 逻辑运算的结果值 即逻辑表达式的值应该是一个逻辑值 真 或 假 即为 1 或 0 表4 3为逻辑运算的运算规则表 用它表示当a和b的值为不同组合时 各种逻辑运算所得到的值 以下是关于逻辑运算的几点说明 1 参与逻辑运算的量不但可以是0和1 或者是0和非零的整数 也可以是任何类型的数据 如字符型 实型或指针型等 但最终以0和非0来判定它们属于 真 或 假 2 在逻辑表达式求解中 并不是所有逻辑运算符都需要执行 有时只需执行一部分运算符就可得出逻辑表达式的最后结果 例如x y z 只有x为真时才需要判断y的真假 若x为假 则立即得出整个表达式为假 3 逻辑表达式的运用场合与关系表达式完全相同 也是用于流程控制语句中的条件描述 只不过 关系表达式描述的是单一的条件 逻辑表达式描述的是复合的条件 4 在处理一个复杂表达式时 对于表达式中不同位置上出现的数值 应区分哪些是作为数值运算或关系运算的对象 哪些作为逻辑运算的对象 例如求下列表达式的值 8 5 2 6 5 在关系运算符 两侧的8和5作为数值参加关系运算 8 5的值为1 再进行1 2 6 5 0运算 自左至右扫描求解 两侧的1和2作为逻辑运算对象 因为参加运算的皆为非0 故结果为1 接下来进行1 6 5 0运算 6的左侧为 运算符 右侧为 运算符 根据优先级别 应先进行 的运算 即先进行6 5 0运算 现在5的左侧为 运算符 右侧为 运算符 而 优先于 因此 应先进行5 0的运算 又由于 的优先级别最高 故先进行 0的运算 得结果1 然后进行5 1运算 得结果为4 下面再进行6 4运算 得结果为0 最后进行1 0运算 得到1 故表达式的值为1 重点提示 在逻辑表达式求解中 并不是所有逻辑运算符都需要执行 有时只需执行一部分运算符就可得出逻辑表达式的最后结果 4 2if语句和用if语句构成的选择结构4 2 1if语句if语句是选择结构的一种形式 又称为条件分支语句 它的流程控制方式是 根据给定的条件进行判定 由判定的结果 真或假 决定执行给出的两种操作之一 C语言中提供了三种形式的if语句 不含else的if语句 if else语句和if else if语句 1 不含else的if语句 1 语句形式如下 if 表达式 语句圆括号中的表达式一般是关系表达式或逻辑表达式 用于描述选择结构的条件 但也可以是其他任意的数值类型表达式 包括整型 实型 字符型等 如果在if子句中需要多个语句 则应该使用大括号 把一组语句组成复合语句 2 执行过程首先计算if后面圆括号中的表达式的值 若为非0值 则执行语句1 然后脱离本选择结构 继续执行if语句的下一个语句 否则不执行语句1 直接转去执行if语句的下一个语句 图4 1if语句程序流程图 图4 2if else语句执行过程 2 if else语句 1 语法形式如下 if 表达式 语句1 else语句2 语句1称为if子句 语句2称为else子句 这些子句只允许是一条语句 若需要多条语句时 则应该使用 将这些语句括起来组成复合语句 另外要注意 else不是一条独立的语句 它只是if语句的一部分 因此在程序中else必须与if配对 2 执行过程首先计算圆括号内的表达式值 若为非0值 则执行语句1 然后脱离本选择结构 继续执行if语句的下一个语句 否则执行语句2 然后脱离本选择结构 继续执行if语句的下一个语句 3 if else if语句 1 语法形式如下 if 表达式1 语句1 elseif 表达式2 语句2 elseif 表达式3 语句3 elseif 表达式n 1 语句n 1 else语句n 2 执行过程若表达式1为真 执行语句1 否则进行下一步判断 若表达式2为真 执行语句2 否则进行下一步判断 最后所有表达式都为假时 执行语句n if else if语句的执行过程如图4 3所示 重点提示 使用if else if语句时 请注意各个分支结构的条件一定要按照某种顺序书写 这样做不仅使程序条理清晰 而且能使条件书写简捷 不易出错 4 2 2嵌套的if语句在if语句中又包含一个或多个if语句称为if语句的嵌套 以下是C语言中if else语句的二重嵌套的三种形式 1 在if子句中嵌套具有else子句的if语句 如图4 4 a 所示 2 在if子句中嵌套不含else子句的if语句 如图4 4 b 所示 3 在else子句中嵌套if语句 如图4 4 c 所示 图4 4嵌套的if语句结构 如果把嵌套写成如下形式 if 表达式1 if 表达式2 语句1 else语句2 程序设计者把else与第一个if书写在同一列 试图以此表示它们的匹配的 但是 根据if和else配对规则 else却是与第二个if配对 因为离它最近 由此可见 C语言不是以书写格式来分隔语句的 而是由逻辑关系决定的 当if和else的数目不等时 为了保险起见 也可以用一对大括号括起来确定配对关系 可作如下处理 if 表达式1 if 表达式2 语句1 else语句2 例如 从键盘输入两个整数 试比较它们的大小 main inta b printf Pleaseentertwointegers n scanf d d 程序运行结果为 Pleaseentertwointegers 3 5739 6Pleaseentertwointegers 456 456456 456里层的if else语句是外层条件语句if下的嵌套语句 它虽然占据多个书写行 却不是复合语句 可以作为一个语句看待 因此无须用一对大括号括起来 重点提示 在嵌套内的if语句既可以是if语句形式也可以是if else语句形式 这就会出现多个if和多个else重叠的情况 此时要特别注意if和else的配对问题 if和else配对规则为 else总是与它前一个最近的if配对 4 3条件表达式构成的选择结构对于有些选择分支结构 C语言另外还提供了一个特殊的运算符 条件运算符 由此构成的表达式也可以形成简单的选择结构 这种选择结构能以表达式的形式内嵌在允许出现表达式的地方 使得可以根据不同的条件使用不同的数据参与运算 1 条件运算符条件运算符由两个符号 和 组成 要求有3个操作对象 称三目 元 运算符 它是C语言中唯一的三目运算符 2 条件表达式条件表达式的一般形式为 表达式1 表达式2 表达式3 它的执行过程如图4 5所示 以下是几点说明 1 通过情况下 表达式1是关系表达式或逻辑表达式 用于描述条件表达式中的条件 表达式2和表达式3可以是常量 变量或表达式 2 条件表达式的执行顺序为 先求解表达式1 若值为非0 表示条件为真 则求解表达式2 此时表达式2的值就作为整个条件表达式的值 若表达式1的值为0 表示条件为假 则求解表达式3 表达式3的值就是整个条件表达式的值 3 在程序中 通过把条件表达式的值直接赋予某个变量 例如 min a0 1 x0 1 x 0 1 0 其作用是判断x的符号情况 当x为正数时 该条件表达式的值为1 当x为负数时 该条件表达式的值为 1 当x为0时 该条件表达式的值为0 7 条件表达式不能取代一般的if语句 仅当if语句中内嵌的语句为赋值语句 且两个分支都给同一变量赋值 时才能代替if语句 8 表达式1 表达式2 表达式3的类型可以不同 此时条件表达式的值的类型为它们中较高的类型 重点提示 条件表达式的执行顺序为 先求解表达式1 若值为非0 则此时表达式2的值就作为整个条件表达式的值 反之 则表达式3的值就是整个条件表达式的值 4 4switch语句以及用switch语句和break语句构成的选择结构 4 4 1switch语句通过前面的讨论我们知道 if语句处理两个分支 处理多个分支时需使用if else if结构 但如果分支较多 则嵌套的if语句层数就越多 程序不但冗长而且理解也比较困难 因此 C语言又提供了一种专门用于处理多分支结构的条件选择语句 称为switch语句 又称开关语句 使用switch语句直接处理多个分支 当然包括两个分支 其一般形式为 switch 表达式 case常量表达式1 语句1 break case常量表达式2 语句2 break case常量表达式n 语句n break default 语句n 1 break 说明 1 switch case break default均为C语言的保留字 2 swich的表达式通常是一个整型或字符型变量 也允许是枚举型变量 其结果为相应的整数 字符或枚举常量 3 常量表达式又称为开关常数 必须是与表达式对应一致的整数 字符或枚举常量 4 语句1至语句n 可以是简单语句 也可以是复合语句 5 在关键字case和常量表达式之间一定要有空格 重点提示 在switch语句中 default以及break是可以有也可以没有的 且case语句标号后的语句也可以省略不写 4 4 2switch执行过程switch语句的执行流程是 首先计算switch后面圆括号中表达式的值 然后用其结果依次与各个case的常量表达式相比较 若圆括号中表达式的值与某个case后面的常量表达式的值相等 就执行此case后面的语句 执行后遇break语句就退出switch语句 若圆括号中表达式的值与所有case后面的常量表达式的值都不相同 则执行default后面的语句n 1 执行后退出switch语句 退出后程序流程转向开关语句的下一个语句 图4 6switch语句的执行过程 例如 下面的switch语句可以根据键入考试成绩的等级 grade 输出百分制分数段 键入 A 输出85 100键入 B 输出70 84键入其他任意字符 输出errorswitch grade case A printf 85 100 n break case B printf 70 84 n break default printf error n 注意 1 在switch case语句中 各个case常量表达式不一定要按其值的大小顺序来书写语句 但要求各个case后的常量表达式必须是不同的值 以保证分支选择的唯一性 例如 switch ch case A 语句1 break case B 语句2 break case A 语句2 break default 语句3 该例中前2个case语句都是合法的 当变量ch取 A B 时 分别执行语句1 2 但最后一条case语句与第一条case语句的常量表达式的值相同 这是不允许的 2 如果在case后面包含多条执行语句时 也不需要加大括号 进入某个case后 会自动顺序执行本case后面的所有执行语句 3 default总是放在最后 这时 default后不需要break语句 并且 default部分也不是必须的 如果没有这一部分 当switch后面圆括号中表达式的值与所有case后面的常量表达式的值都不相等时 则不执行任何一个分支直接退出switch语句 此时 switch语句相当于一个空语句 例如 将上面例子中switch语句中的default部分去掉 则当输入的字符不是 A B 时 此switch语句中的任何一条语句也不被执行 4 在switch case语句中 多个case可以共用一条执行语句 例如 case A case B printf 60 n break 在A B两种情况下 均执行相同的语句 即输出 60 5 在switch语句中 只有最后一个分支 default 中的break语句的存在于否不影响执行结果 因为没有这个break语句 执行该分支的所有语句后也会自动退出switch语句 而其余各分支中的break语句有与无时的流程是完全不同的 例如在上例中 如果case A B 后面没有break语句 则当grade A 时 程序从printf 85 10
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 多尺度自适应空间索引-洞察及研究
- 踝关节炎的疼痛管理与控制策略
- 2025年事业单位笔试-云南-云南中医诊断学(医疗招聘)历年参考题库含答案解析
- 2022中国烈士纪念日专题
- 2025年事业单位笔试-上海-上海公共基础知识(医疗招聘)历年参考题库含答案解析
- 2025年事业单位笔试-上海-上海中医临床(医疗招聘)历年参考题库含答案解析
- 2025年事业单位工勤技能-陕西-陕西军工电子设备制造工一级(高级技师)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-重庆-重庆政务服务办事员二级(技师)历年参考题库含答案解析(5套)
- 公卫科应急知识培训课题课件
- 产品服务培训体系构建指南
- 养生茶基础知识培训课件
- 2025年暑假反电信网络诈骗试题及答案
- 2025年医学基础知识真题(附答案)
- 新学期教学工作会议上校长讲话:把功夫下在课堂里把心思放在学生上把质量落到细节中
- 电工教学空气开关课件
- 5Why原因分析方法培训
- 2025至2030中国电子产品散热器行业市场现状分析及竞争格局与投资发展报告
- 2025年中国真人CS行行业市场调研分析及投资前景预测报告
- 泌尿外科快速康复外科理念
- CJ/T 292-2008城市市政综合监管信息系统绩效评价
- 神经内科介入围手术期护理案例
评论
0/150
提交评论