学习指导-单元3_选择结构程序设计

上传人:第*** 文档编号:34239184 上传时间:2018-02-22 格式:DOC 页数:26 大小:242.50KB
返回 下载 相关 举报
学习指导-单元3_选择结构程序设计_第1页
第1页 / 共26页
学习指导-单元3_选择结构程序设计_第2页
第2页 / 共26页
学习指导-单元3_选择结构程序设计_第3页
第3页 / 共26页
学习指导-单元3_选择结构程序设计_第4页
第4页 / 共26页
学习指导-单元3_选择结构程序设计_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《学习指导-单元3_选择结构程序设计》由会员分享,可在线阅读,更多相关《学习指导-单元3_选择结构程序设计(26页珍藏版)》请在金锄头文库上搜索。

1、单元3 选择结构程序设计一、知识要点通过本章的学习是学生掌握关系、逻辑运算符和表达式以及选择结构程序设计。具体内容如下:1关系运算符和关系表达式(1)关系运算符及其优先次序C语言提供 6种关系运算符: (大于)= (大于或等于)= = (等于)!= (不等于)关于优先次序:前4种关系运算符的优先级别相同,后两种也相同。前4种高于后两种;关系运算符的优先级低于算术运算符;关系运算符的优先级高于赋值运算符。(2)关系表达式由关系运算符连接而成的表达式(可以是算术表达式、关系表达式和其他表达式)称为关系表达式。2逻辑运算符和逻辑表达式(1)逻辑运算符及其优先次序C语言提供了三种逻辑运算符:& 逻辑与

2、| 逻辑或! 逻辑非关于优先次序:!(逻辑非)算术运算符 关系运算符&| 赋值运算符(2)逻辑表达式优先级相同(高)优先级相同(低)逻辑表达式由逻辑运算符和运算对象组成,其中参与逻辑运算的对象可以是一个具体的值,还可以是C语言中任意合法的表达式,逻辑表达式的运算结果为1(真)或者为0(假) 。3if语句(1)if(表达式 )语句(2)if(表达式 )语句1else 语句2(3)if(表达式 1)语句1else if(表达式 2) 语句2else if(表达式3) 语句3else if(表达式m)语句melse 语句m+1注意:“语句” , “语句1” , “语句m”这些子句在语法上要求是一条语

3、句,但需要执行多条语句时,需要用花括号把它们括起来组成复合语句。else不能独立成为一条语句,它仅是if 语句的一部分,不能单独出现的程序中,且必须与if进行匹配共同组成ifelse 语句。4条件运算符?:和条件表达式条件运算符是两个符号的组合: ? :条件表达式的一般形式为:表达式1 ? 表达式2 :表达式3条件表达式运算过程及表达式的值:先计算表达式1,若表达式1的值非0,则计算表达式2,不再计算表达式3,此时表达式2的值为整个条件表达式的值;若表达式1的值为0,不再计算表达式2,而计算表达式3,此时表达式3的值为整个条件表达式的值。利用条件运算可以表达具有二分支的实际问题。5switch

4、语句switch(表达式)case 常量表达式 1: case 常量表达式 2: case 常量表达式 n: 说明:switch是关键字,switch后面用花括号括起来的部分是switch语句体;switch后面括号内的“表达式” ,可以是C语言中整型或字符型表达式,但是表达式两边的括号不能省;case 也是关键字,与其后面的常量表达式合称case语句标号,常量表达式的类型必须与switch后面的表达式类型相匹配,且各 case语句标号的值不能相同;default也是关键字,起标号的作用,代表除了以上所有case 标号之外的那些标号,default语句可以出现在任何标号的位置上,也可以没有。c

