《全国计算机等级考试实用应试教程二级C语言选择结构.ppt》由会员分享,可在线阅读,更多相关《全国计算机等级考试实用应试教程二级C语言选择结构.ppt(43页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、全国计算机等级考试实用应试教程二级C语言选择结构 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望4.1关系运算和逻辑运算4.1.1C语言中的逻辑值C语言中,参与逻辑运算的量为非零值或整数零,非零值和整数零分别表示运算量为“真”或“假”。逻辑运算的结果值,即逻辑表达式的值应该是一个逻辑值“真”或“假”。C语言编译系统在给出逻辑运算结果时,以数值1代表“真”,以0代表“假”,但在判断一个量是否为“真”时,以0代表“假”,以非0代表“真”。4.1.2关系运算符和关系表达
2、式关系运算实际上就是“比较运算”,将两个数进行比较,判断比较的结果是否符合指定的条件。1关系运算符关于关系运算符的说明:(1)表4-1中前4种运算符(、=)的优先级别相同,后两种也相同。前4种优先级别高于后两种。如,“”优先级别高于“!=”。(2)关系运算符与算术运算符、赋值运算符的优先级关系如下:算术运算符(高)关系运算符(中)赋值运算符(低)即:算术运算符优先级别高于关系运算符,关系运算符优先级别又高于赋值运算符。(3)关系运算符的结合方向是“自左向右”。C语言有六种关系运算符,如表4-1所示。表4.1 C语言中的关系运算符运算符名称优先次序小于优先级相同(高)大于=大于或等于=(连续两个
3、=)等于优先级相同(低)!=不等于2关系表达式及关系表达式的值用关系运算符将两个表达式(算术表达式、关系表达式、逻辑表达式、赋值表达式、字符表达式等)连接起来的式子,称关系表达式。例如,a=b,a=c等。在C语言中,关系表达式的结果值为1或0。当关系表达式成立时,其结果值为1,否则,其值为0。若a=10,b=6,表达式a=b为“真“,其值为1。当关系运算符两边的值类型不一致时,系统将自动进行转换。转换规则与双目运算中的类型转换规则相同。关系运算示例:试求x=531的值。分析:x=531相当于:x=(53)1=11=0故x的值为0。关系表达式主要用于选择结构中的条件判断。重点提示重点提示:表示“
4、等于”关系的运算符“=”和“不等于”关系的运算符“!=”与数学中的表示方法不同。在使用它们时请予以注意,以免写错关系运算符而导致错误的结果。例如,欲判断x是否等于0,如果写成:x=0就不是判断x是否等于0的含义了,而成了把0赋值给变量x。正确的写法应为:x=0。4.1.3逻辑运算符和逻辑表达式1C语言中的逻辑运算符关系表达式只适于描述单一的条件,对于较复杂的复合条件就需要将若干个关系表达式连接起来才能描述,如描述“x大于0且不等于2”,就需要将两个关系表达式x0和x!=2连接起来:x0&x!=2。其中“&”是C语言中的逻辑运算符。C语言提供了三种逻辑运算符,如表4.2所示。表4.2 C语言中的
5、逻辑运算符运算符名称示例示例说明说明优先次序!逻辑非!aa非单目运算符高低&逻辑与a&ba与b双目运算符|逻辑或a|ba或b双目运算符关于逻辑运算符的说明:(1)逻辑运算符的优先次序如下:!(高)(高)&(中)(中)|(低)(低)(2)逻辑运算符具有自左向右的结合性(3)逻辑运算符与赋值运算符、关系运算符、算术运算符的优先次序如下:(由高到低)!(逻辑非)!(逻辑非)算术运算算术运算关系运算关系运算&(逻辑(逻辑与)与)|(逻辑或)(逻辑或)赋值运算赋值运算例如:a=b)&(xy)可以写为:a=b&xy(a=b)|(x=y)可以写为:a=b|x=y(!a)|(a=b)可以写为:!a|a=b2逻
6、辑表达式和逻辑表达式的值用逻辑运算符将关系表达式或逻辑值连接起来的式子称逻辑表达式。一个逻辑表达式中可以包含多个逻辑运算符,如xy&a=5&2|6=5,在关系运算符=两侧的8和5作为数值参加关系运算,8=5的值为1。再进行1&2|65-!0运算。自左至右扫描求解,&两侧的1和2作为逻辑运算对象,因为参加运算的皆为非0,故结果为1。接下来进行1|65-!0运算。6的左侧为|运算符,右侧为运算符,根据优先级别,应先进行的运算。即先进行65-!0运算。现在5的左侧为运算符,右侧为-运算符,而-优先于,因此,应先进行5-!0的运算。又由于!的优先级别最高,故先进行!0的运算,得结果1。然后进行5-1运
7、算。得结果为4。下面再进行6b)printf(%d%dn,a,b);elseprintf(%d%dn,a,b);elseprintf(%d=%dn,a,b);程序运行结果为:Pleaseentertwointegers:3,57357Pleaseentertwointegers:9,-69-6Pleaseentertwointegers:456,456456=456里层的ifelse语句是外层条件语句if下的嵌套语句,它虽然占据多个书写行,却不是复合语句,可以作为一个语句看待,因此无须用一对大括号括起来。重点提示重点提示:在嵌套内的if语句既可以是if语句形式也可以是ifelse语句形式,这就
8、会出现多个if和多个else重叠的情况。此时要特别注意if和else的配对问题。if和else配对规则为:else总是与它前一个最近的if配对。4.3条件表达式构成的选择结构对于有些选择分支结构,C语言另外还提供了一个特殊的运算符条件运算符,由此构成的表达式也可以形成简单的选择结构,这种选择结构能以表达式的形式内嵌在允许出现表达式的地方,使得可以根据不同的条件使用不同的数据参与运算。1条件运算符条件运算符由两个符号“?”和“:”组成,要求有3个操作对象,称三目(元)运算符,它是C语言中唯一的三目运算符。2条件表达式条件表达式的一般形式为:表达式1?表达式2:表达式3它的执行过程如图4.5所示。
9、以下是几点说明:(1)通过情况下,表达式1是关系表达式或逻辑表达式,用于描述条件表达式中的条件,表达式2和表达式3可以是常量、变量或表达式。(2)条件表达式的执行顺序为:先求解表达式1,若值为非0,表示条件为真,则求解表达式2,此时表达式2的值就作为整个条件表达式的值;若表达式1的值为0,表示条件为假,则求解表达式3,表达式3的值就是整个条件表达式的值。(3)在程序中,通过把条件表达式的值直接赋予某个变量。例如:min=(a0?1:x0?1:(x60n);break;在A、B两种情况下,均执行相同的语句,即输出“60”。(5)在switch语句中,只有最后一个分支(default)中的brea
10、k语句的存在于否不影响执行结果。因为没有这个break语句,执行该分支的所有语句后也会自动退出switch语句。而其余各分支中的break语句有与无时的流程是完全不同的。例如在上例中,如果caseA、B后面没有break语句,则当grade=A时,程序从printf(85100n)开始执行,输出结果为:851007084error这是因为case后面的常量表达式实际上只起语句标号作用,而不起条件判断作用,即“只是开始执行处的入口标号”。因此,一旦与switch后面圆括号中表达式的值匹配,就从此标号处开始执行,而且执行完一个case后面的语句后,若没遇到break语句,就自动进入下一个case继
11、续执行,而不再判断是否与之匹配,直到遇到break语句才停止执行,退出break语句。因此,若想执行一个case分支后立即跳出switch语句,就必须在此分支的最后添加一个break语句。重点提示重点提示:在switch语句中,default总是放在最后,这时,default后不需要break语句。因此只有最后一个分支(default)中的break语句的存在于否不影响执行结果。4.5语句标号和goto语句4.5.1语句标号在C语言中,语句标号不必特殊加以定义,标号可以是任意合法的标识符,当在标识符后面加一个冒号,该标识符就成为一个语句标号。如student:等。注意,C语言中,语句标号必须是标识符,而不能是数值常量形式,标号可以和变量同名。通常,标号用作goto语句的转向目标。如:gotostate;C语言中,可以在任何语句前加上语句标号,如:state:printf(“endn”);4.5.2goto语句goto语句称为无条件转向语句,goto语句的一般形式为:goto语句标号goto语句的作用是把程序的执行转向语句标号所在的位置,这个语句标号必须与此goto语句同在一个函数内。重点提示:重点提示:滥用goto语句将使得程序的流程毫无规律,可读性差,对于初学者来说应尽量不采用。
限制150内