第4章 选择结构程序设计.ppt_第1页
第4章 选择结构程序设计.ppt_第2页
第4章 选择结构程序设计.ppt_第3页
第4章 选择结构程序设计.ppt_第4页
第4章 选择结构程序设计.ppt_第5页
已阅读5页,还剩71页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章选择结构程序设计 4 1关系运算符及其表达式4 2逻辑运算符及其表达式4 3条件运算符4 4单条件选择if语句4 5开关分支switch语句习题4 4 1关系运算符及其表达式 关系表达式是由关系运算符连接表达式构成的 1 关系运算符1 关系运算符关系运算符都是双目运算符 共有如下6种 分别是大于 小于 大于或等于 小于或等于 等于和不等于 2 运算符的优先级和结合性前4种关系运算符的优先级别相同 后2种也相同 前4种高于后2种 关系运算符具有自左至右的结合性 关系运算符 算术运算符和赋值运算符之间的优先级次序为 算术运算符优先级最高 关系运算符次之 赋值运算符最低 2 关系表达式1 关系表达式由关系运算符组成的表达式称为关系表达式 关系运算符两边的运算对象可以是C语言中任意合法的表达式 例如 x y x 5 y x y等 2 关系表达式的值关系表达式的值是整数0 代表结果为逻辑假 或1 代表结果为逻辑真 在C语言中不存在专门的 逻辑值 此处请读者务必清楚 例如 关系表达式 x 3 y 4 的值为0 关系表达式常用在条件语句和循环语句中 3 举例一般情况下 关系表达式用在选择结构或循环结构的关系判断中 并不需要输出关系表达式的值 这里我们为了了解关系表达式的内部运行机制 在例4 1中可以看到关系表达式的值只能是0或1 例4 1 关系表达式示例 include stdio h main charx m y n intn n x y printf d n n n x y 1 printf d n n n y Y 5 3 y x 1 printf d n n 运行结果 112通过上面的程序可以看出 关系运算的结果为 真 时 值等于1 结果为 假 时 值等于0 4 2逻辑运算符及其表达式 逻辑表达式是由逻辑运算符连接表达式构成的 1 逻辑运算符1 逻辑运算符C语言中提供了3种逻辑运算符 1 单目逻辑运算符 逻辑非 2 双目逻辑运算符 逻辑与 3 双目逻辑运算符 逻辑或 2 优先级和结合性逻辑与 的优先级大于逻辑或 它们的优先级都小于逻辑非 逻辑运算符具有自左至右的结合性 逻辑运算符 赋值运算符 算术运算符 关系运算符之间优先级的次序由高到低为 逻辑非 算术运算符 关系运算符 逻辑与 逻辑或 赋值运算符 2 逻辑表达式1 逻辑表达式由逻辑运算符组成的表达式称为逻辑表达式 逻辑运算符两边的运算对象可以是C语言中任意合法的表达式 2 逻辑表达式的值逻辑表达式的值为1 结果为 真 时 和0 结果为 假 时 3 逻辑运算规则表达式a和表达式b进行逻辑运算时 其运算规则见表4 1 表4 1逻辑运算的真值表 例如 ch A ch Z ch是大写字母时 表达式值为1 否则为0 year 4 0 year 100 0 year 400 0 year为闰年时 表达式值为1 否则为0 3 短路表达式在由 和 运算符组成的逻辑表达式中 C语言规定 只对能够确定整个表达式值所需要的最少数目的子表达式进行计算 也就是说 当计算出一个子表达式的值之后便可确定整个逻辑表达式的值时 后面的子表达式就不需要再计算了 整个表达式的值就是该子表达式的值 这种表达式也称为短路表达式 例4 2 执行语句 inta 3 b 0 问下面表达式运算后 a和b的值是多少 1 a a b a 2 a a b 分析 1 第一个表达式是一个由 组成的逻辑表达式 从左至右计算3个子表达式 只要有一个为0 就不再计算其他子表达式 当计算 a的值为0时 便可确定整个表达式的值为0 因此后面的子表达式就不再计算了 所以 结果a的值为3 b的值为0 2 第二个表达式是一个由 组成的逻辑表达式 从左至右计算3个子表达式 只要有一个结果为真 则不再计算后面的子表达式 第一个子表达式为 a 结果为0 再计算a 结果为4 因此就不再计算后面的子表达式了 所以 结果a的值为4 b的值为0 一般情况下 逻辑表达式用在选择结构或循环结构的关系判断中 并不需要输出逻辑表达式的值 这里我们为了了解逻辑表达式的内部运行机制 在下例中将要输出逻辑表达式的值 可以看到逻辑表达式的值只能是0或1 例4 3 逻辑表达式示例 include stdio h main inta 3 b 4 c 5 x y printf d n a b c a b c的值为1 b c的值为 1 非0 printf d n a b a b c 1的值为4 b c 2的值为6 运行结果 0111 4 3条件运算符 1 条件运算符条件运算符 是C语言中惟一的三目运算符 条件运算符的优先级高于赋值运算符 但是低于关系运算符和算术运算符 条件运算符的结合性为自右至左 例如 ad c d相当于ad c d 2 条件表达式1 条件表达式条件表达式的一般形式为表达式1 表达式2 表达式3 2 条件表达式的值条件运算符的执行顺序是 先求解表达式1 若为非0 真 则求解表达式2 此时表达式2的值就作为整个条件表达式的值 否则求解表达式3 此时表达式3的值就作为整个条件表达式的值 例4 4 将大写字母转换为小写字母 分析 如果要将大写字母转换为小写字母 首先应该判断字符是否为大写字母 如果是大写字母 将大写字母转换为小写字母 如果不是大写字母 则不应该作任何转换 该转换可以使用if语句 也可以使用条件运算符 本例中 采用条件运算符 include stdio h main charch scanf c 4 4单条件选择if语句 单条件选择结构是最常用的典型双分支选择结构 其根本特点是 所给定的选择条件 它可以是逻辑表达式 也可以是关系表达式 的值如果为真 则执行为真时的分支 如果为假 则执行为假时的分支 其一般形式如图4 1所示 如果条件 该 选择 条件成立吗 真a1块 条件成立时所执行的操作块 它一般为非空块 假a2块 条件不成立时所执行的操作块 它可为空块 图4 1单条件选择结构的流程图 说明 1 这里的a1块和a2块可以是空操作块 简称空块 也就是不作任何处理的操作块 然而 如果a1 a2操作块同时为空块的话 就失去了选择的意义 2 为了养成良好的程序设计风格和习惯 如果必须设立空分支时 就应该把它设在选择条件为假的相应分支 即a2块 中 4 4 1if语句if语句是根据所给定的条件决定执行的操作 是 二选一 的分支结构 if语句的一般格式为if 表达式 语句序列1 else 语句序列2 说明如下 1 if语句的执行过程是 首先进行表达式的运算 如果表达式的值非0 则执行语句序列1 否则执行语句序列2 2 格式中表达式为C语言中任意合法的表达式 一般为逻辑表达式或关系表达式 3 else及后面的语句序列可以省略 当语句序列1和语句序列2为单语句时 可以省略花括号 当有多个语句并列出现在控制语句中时 必须加花括号 例4 5 输入两个整数 输出其中最大的数 分析 有两个整数x和y 如果x大于y 那么x就是两个数中较大的数 否则y就是两个数中较大的数 可以使用if语句完成两个数大小的判定 include stdio h main intx y printf inputtwonumber scanf d d 例4 6 输入3个数a b c 要求按由小到大的顺序输出 分析 首先a和b进行比较 如果a大于b 将a和b互换 b中存放的是较大的数 a中存放的是较小的数 然后a和c进行比较 如果a大于c 则将a和c交换 a中存放a和c中较小的数 此时a中存放的数是a b c中最小的数 a b且a c 最后b和c进行比较 将最大的数存放到c中 此时a b c 然后输出a b c 即按照由小到大的顺序输出a b c的值 include stdio h main floata b c temp printf inputthreenumber scanf f f f 4 4 2if语句的嵌套在进行程序设计时 经常要用到条件分支嵌套 所谓条件分支嵌套 就是在一个分支中可以嵌套另一个分支 C语言中 单条件选择if语句内还可以使用if语句 这样就构成了if语句的嵌套 内嵌的if语句既可以嵌套在if子句中 也可以嵌套在else子句中 完整的嵌套格式为 if 表达式1 if 表达式2 语句序列1 else语句序列2 elseif 表达式3 语句序列3 else语句序列4 可以根据实际情况使用上面格式中的一部分 并且可以进行if语句的多重嵌套 例4 7 输入3个整数 输出最大数 分析 输入3个整数分别赋给a b c 如果a小于b b小于c 则c为最大数 如果a小于b b大于c 则b为最大数 如果a大于b a小于c 则c为最大数 如果a大于b a大于c 则a为最大数 可以使用一个完整的if else嵌套实现上述的算法 include stdio h main longa b c printf inputthreenumber scanf ld ld ld 如果a b且c b 则输出b elseif a c printf ld c 如果b a c 则输出c elseprintf ld a 如果b a且c a 则输出a 例4 8 输入学生成绩 给出相应的等级 分析 如果学生的成绩大于或等于85分 则屏幕上显示A 如果成绩小于85分大于或等于70分 则屏幕上显示B 如果成绩小于70分大于或等于60分 则屏幕上显示C 如果成绩小于60分 则屏幕上显示D 可以使用if else的嵌套实现算法 include stdio h main intscore printf input scanf d if score 85 printf yours A n elseif score 70 printf yours B n elseif score 60 printf yours C n elseprintf yours D n 例4 9 输入一个字符 根据输入的字符在屏幕上显示不同的信息 分析 如果输入的字符是 b 则响铃 PC喇叭响发出嘟的响声 如果输入的字符为 a 则屏幕上显示字符串 YES 如果输入其他字符 则屏幕上显示 bye 然后结束程序 可以使用if else的嵌套实现上面的算法 include stdio h main charch printf pleaseinputachar ch getchar if ch b printf a 如果输入小写字母b 则响铃 elseif ch a printf YES elseprintf bye n 使用if语句嵌套时 要注意else与if的配对规则 C语言规定 else与最近的 第一个没有配对的且为可用的if配对 例4 10 有分段函数 编写程序 输入一个x值 计算输出相应的y值 分析 本例中出现了一个分段函数 一般情况下分段函数的处理要使用if else的嵌套 下面提供的程序1中 如果x小于0 则y x 如果x等于0 则y 0 如果x大于0 则y x x 1 程序2 3 4对程序1进行了修改 但是程序3和4是错误的 请读者一定注意if和else的配对关系 程序1 include stdio h main intx y printf 请输入一个整数 scanf d 当x0时 将x x 1赋给变量y printf y d y 程序2 将上面程序的if语句 程序第7 9行 改为if x 0 if x 0 y x x 1 elsey 0 elsey x 程序3 将上述if语句改为y x if x 0 if x 0 y x x 1 elsey 0 此时else和最近的if配对 即x 0时y 0 程序4 将上述if语句改为y 0 if x 0 if x 0 y x x 1 elsey x 此时else和最近的if配对 即x 0时y x 程序1和程序2是正确的 程序3和程序4的错误在于else和最近的if配对 不会和最上面的if配对 4 5开关分支switch语句 if语句只提供两路选择 但在解决多路选择时非常不便 例如根据学生成绩统计各分数段的学生人数 这时 就可以采用多条件多分支选择结构进行程序设计 C语言提供了switch多路开关分支语句 其格式为switch 表达式 case常量表达式1 语句组1 case常量表达式2 语句组2 case常量表达式n 语句组n default 语句组n 1 说明如下 1 switch后面的表达式 可以为任何类型 但必须与常量表达式类型匹配 2 当表达式的值与某一个case后面的常量表达式相等时 就执行此case后面的语句 若没有匹配的常量表达式 就执行default后面的语句 3 每一个常量表达式的值都是惟一的 即常量表达式不能重复出现 但是各个case和default default之后有break语句时 的次序是任意的 4 case后面的语句结束时 会执行下一个case后面的语句 即多个case可以共用一组执行语句 因此 若要跳到switch语句外面 则必须借助break语句 例如 switch 表达式C case a x case b x default total 在此开关分支语句中 如果表达式C的取值为 a 则3个分支都执行 如果表达式C的取值为 b 则只执行后面的两个分支 即x 和total 如果表达式C的取值既不为 a 也不为 b 则只执行最后的一个分支total 5 尽管最后一个分支之后的break语句可以省略 但是 在最后一个分支之后有break语句是程序设计的一个良好习惯 建议保留它 因为编写的程序还需要本人或他人在以后进行维护 例如要在最后一个分支之后增加几个case分支 如果没有注意到最后一个分支后没有break语句 则原来的最后一个分支就会受新增分支的干扰而失效 6 default是可选项 即当未找到匹配的case常量表达式时 会跳到switch外 也就是说 如果没有default部分 则当表达式的值与各case的判断值都不一致时 则程序不执行该结构中的任何部分 例如 switch 表达式C case0 x 2 break case1 y 2 break case2 z 2 break 当表达式C的值既不是0 也不是1或2时 则程序不执行该开关分支中的任何语句 为了使程序能进行错误检查或逻辑检查 应该使用default分支 例如 switch ch case x printf OK n break case y printf NO n break 当ch的值是其他字符时 则什么都不输出 如果加上default分支 且在default分支中输出一定的提示信息 那么 当遇到default分支时 就可输出提示信息 增加default分支会给逻辑检查带来很多方便 例如 用switch语句来处理数目固定的条件 而且认为这些条件之外的值都属于逻辑错误 则可以增加一个default分支来识别逻辑错误 7 case后面的语句块可以不要花括号 另外 如果switch中只有一个case常量表达式 则可以省略花括号 8 在swtich分支结构中 如果对表达式的多个取值都执行相同的语句组 则对应的多个case语句可以共同使用同一个语句组 例如 下面的程序段中 case a case b case c 均共用 case c 的语句 switch grade case a case b case c printf pass n break 前3个case共用一个printf语句 case d printf nopass n break default printf error n break 例4 11 根据学生成绩 输出不同的等级A B C D或E 分析 可以使用if else语句输出学生成绩的等级 本例中使用switch语句实现输出学生成绩的等级 首先将学生的成绩存入变量score中 然后将score 10的值赋给变量grade 如果grade的值是10或9 学生成绩等级为 A 如果grade的值为8 学生成绩等级为 B 依次类推 可以得到其他成绩的等级 include stdio h main intscore grade printf inputascore scanf d switch grade case10 case9 printf A break 成绩在90 100分之间为优 case8 printf B break 成绩在80 89分之间为良 case7 printf C break 成绩在70 79分之间为中 case6 printf D break 成绩在60 69分之间为及格 case5 case4 case3 case2 case1 case0 printf E break 成绩在0 59分之间为不及格 default printf youarewrong n break break可省略 例4 12 为某运输公司编制计算运费的程序 运行程序时 由用户输入运输距离s和运量w 程序输出单价p和总金额t 运费标准为 当s 500km时 没有优惠 单价为5元 吨 公里 当500km s 1000km时 优惠2 当1000km s 2000km时 优惠5 当2000km s 3000km时 优惠8 当s 3000km时 优惠10 使用开关语句swtich编写程序如下 includemain ints w g floatp t printf inputthedistanceandweight scanf d d switch g case0 p 5 break case1 p 5 0 98 break case2 case3 p 5 0 95 break case4 case5 p 5 0 92 break default p 5 0 9 break t p w s printf theunitpriceis 3f nthetotalpriceis 3f n p t 如果用单条件if语句编写 则程序如下 includemain ints w floatp t printf inputthedistanceandweight scanf d d if s 500 习题4 4 1执行下面的程序段后 b的值为 intx 35 charz A intb b xA 0B 1C 2D 34 2设a 5 b 6 c 7 d 8 m 2 n 2 执行 m a b n c d 后n的值为 A 1B 2C 3D 4 4 3若k是int型变量 且有下面的程序段 其输出结果是 k 3 if k 0 printf elseprintf A B C D 有语法错误 无输出结果4 4设A B和C都是int型变量 且A 3 B 4 C 5 则下面表达式中值为0的表达式是 A A B B A BC A B C BD A B C 1 4 5阅读程序 include stdio h main floatx y scanf f 4 6阅读程序 include stdio h main intx 1 y 0 a 0 b 0 switch x case1 switch y case0 a break case1 b break case2 a b break printf a d b d n a b 上面程序的输出结果是 A a 2 b 1B a 1 b 1C a 1 b 0D a 2 b 24 7下面程序的输出结果是 include stdio h main inta 1 b 4 k k a 0 A 003B 012C 103D 112 4 8为表示关系x y z 应使用C语言表达式 A x y y z B x y AND y z C x y z D x y y z 4 9若要求在if后一对圆括号中表示a不等于0的关系 则能正确表示这一关系的表达式为 A a0B aC a 0D a 4 10若有以下定义 floatx inta b 则正确的switch语句是 A switch x B switch x case1 0 printf n case1 2 printf n case2 0 printf n case3 printf n C switch a B D switch a B case1 printf n case1 printf n case1 2 printf n case2 printf n 4 11在下面的运算符中 优先级最高的运算符是 A b x 1 elseif c d x 2 elsex 3 A 1B 2C 3D 64 13当c的值不为0时 在下列选项中 能正确将c的值赋给变量a b的是 A c b a B a c b c C a c 4 14能正确表示a和b同时为正或同

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论