5、ase 语句标号后的语句1、语句2等可以是一条语句,可以是若干条语句,也可以省略;break 语句的作用:跳出switchcase语句。二、知识拓展1switch.case中default的书写位置default 关键字也仅仅起到了标号的作用,与 case 作用一致,可以出现在switchcase 语句的任何地方,不一定要在最后。但是,如果出现在 case 中间(某些 case 之前) ,当 default 后的语句组执行完毕后不需要执行其后面的 case中的语句组时,需要在 default 语句组之后加上 break。【示例】int a=3;switch(a)case 1:printf(#n

6、);break;default:printf(n);case 2:printf(在执行过程中,a 的值为 3,与 case 后的常量均不符合,于是执行 default语句。输出,但是由于没有 break,将继续执行 printf(,输出&。因此执行结果为:&如果只希望输出,则要把上述程序段改成int a=3;switch(a)case 1:printf(#n);break;default:printf(n);break;case 2:printf(并且,case 2之后的break可以省略。2条件运算符的结合方向我们知道ifelse语句可以与条件表达式相互转换,比如【示例】求两个数的最大值代码

7、:if(ab)max=a;elsemax=b;可以转换为max=ab?a:b;当出现如下数学表达式:我们先用if语句来进行表示:if(ab)max=a;else if(bc)max=b;elsemax=c;那它是否等价于max=ab?a:bc?b:c;呢?答案否。因为条件运算符?:是右结合,也就是说max=ab?a:bc?b:c相当于max=ab?a:( bc?b:c),显然于题述不符。cbacb并 且并 且mx三、常见问题1数学关系0void fun()int x=0,y=0,z=0;if(x=y+z)printf(*);else printf(#);int main()fun();retu

8、rn 0;A有语法错误不能通过编译;B输出 *C可以通过编译,但是不能通过链接,因而不能运行D输出#本题答案 D。解决本题的关键在于 if 后面的表达式语句:x=y+z。y+z 的值为 0,x 的值为 0, “=”左右两边的值均为 0,但是“= ”为赋值运算符,即不管 x 之前的值如何,经过此表达式后,x 的值变成 0,即 if 后表达式为假,执行 else 之后的语句。如果,if 语句改成 if(x= =y+z)printf(*);else printf(#);则 if 后表达式为真,选择 B。4if语句中多加了分号“;”解析:一个“;”代表一个语句。在 if(表达式)之后若添加了 ;代表当

9、表达式为真时,执行空语句。还是先看个例子,在上题的基础上稍加修改,在 if(x=y+z)后加个“;” 。即#include void fun()int x=0,y=0,z=0;if(x=y+z) ;printf(*);else printf(#);int main()fun();return 0;A有语法错误不能通过编译;B输出 *C可以通过编译,但是不能通过链接,因而不能运行D输出#本题答案 A。由于 if 之后多了个分号,系统认为 if 语句到此结束;因此,之后的 else 找不到与它匹配的 if。因此,程序不能通过编译,错误的提示为 : illegal else without matc

10、hing if如果上述程序段改成#include void fun()int x=0,y=0,z=0;if(x=y+z) ;printf(*);printf(#);int main()fun();return 0;编译、链接全部通过,证明没有错误;但是输出*#。5case关键字后的表达式 书写错误解析:case 关键字后面的表达式只能是常量表达式,而且只能是整型或字符型常量,不能是其他常量。【示例】#include void fun()double a=1.2;switch(a)case 1.1:printf();break;case 1.2:printf(#);break;default:p

11、rintf(*);int main()fun();return 0;不能通过编译,系统提示错误error C2450: switch expression of type double is illegalerror C2052: const double : illegal type for case expression即,switch 括号后的表达式以及 case 标号后的表达式错误。另外,case 标号后必须有空格,若没有,系统将不能识别出 case 关键字。【示例】#include void fun()int a=1;switch(a)case1:printf(#n);break;c

12、ase2:printf(%n);break;default:printf(n);int main()fun();return 0;编译、链接都能通过,但输出,与预期不一致。错误原因就是case1,case2 中间没有空格。四、同步训练(一)单项选择题1判断字符型变量 c1 是否为小写字母的正确表达式为( ) 。A a=A)&(c1=c1)|(z=a)&(c1y&ch=0|b=0)&(a=0&b=0)&(a0)&(a+b05能正确表示逻辑关系:“a=10 或 a=10 or a=0|a=10&a=10|a3|80)|(+j0) k+;printf(%d,%d,%dn,i,j,k);A0,0,6

13、B1,0,7 C1,1,7 D0,1,714有如下程序段float x=2.0,y;if(x7)if(b8)if(c9)x=2;else x=3;后x 的值的是( ) 。A0 B2 C1 D.317以下程序段,运行后的输出结果是( ) 。char m=b;if(m+b) printf(%cn,m);else printf(%cn,m-);Aa Bb Cc Dd18有以下程序段int a=5,b=4,c=3,d=2;if(abc)printf(%dn,d);else if(c-1=d)=1)printf(%dn,d+1);else printf(%dn,d+2);执行后输出结果是( ) 。A2

14、B3C 4 D编译有错,无结果19有如下程序段:int x=1,a=0,b=0;switch(x) case 0:b+;case 1:a+; case 2:a+;b+;printf(a=%d,b=%dn,a,b);该程序段的输出结果是( ) 。Aa=2,b=1 Ba=1,b=1 Ca=1,b=0 Da=2,b=220以下程序段的输出结果是( ) 。int a=15,b=21,m=0;switch(a%3)case 0:m+;break;case 1:m+;switch(b%2)default:m+;case 0:m+;break;printf(%d,m);A1 B2 C3 D4(二)填空题1 已知 a=7.5,b=2,c=3.6,表达式,ab&ca|ab 的值的是 。2 写出判断一个整型数 a 为奇数的表达式 。3有一个整 345,取它的个位数的表达为 ,取十位数的表达式为 ,取百位数的表达式为 。4 能正确表示“当 ch 为小写字母为真,否则为假”的表达式是 。5 若 x 为 int 类型,请以最简单的形式写出与逻辑表达式!x 等价的 C 语言关系表达式 。6 表示“整数 x 的绝对值大于 5”时值为“真”的 C 语言表达式 。7 设 x,y 均为 int 型变量,请写出描述“x,y 符号相同”的表达式 。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号