考点分析四选择结构.ppt
考点分析四,选择结构,考点1 C语言的逻辑值,计算机中有两个逻辑值,分别用“真”和“假”表示,任何复杂计算都是以这两个逻辑计算为基础。C语言中没有专门的逻辑值,用非0表示“真”,用0表示“假”。因此对于任何一个表达式,如果值为0,则代表“假”,反之,如果值不为0,则无论正负都代表“真”。,1、选择结构和逻辑值,关系运算符实际就是比较两个运算对象的大小。C语言中的关系运算符包括:、=、=、!=。分别为小于、小于等于、大于、大于等于、等于、不等于运算。说明1)由两个字符组成的运算符之间不能有空格;2)注意区分“=”和“=”,前者才是数学中的等于;3)、=优先级相同,=、!=的优先级相同,且前面四个的优先级高于后面两个。关系运算符的优先级高于赋值运算符,低于算术运算符。,考点2 关系运算符,由关系运算符构成的表达式,称为关系表达式。关系运算符两边的对象可以是c语言中任何合法表达式,例如:ab,a(b=1),(a=c)!=(b=d),aA 关系运算的值为逻辑值,因而只有“1”、“0”两种取值。例如:int i=4,j=3,k,t;k=ij;ij为1,所以k的值为1。t=ijk;关系运算符是左结合性,因此,先计算ij,值为1,再计算1k,值为0,所以t为0。注意:对于两个浮点数,应避免使用x=y这样的关系表达式。,考点3 关系表达式,考点4:逻辑运算符,逻辑运算符有三种:!,&,|。其中!运算符优先级最高,|优先级最低,&次之。逻辑运算符的结合性从左到右。,2、逻辑运算符和逻辑表达式,考点4:逻辑表达式,由逻辑运算符构成的表达式称为逻辑表达式。与关系运算符一样,逻辑运算符两边的运算对象也可以是c语言的任意合法表达式,逻辑表达式的值也只有“1”和“0”两种。逻辑运算真值表如下:,关于逻辑表达式有以下两点说明:1)数学关系式aa。,2)逻辑表达式求解过程中,并不是所有的逻辑运算符都被执行,只有必须执行该逻辑运算符才能求出表达式的值的解时才执行。例如,假设a=0,b=0,则对于下面的两个逻辑表达式:a+&b+系统执行时先计算表达式a+的值,值为0,则系统判断整个逻辑表达式的值为0,跳过b+不执行,因此计算结束后,a为1,b为0。+a|+b表达式+a的值为1,则系统判断整个逻辑表达式的值为1,仍然跳过+b不执行,因此计算结束后,a为1,b为0。,考点5、条件运算符和条件表达式,条件运算符的形式为“?:”,优先级别仅高于赋值运算符。其形式为:表达式1:表达式2?表达式3,当“表达式1”的值为真时,计算“表达式2”的值,并将该值做为整个条件表达式的值,当“表达式1”为假时,计算“表达式3”的值,并将该值做为整个条件表达式的值。例如:max=(ab)?a:b,*考点7、if语句的三种形式及其执行过程,1)单条if语句 if(表达式)语句;例如:if(a0)a=1;2)if-else语句 if(表达式)语句 1;else 语句2;例如 if(a0)a=1;else a=-1;,5、if语句,3)if-else-if语句 if(表达式1)语句1;else if(表达式2)语句2;else if(表达式m-1)语句m-1;else 语句m;,例如:if(a0)a=1;else if(a=0)a=0;else a=-1;,三种形式的if语句中,在if后都有表达式,该表达式为c语言中任意合法表达式,一般为逻辑表达式或关系表达式,表达式之后是一条语句,而且仅可以是一条语句,称为if子句或else子句。如果该子句中含有两个以上的语句,必须用花括弧括起来,因为复合语句是被当成一条语句来处理。说明:1)对于第2种和第3种if语句,不要将其误认为是多条语句(if语句,else-if语句,else语句),它们都属于第一条if语句。2)每个else前必须有一个分号,整个if语句结束处有一个分号,这是c语言的语法要求。,例如:if(a0)a=1;else a=-1;在a=1和a=-1后都要有分号。3)else不是一条独立的语句,它只是if语句的一部分,必须和if配对使用。,if语句和else语句后的表达式是c语言中任意合法表达式,因此也可以是if语句本身。即在if语句中又包含一个或多个if子句,这称为if语句的嵌套。一般形式如下:if(表达式1)if(表达式2)语句1;else 语句2;else if(表达式3)语句3;else 语句4;注意:else语句总是与它上面离它最近的if语句配对。,考点8、嵌套的if语句,8、switch语句,格式:switch(表达式)case 常量表达式1:语句组1;break;case 常量表达式2:语句组2;break;case 常量表达式n:语句组n;break;default:语句组n+1;,考点9:switch语句的形式,说明:(1)switch、case、default都是c语言的关键字。(2)switch后的表达式可以是任何类型。(3)关键字case和常量表达式之间一定要有空格。例如:case 1 不可以写成case1。各常量表达式的值应该各不相同,并且类型必须与switch后面的表达式的类型一致。case语句标号后的语句序列可以是一条或多条语句,必要时也可以省略不写,即由多个case共同执行一组语句。(4)default代表所有case标号之外的标号。default标号可以出现在switch语句体的任何位置,也可以不出现。,考点10、switch语句的执行过程,switch语句按照以下步骤执行:1)计算switch后表达式的值。2)在switch语句体内寻找与该值吻合的case标号,根据匹配情况,有以下三种执行方式:有匹配的case标号。则执行该标号后的各条语句,包括其后所有的case和default标号后的语句,直到switch语句体结束或者遇到break语句为止;没有匹配的case标号,但存在default标号。则执行该default标号后所有的语句,直到switch语句体结束或者遇到break语句为止;没有匹配的case标号,也没有default标号,跳出switch语句体。,例题,1、下列选项中,当 x 为大于l 的奇数时,值为 0 的表达式是()。A)x%2=1 B)x/2 C)x%2!=0 D)x%2=0,2、下列关于逻辑运算符两侧运算对象的叙述中正确的是()。A)只能是整数 0 或1 B)只能是整数 0 或非0整数 C)可以是结构体类型的数据 D)可以是任意合法的表达式,3、设有条件表达式:(EXP)?i+:j-,则下列表达式中与(EXP)完全等价的是()。A)(EXP=0)B)(EXP!=0)C)(EXP=1)D)(EXP!=1),4、在下列给出的表达式中,与 while(E)中的(E)不等价的表达式是()。A)(!E=0)B)(E0E0)C)(E=0)D)(E!=0),5、若有定义 int x,y;并已正确给变量赋值,则下列选项中与表达式(x-y)?(x+):(y+)中的条件表达式(x-y)等价的是()。A)(x-y0)B)(x-y0)D)(x-y=0),6、当把四个表达式用作 if语句的控制表达式时,有一个选项与其他三个选项含义不同,这个选项是()。A)k%2 B)k%2=1 C)(k%2)!=0 D)!k%2=1,7、已有定义:char c;,程序前面已在命令行中包含 ctype.h 文件,不能用于判断 c中的字符是否为大写字母的表达式是()。A)isupper(c)B)A=c=Z C)A=c&c=Z D)c=(z-32)&(a-32)=c,8、设有定义:int a=2,b=3,c=4;,则下列选项中值为 0 的表达式是()。A)(!a=1)&(!b=0)B)(ab)&!c 1 C)a&b D)a(b+b)&(c-a),9、在嵌套使用 if语句时,C 语言规定 else总是()。A)和之前与其具有相同缩进位置的 if配对 B)和之前与其最近的 if配对 C)和之前与其最近的且不带 else的 if配对 D)和之前的第一个 if配对,10、下列计算公式:x(x=0)y=-x(x=0)y=sqrt(x);B)y=sqrt(x);else y=sqrt(-x);if(x=0)y=sqrt(x);D)y=sqrt(x=0?x:-x);if(x0)y=sqrt(-x);,11、设变量 x 和 y均已正确定义并赋值。下列 if语句中,在编译时将产生错误信息的是()。A)if(x+);B)if(xy,12、有下列程序:main()int a=0,b=0,c=0,d=0;if(a=1)b=1;c=2;else d=3;printf(%d,%d,%d,%dn,a,b,c,d);程序输出()。A)0,1,2,0 B)0,0,0,3 C)1,1,2,0 D)编译有错,14、下列叙述中正确的是()。A)break 语句只能用于 switch 语句 B)在 switch语句中必须使用 default C)break 语句必须与 switch 语句中的case 配对使用 D)在 switch语句中,不一定使用 break 语句,15、有下列程序:main()int k=5,n=0;do switch(k)case 1:case 3:n+=1;k-;break;default:n=0;k-;case 2:case 4;n+=2;k-;break;printf(%d,n);while(k0 程序运行后的输出结果是()。A)235 B)0235 C)02356 D)2356,16、若有定义:float x=1.5;int a=1,b=3,c=2;则正确的 switch 语句是()。A)switch(x)case 1.0:printf(*n);case 2.0:printf(*n);B)switch(int)x);case 1:printf(*n);case 2:printf(*n);C)switch(a+b)case 1:printf(*n);case 2+1:printf(*n);D)switch(a+b)case 1:printf(*n);case c:printf(*n);,17、有下列程序:main()int k=5,n=0;while(k0)switch(k)default:break;case 1:n+=k;case 2:case 3:n+=k;k-;printf(%dn,n);程序运行后的输出结果是()。A)0 B)4 C)6 D)7,填空,1、已定义 char ch=$;int i=1,j;,执行 j=!ch&i+以后,i 的值为()。,2、下列程序用于判断 a、b、c 能否构成三角形,若能,输出 YES,否则输出 NO。当给 a、b、c 输入三角形三条边长时,确定 a、b、c 能构成三角形的条件是需同时满足三个条件:a+bc,a+cb,b+ca。请填空。main()float a,b,c;scanf(%f%f%f,/*a、b、c 不能构成三角形*/,3下列程序的功能是输出 a、b、c 三个变量中的最小值。请填空。#include main()int a,b,c,t1,t2;scanf(%d%d%d,4下列程序运行后的输出结果是 _。main()int x,a=1,b=2,c=3,d=4;x=(ax)?x:d;printf(%dn,x);,5下列程序运行后的输出结果 _。main()int a=1,b=2,c=3;if(c=a)printf(%dn,c);else printf(%dnb);,6下列程序的运行结果是 _。main()int a=2,b=7,c=5;switch(a0)case 1:switch(b0)case 1:printf();break;case 2:printf(!);break;case 0:switch(c=5)case 0:printf(*);break;case 1:printf(#);break;case 2:printf($);break;default:printf(,