您好,欢迎进入 官方网站!
该章内容:本章我们学习三大结构之一:选择结构,采用选择结构来解决问题称为判断问题,它的求解规则是在不同的条件下进行不同的操作。选择结构比顺序结构要复杂一些。本章是考试的重点章节。
学习方法:先了解选择结构相关的基础知识,然后做选择结构简单的习题,逐步加入复杂的语句。最终一定要学会如何写简单的选择结构的程序。
知识点:语句和表达式之间的联系;分号的使用;复合语句
重要程度:★★★★
1、C语言中的逻辑值
C语言中的逻辑值只有两个:“真”和“假”。用非零来代表“真”,用零来代表“假”。
C语言中只有一个数值表示假,就是0。其它的数据都是表示真,如:1.1,2.9,-2等等。
1、关系运算符和关系表达式
所谓的关系运算就是比较运算,将两个数进行比较,判断比较的结果是否符合条件。
1.1 C语言中的关系运算符
C语言提供了6种关系运算符,如表1所示。
表1 C语言中的6种关系运算符及其优先级
优先级 |
优先级相同(高) |
优先级相同(低) |
||||
关系运算符 |
> (大于) |
>= (大于等于) |
< (小于) |
<= (小于等于) |
== (等于) |
!= (不等于) |
注意:
1)由两个字符组成的运算符之间不可以加空格,如<=就不能写成:< =。
2)前四种关系运算符(>、>=、<、<=)的优先级相同,后两种关系运算符(==、!=)的优先级相同,前四种关系运算符的优先级高于后两种关系运算符。
3)关系运算符的优先级低于算术运算符。如“+”的优先级高于“<”。
4)关系运算符的优先级高于赋值运算符。如“=”的优先级低于“==”。(注意“=” “==”的区别)。(考试的重点)
5)关系运算符都是双目运算符,自左至右的结合性。如4<5<2则等价于(4<5)<2(考试重点)。
1.2 关系表达式
关系表达式:用关系运算符将表达式连接起来的式子称为关系表达式。
关系表达式的值:关系表达式的值若为真,则结果为1;若为假,则结果为0。(只有0和1两种!!)
如,3>2>1的值为1;若变量a中的值为10,变量b中的值为6,则关系表达式a>b的值为“真”,即为1。而关系表达式(a>5)<(b>10)的值为“假”,即为0。
1.1 C语言中的逻辑运算符
C语言提供了3种逻辑运算符,如表2所示。
表2 C语言中的3种逻辑运算符及其优先级
优先级 |
优先级低 优先级高 |
||
逻辑运算符 |
|| (逻辑“或”) |
&&(逻辑“与”) |
! (逻辑“非”) |
注意:
(1)&&和||运算符是双目运算符,如(a>b)&&(x (2)在关系运算符、算术运算符、赋值运算符、逻辑运算符四者中,优先级从高到低依次为:! (逻辑“非”)、算术运算符、关系运算符、&&(逻辑“与”)、||(逻辑“或”)、赋值运算符。 1.2 逻辑表达式和逻辑表达式的值 逻辑表达式:用逻辑运算符将表达式连接起来的式子称为逻辑表达式。 逻辑运算的对象可以是C语言中任意合法的表达式。如,!(a
逻辑表达式的值:逻辑表达式的运算规则如表3所示。逻辑表达式的值若为真,则结果为1;若为假,则结果为0。(表达式的值也只有0和1两种!!!) 表3 逻辑运算的规则 A b !a !b a&&b a||b 非0 非0 0 0 非0 0 非0 0 0 0 1 1 0 1 0 1 1 0 0 0 1 1 1 0 例1:设有定义:int a=5,b=6,c=7;则以下选项中值为0的表达式是 A)(!a==0)&& (a
C)a&&b D)(a+4)||( a+b)&&(c-a) 正确答案为A。 考试重点考察点: 1、在C语言中,由&&或||组成的逻辑表达式,在特定的情况下会产生“短路”的现象。在逻辑表达式的求解中,并不是所有的运算对象都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该逻辑运算符。(若“&&”的左边的运算对象的值为0,则不再对右边的运算对象进行运算,直接得出整个表达式的值为0;若“||”的左边的运算对象为1,则不再对右边的运算对象进行运算,直接得出整个表达式的值为1。) (1)若执行下列语句 a=0;b=1; c=a++&&(b=6); 各变量的值为:a为1,b为1,c为0,由于(b=6)没被执行到,故b的值不变。 (2)执行语句 a=1;b=1;c=0; d=--a||b--||(c=b+3); 后,结果:a为0,b为0,c为0,d为1,表达式中的(c=b+3)没有被执行到,c值不变。 2、用C语言正确表示数学意义上的a 正确的表示方法是 aa样子的是考试陷阱。 知识点:if语句的三种形式使用;if和else的搭配;嵌套的if语句的使用 重要程度:★★★★ 1、if语句的三种形式 1.1 if语句 if只管后面一个分号;要管多个用大括号把多个语句括起来。 程序1: if(a
{t=a; a=b; b=t;} -------------------------- 程序2: if(a
t=a; a=b; b=t; 程序1、2注意两者的区别 !!! 图1 if语句的流程图 1.2 if-else语句 它的一般格式如下: if(表达式) 语句1; else 语句2; 例如:对两数大小的比较,输出大数。用if-else语句实现: if(x>y) printf(“%d”,x); else printf(“%d”,y); 图2 if-else语句的流程图 例1:若有以下程序 main( ) { int a=5,b=4,c=6,t=0; if(a
if(a printf("%d %d %d\n",a,b,c); } 执行后输出结果是 答案:645 分析:程序的第一行在定义a、b、c、t四个变量时初始化了值。接下来,第一个if语句的表达式为:a
1.3 if-else-if语句结构 它的一般格式如下:(只有一个语句被执行) if(表达式1) 语句1; else if(表达式2) 语句2 ; else if(表达式3) 语句3 ; …… else 语句n ; 图2 if-else-if 语句的流程图 例2:有如下程序 main( ) { float x=2.0,y; if(x<0.0) y=0.0; else if(x<10.0) y=1.0/x; else y=1.0; printf("%f\n",y); } 该程序的输出结果是( )。 A) 0.000000 B) 0.250000 C) 0.500000 D) 1.000000 分析:首先x的初值为2.0。判断x<0.0,其为假,则跳过语句“y=0.0;”,接着又判断x<10.0,其为真,则执行“y=1.0/x;”,然后将其输出。因此答案选C。 注意: (1)if后面圆括号中的表达式,可以是任意合法的C语言表达式,可以是任意类型的数据。 (2)if子句和else子句中如果只有一条语句,则该语句后的分号不能省。 2、if语句的嵌套(概念考得多) if语句的嵌套:在if语句中又包含一个或多个if语句称为if语句的嵌套。一般形式如下: if(表达式1) if(表达式2) 语句1; else 语句2; else if(表达式3) 语句3; else 语句4; 其执行过程:若表达式1为“真”,则执行其嵌套的if-else语句,否则,执行else后的内嵌if-else语句。其中if-else语句在语法上是一条语句。 特别注意:C语言的语法规定:else子句总是与前面最近的不带else的if相结合,与书写格式无关。 如下面语句: if(表达式1) if(表达式2) 语句1; else 语句2; 实质上等价于: if(表达式1) if(表达式2) 语句1; else 语句2;
知识点:条件运算符号的使用(唯一的三目);条件表达式的运算; 重要程度:★★★★(口诀是“真前假后”) 1、条件运算符 条件运算符由两个运算符组成:?:。条件运算符要求有三个运算对象,称三目运算符,它是C语言中唯一的一个三目运算符。 2、条件表达式(“真前假后”口诀) 表达式1 ? 表达式2:表达式3 其执行过程:先求解表达式1,若为非0(真)则求解表达式2,并将表达式2的值作为整个表达式的值。若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个表达式的值。
例1:以下程序的输出结果是( )。 int a=5,b=4,c=6,d; 分析:这是一个条件表达式的嵌套,先判断a>b为“真”,则需要求解表达式a>c?a:c的值。因此又对a>c进行判断,其为“假”,那么c就是整个表达式的值。答案选C。 3、条件运算符的优先级 条件运算符优先于赋值运算,但低于逻辑运算,关系运算符和算术运算符。条件运算符的结合方向为“自右向左”。如有以下表达式: a>b?a:c>d?c:d 等价于 a>b?a:(c>d?c:d) 如果a=1,b=2,c=3,d=4,则表达式的值等于4。 知识点:switch语句的执行方式;switch语句和 break的搭配; 重要程度:★★★★ 1、switch语句 switch语句的一般形式如下: switch(表达式) { case 常量表达式1:语句1; case 常量表达式2:语句2; …… case 常量表达式n:语句n; default: 语句块n+1; } 其中语句1,语句2等等,可以是一条语句,也可以是若干语句。也可以是嵌套的switch语句。 注意: (1)switch后圆括号中的表达式的值必须是实型或字符型,不能为实型。 (2)case后面是常量表达式,但常量表达式中不能有变量。 (3)default可以出现在语句体中的任何位置,但最多只能有一个。它通常出现在语句体的最后。 2、switch语句的执行过程 首先求解switch后圆括号中表达式的值,然后匹配case标号,有匹配成功则执行后面语句,只需要匹配一次成功,后面就不用再匹配了。(通过三个例子掌握switch的使用!) 例1:按照学生的考试成绩,打印出相应的等级。90分以上的输出“A”等级,80分以上的输出“B”等级,依此类推,60分以下输出“E”等级。程序如下: main( ) { int score; scanf("%d",& score); /* score中存放学生的成绩 */ printf("score=%d: ",score); switch(score/10) { case 10:printf("A\n"); case 9:printf("A\n"); case 8:printf("B\n"); case 7:printf("C\n"); case 6:printf("D\n"); default:printf("E\n"); } } 输入99分,可以知道case 9 是匹配成功的,所以就不用再匹配,直接执行后面的case剩下的语句。直到遇到break结束。 现将上面程序修改如下: main( ) { int score; scanf("%d",&score); printf("score=%d: ",score); switch(score/10) { case 10:printf("A\n");break; case 9:printf("A\n"); break; case 8:printf("B\n"); break; case 7:printf("C\n"); break; case 6:printf("D\n"); break; default:printf("E\n"); break; } } 此时score变量取值为75时,输出结果为:score=75:C 现将上面程序修改如下: main( ) { int score; scanf("%d",&score); printf("score=%d: ",score); switch(score/10) { case 10:printf("A\n"); case 9:printf("A\n"); case 8:printf("B\n"); case 7:printf("C\n"); break; case 6:printf("D\n"); default:printf("E\n"); break; } } 此时score变量取值为95时,输出结果为:score=75:ABC. 考试核心: 1、 switch的概念题目非常重要,switch后圆括号中、case后的表达式的要求牢记。 2、 switch语句有break和没有break之间的区别,注意,只要匹配成功一次,后面不需要继续的匹配了,直接执行匹配的语句直到遇到break语句。 3、 switch嵌套switch的题目是考试的重点,请多次练习。 (1)以下程序运行后的输出结果是:2,1 main() { int x=1,y=0,a=0,b=0; switch(x) { case 1: switch(y) {case 0: a++; break; case 1: b++; break; } case 2: a++;b++;break; } printf(”%d %d\n”,a,b); } (2) 有以下程序,程序运行后的输出结果是——A A、1 B、2 C、3 D、4 main() { 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\n”, m); } 知识点:goto是关键字;goto语句的含义; 重要程度:★ 1、goto语句 goto语句的作用是,无条件的把程序的执行转向语句标号所在的位置。滥用goto语句将使程序的流程毫无规律,可读性差,对于初学者来说应尽量不用。(记住这句话就可以了!)
第三节 if语句
第四节 条件运算符与条件表达式
main()
{
printf("%d\n",d=a>b?(a>c?a:c):(b));
}
A) 5 B) 4 C) 6 D) 不确定第四节 switch语句及其构成的选择结构
第五节 goto语句