第4章 选择结构程序设计 4.1 关系表达式和逻辑表达式 4.1.1 关系表达式 1.关系运算符 关系运算符是比较两个操作数大小的符号。 第4章 选择结构程序设计 4.1 关系表达式和逻辑表达式 4.1.1 关系表达式 1.关系运算符 关系运算符是比较两个操作数大小的符号。 两个操作数一般为数值型数据。 Turbo C的关系运算符及其优先级、结合律如表所示: 运算符 功能 优先级 (值小的优先级高) 结合律 > >= < <= 大于 大于等于 小于 小于等于 6 从左向右 == != 等于 不等于 7
第4章 选择结构程序设计 4.1 关系表达式和逻辑表达式 4.1.1 关系表达式 1.关系运算符 2.关系表达式 第4章 选择结构程序设计 4.1 关系表达式和逻辑表达式 4.1.1 关系表达式 1.关系运算符 2.关系表达式 由关系运算符将两个表达式连接起来的有意义的式子称为关系表达式。 例如:x>=60 a+b<c a>b= =c b+4>c-6 关系表达式的值是一个逻辑值,即“真”或“假”。C语言中,用1表示“真”,用0表示“假”。
第4章 选择结构程序设计 4.1 关系表达式和逻辑表达式 4.1.2 逻辑表达式 1.逻辑运算符 逻辑运算符是确定两个操作数逻辑关系的符号。 第4章 选择结构程序设计 4.1 关系表达式和逻辑表达式 4.1.2 逻辑表达式 1.逻辑运算符 逻辑运算符是确定两个操作数逻辑关系的符号。 两个操作数一般为逻辑型数据。 Turbo C的逻辑运算符及其优先级、结合律如表所示: 运算符 功能 优先级 (值小的优先级高) 结合律 ! 逻辑非 2 从右向左 && 逻辑与 11 从左向右 || 逻辑或 12
第4章 选择结构程序设计 4.1 关系表达式和逻辑表达式 4.1.2 逻辑表达式 1.逻辑运算符 各逻辑运算符的运算规则如表所示: 数据a 第4章 选择结构程序设计 4.1 关系表达式和逻辑表达式 4.1.2 逻辑表达式 1.逻辑运算符 各逻辑运算符的运算规则如表所示: 数据a 数据b a&&b a||b !a !b 1
第4章 选择结构程序设计 4.1 关系表达式和逻辑表达式 4.1.2 逻辑表达式 1.逻辑运算符 2.逻辑表达式 第4章 选择结构程序设计 4.1 关系表达式和逻辑表达式 4.1.2 逻辑表达式 1.逻辑运算符 2.逻辑表达式 由逻辑运算符将两个表达式连接起来的有意义的式子称为逻辑表达式。 例如:!a+b&&c a||b= =c a>0||b<5 a++&&b-- 逻辑表达式的值也是一个逻辑值。如果逻辑运算的对象是一个数值型数据,则该数值型数据应被看作逻辑值,C语言中,非零值看作“真”,零值看作“假”。
第4章 选择结构程序设计 4.1 关系表达式和逻辑表达式 4.1.2 逻辑表达式 1.逻辑运算符 2.逻辑表达式 第4章 选择结构程序设计 4.1 关系表达式和逻辑表达式 4.1.2 逻辑表达式 1.逻辑运算符 2.逻辑表达式 注意:由逻辑运算符&&和||构成的逻辑表达式,在特殊情况下会产生“短路”现象。 (1)由逻辑运算符&&构成的逻辑表达式,在已经确定一个运算对象的值为0时,其逻辑表达式的值即为0,此时不再处理另一个运算对象。 例如:执行:a=-1; b=5; a++&&b--; 结果为:a =0 b=5
第4章 选择结构程序设计 4.1 关系表达式和逻辑表达式 4.1.2 逻辑表达式 1.逻辑运算符 2.逻辑表达式 第4章 选择结构程序设计 4.1 关系表达式和逻辑表达式 4.1.2 逻辑表达式 1.逻辑运算符 2.逻辑表达式 注意:由逻辑运算符&&和||构成的逻辑表达式,在特殊情况下会产生“短路”现象。 (2)同样,由逻辑运算符||构成的逻辑表达式,在已经确定一个运算对象的值为1时,其逻辑表达式的值即为1,此时不再处理另一个运算对象。 例如:执行:a=0; b=5; a++||b--; 结果为:a =1 b=5
第4章 选择结构程序设计 用流程图表示: 4.2 if语句 4.2.1 简单if语句 简单if语句的一般形式为: if(表达式) 语句1; 第4章 选择结构程序设计 用流程图表示: 真 表达式 假 语句2 语句1 4.2 if语句 4.2.1 简单if语句 简单if语句的一般形式为: if(表达式) 语句1; else 语句2; 功能:如果表达式的值为真,则执行语句1,执行完语句1后从语句2后开始继续向下执行;如果表达式的值为假,则跳过语句1而执行语句2。
第4章 选择结构程序设计 4.2 if语句 用流程图表示: 4.2.1 简单if语句 注意: 第4章 选择结构程序设计 4.2 if语句 真 假 语句1 表达式 用流程图表示: 4.2.1 简单if语句 注意: (1)表达式是判断的条件,一般是关系表达式或逻辑表达式,也可以是其他表达式。 (2)条件执行语句中“else 语句2;”部分是选择项,可以缺省,此时条件语句变成: if(表达式) 语句1; 其功能是:若表达式的值为真,则执行语句1,否则跳过语句1继续执行。
第4章 选择结构程序设计 4.2 if语句 4.2.1 简单if语句 注意: 第4章 选择结构程序设计 4.2 if语句 4.2.1 简单if语句 注意: (3)如果语句1或语句2有多于一条语句要执行时,必须使用“{“和”}”把这些语句包括在其中,构成一个复合语句,此时条件语句形式为: if(表达式) { 语句组1; } else { 语句组2; }
例4.1 输出两个数中的较大者。 程序2: main() { int a,b,max; scanf("%d%d",&a,&b); max=a; if(max<b) max=b; printf("max=%d\n",max); } 程序1: main() { int a,b,max; scanf("%d%d",&a,&b); if(a>b) max=a; else max=b; printf("max=%d\n",max); }
第4章 选择结构程序设计 4.2 if语句 4.2.2 嵌套if语句 在if 语句中又包含一个或多个if语句,称为嵌套if语句。 第4章 选择结构程序设计 4.2 if语句 4.2.2 嵌套if语句 在if 语句中又包含一个或多个if语句,称为嵌套if语句。 一般形式如下: if(表达式1) if(表达式2 ) 语句1 else 语句2 else if(表达式3) 语句3 else 语句4
第4章 选择结构程序设计 4.2 if语句 4.2.2 嵌套if语句 说明: 例如: 第4章 选择结构程序设计 4.2 if语句 4.2.2 嵌套if语句 说明: (1)if与else的配对关系从最内层开始,else总是与离它最近的未曾配对的if配对。 (2)if与else的个数最好相同,从内层到外层一一对应,以避免出错。 (3)如果if与else的个数不相同,可以用花括号来确定配对关系。 例如: if (表达式1 ) { if(表达式2 ) 语句1 } else 语句2 这时花括号限定了内嵌if 语句的范围,因此else与第一个if配对。
例4.2 对任意x,根据以下函数关系求对应y的值。 y= 0 (x=0) 1 (x >0) 程序: main( ) { int x,y; scanf("%d",&x); if(x<0) y=-1; else if(x==0) y=0; else y=1; printf("x=%d,y=%d\n",x,y); } 输入:-3 结果:x=-3,y=-1 输入:4 结果:x=4,y=1
第4章 选择结构程序设计 4.3 条件表达式 条件运算符“?”和“:”两个符号组成。 由条件运算符构成的条件表达式的一般形式是: 第4章 选择结构程序设计 4.3 条件表达式 条件运算符“?”和“:”两个符号组成。 由条件运算符构成的条件表达式的一般形式是: <表达式1>?<表达式2>:<表达式3>; 条件运算符的含义是:先求表达式1的值,如果为真,则求表达式2 的值并把它作为整个表达式的值;如果表达式1 的值为假,则求表达式3 的值并把它作为整个表达式的值。
第4章 选择结构程序设计 4.3 条件表达式 例4.3 用条件表达式改写例4.1(输出两个数中的较大者)。 程序: main() { 第4章 选择结构程序设计 4.3 条件表达式 例4.3 用条件表达式改写例4.1(输出两个数中的较大者)。 程序: main() { int a,b,max; scanf("%d%d",&a,&b); max=(a>b)?a:b; printf("max=%d\n",max); }
第4章 选择结构程序设计 4.4 复合语句与空语句 4.4.1 复合语句 第4章 选择结构程序设计 4.4 复合语句与空语句 4.4.1 复合语句 复合语句是由左右花括号括起来的多条语句,一个复合语句在语法上等同于一个语句。 复合语句的一般形式如下: { 说明部分; 语句部分 } 在程序中,凡是单个语句能够出现的地方,都可以出现复合语句。一个复合语句又可以出现在其他复合语句内部。
第4章 选择结构程序设计 4.4 复合语句与空语句 4.4.2 空语句 空语句是只有一个分号的语句,其一般形式为: ; 第4章 选择结构程序设计 4.4 复合语句与空语句 4.4.2 空语句 空语句是只有一个分号的语句,其一般形式为: ; 空语句在语法上占据一个语句的位置,但不做任何操作。
第4章 选择结构程序设计 开关语句的功能是:首先计算switch后面圆括号内表达式的值,若此值等于某个case后面的常量表达式的值,则转向该case后面的语句去执行;若表达式的值不等于任何case后面的常量表达式的值,则转向default后面的语句去执行,如果没有default部分,则将不执行switch语句中的任何语句,而直接转到switch语句后面的语句去执行。 4.5 开关语句 开关语句的一般形式如下: switch(表达式) { case 常量表达式1:语句1; case 常量表达式2:语句2; … case 常量表达式n:语句n; default:语句n+1; }
第4章 选择结构程序设计 4.5 开关语句 说明: (1)switch后面圆括号内的表达式的值和case后面的常量表达式的值都必须是整型或字符型,不允许是浮点型。 (2)同一个switch语句中的所有case后面的常量表达式的值都必须互不相同。 (3)switch语句中的case和default的出现次序是任意的,也就是说default也可以位于case的前面,且case的次序也不要求按常量表达式的大小顺序排列。 (4)每个case或default后的语句可以是多条语句,但不需要使用“{“和”}”括起来。
第4章 选择结构程序设计 4.5 开关语句 说明: (5)由于switch语句中的“case 常量表达式”部分只起标号的作用,而不进行条件判断,所以在执行完某个case后的语句后,将自动转到该语句后面的语句去执行,直到遇到switch语句的右花括号或break语句为止,而不再进行条件判断。如果在执行完一个case分支后,要跳出switch语句转到下一条语句执行,可在一个case结束后、下一个case开始前插入一个break语句。程序一且执行到braek语句,将立即跳出switch语句。
例如: switch(n) { case 1: x=1; case 2: x=2; } 当n=1时, 将连续执行下面两个语句: x=1; x=2; switch(n) { case 1:x=1; braek; case 2:x=2; braek; } 当n=1时, 将只执行一个语句: x=1;
第4章 选择结构程序设计 4.5 开关语句 说明: (6)多个case可以共用一组执行语句。例如: switch(n) { case 1: 第4章 选择结构程序设计 4.5 开关语句 说明: (6)多个case可以共用一组执行语句。例如: switch(n) { case 1: case 2: case 3: x=3; }
第4章 选择结构程序设计 4.5 开关语句 注意: (1)switch的表达式后不能有“;”。 第4章 选择结构程序设计 4.5 开关语句 注意: (1)switch的表达式后不能有“;”。 (2)case和default与其后面的常量表达式间至少有一个空格。 (3)switch语句可以嵌套,break语句只跳出它所在的switch语句。 (4)default语句可以省略。
例4.4 给变量a,b,c输入整数,根据a的值确定对b、c的运算: 其他值时:不做任何操作。 程序: main() { int a,b,c; scanf("%d%d%d",&a,&b,&c); switch(a) { case 1:printf("%d+%d=%d\n",b,c,b+c); break; case 2:printf("%d-%d=%d\n",b,c,b-c); break; case 3:printf("%d*%d=%d\n",b,c,b*c); break; case 4:printf("%d+%d=%d\n",b,c,b/c); }
第4章 选择结构程序设计 4.6 应用举例 例4.5 输入三个数,按由小到大的顺序输出。 分析: 流程图: 第4章 选择结构程序设计 开始 结束 输入a,b,c 输出a,b,c a<b 交换a,b N Y a<c 交换a,c b<c 交换b,c 4.6 应用举例 例4.5 输入三个数,按由小到大的顺序输出。 分析: 已知:输入的三个数(分别用a,b,c来存放)。 求:由小到大的顺序输出的三个数。 处理:(1)a,b中的小者存入a,大者存入b。 (2)a,c中的小者存入a,大者存入c。 (3)b,c中的小者存入b,大者存入c。 流程图:
第4章 选择结构程序设计 4.6 应用举例 例4.5 输入三个数,按由小到大的顺序输出。 程序: #include "stdio.h" 第4章 选择结构程序设计 开始 结束 输入a,b,c 输出a,b,c a<b 交换a,b N Y a<c 交换a,c b<c 交换b,c 4.6 应用举例 例4.5 输入三个数,按由小到大的顺序输出。 程序: #include "stdio.h" main() { int a,b,c,t; printf("a,b,c=?"); scanf("%d,%d,%d",&a,&b.&c); if(a>c) {t=a;a=b;b=t;} if(a>c) {t=a;a=c;c=t;} if(b>c) {t=b;b=c;c=t;} printf("%d,%d,%d",a,b,c); }
第4章 选择结构程序设计 4.6 应用举例 例4.6 输入一个不多于4位的正整数,求出它是几位数,逆序打印出各位数字 分析: 第4章 选择结构程序设计 4.6 应用举例 例4.6 输入一个不多于4位的正整数,求出它是几位数,逆序打印出各位数字 分析: 已知:一个不多于4位的正整数(用x来存放)。 求:该正整数是几位数,该正整数的各位数字(分别用a、b、c、d来存放千位、百位、十位、个位上的数字,由a、b、c、d的值确定该正整数是几位数)。 处理:用算术运算/和%取出组成x的各位上的数字,再从高位到低位判断各位上的数字是否不为零,据此确定该正整数是几位数。
取组成x的各位上的数字(a、b、c、d) 流程图: 取组成x的各位上的数字(a、b、c、d) 开始 结束 输入x N Y 输出4位数及数字 输出3位数及数字 c!=0 输出2位数及数字 d!=0 输出1位数及数字 a!=0 b!=0
取组成x的各位上的数字(a、b、c、d) 开始 结束 输入x N Y 输出4位数及数字 输出3位数及数字 c!=0 输出2位数及数字 d!=0 输出1位数及数字 a!=0 b!=0 程序: #include<stdio.h> main() { int x,a,b,c,d; scanf("%d",&x); a=x/1000; b=x%1000/100; c=x%100/10; d=x%10; if(a!=0) printf("4:%d%d%d%d\n",d,c,b,a); else if(b!=0) printf("3:%d%d%d\n",d,c,b); else if(c!=0) printf("2:%d%d\n",d,c); else if(d!=0) printf("1:%d\n",d); }
第4章 选择结构程序设计 4.6 应用举例 例4.7 输入一个数字,输出对应的星期几的英文单词。 分析: 第4章 选择结构程序设计 4.6 应用举例 例4.7 输入一个数字,输出对应的星期几的英文单词。 分析: 已知:一个数字(1~7,用n来存放)。 求:对应的星期几的英文单词(直接输出)。 处理:由于一个星期有7天,对输入的数字进行判断,有8种情况(包括出错),用开关语句进行处理。
流程图: 开始 输出 Sun 输出 Mon 输出 Tues 输出 Wednes 输出 Thurs 输出 Fri 输出 Satur 输出 Error 结束 n =0 =1 =2 =3 =4 =5 =6 其他
程序: #include <stdio.h> main() { int n; scanf("%d",&n); switch(n) case 0: printf("Sunday\n"); break; case 1: printf("Monday\n"); break; case 2: printf("Tuesday\n"); break; case 3: printf("Wednesday\n"); break; case 4: printf("Thursday\n"); break; case 5: printf("Friday\n"); break; case 6: printf("Saturday\n"); break; default: printf("Error"); }
第4章 选择结构程序设计 4.7 本章考点 关系运算符和关系表达式。 逻辑运算符和逻辑表达式。 条件运算符和条件表达式。 第4章 选择结构程序设计 4.7 本章考点 关系运算符和关系表达式。 逻辑运算符和逻辑表达式。 条件运算符和条件表达式。 简单if语句的格式与功能。 嵌套if语句的格式与功能。 switch语句的格式与功能。
第4章 选择结构程序设计 4.8 典型试题详解 1.以下程序运行后的输出结果是________。 main() { int p=30; 第4章 选择结构程序设计 4.8 典型试题详解 1.以下程序运行后的输出结果是________。 main() { int p=30; printf("%d\n",(p/3>0?p/10:p%3)); } 正确答案:3(知识点:条件运算符和条件表达式) 试题分析:表达式p/3的值为10,大于0,所以条件表达式(p/3>0?p/10:p%3)的值取p/10的值3。
第4章 选择结构程序设计 4.8 典型试题详解 2.有以下程序: main() { int i=1,j=1,k=2; 第4章 选择结构程序设计 4.8 典型试题详解 2.有以下程序: main() { int i=1,j=1,k=2; if((j++||k++)&&i++) printf("%d,%d,%d\n",i,j,k); } 执行后输出结果是________。 A)1,1,2 B)2,2,1 C)2,2,2 D)2,2,3 正确答案:C(知识点:逻辑运算符和逻辑表达式) 试题分析:根据运算规则,对逻辑表达式(j++||k++)&&i++应先计算表达式j++的值,其结果是表达式j++的值为1,j的值为2,再将表达式j++的值1与k++进行||运算,由逻辑运算符||构成的逻辑表达式在已经确定一个运算对象的值为1时,其逻辑表达式的值即为1,此时不再处理其另一个运算对象,因此,不再计算k++,k的值仍为2。逻辑表达式(j++||k++)的值为1,再与i++进行&&运算,需要计算表达式i++的值,表达式i++为1,i的值为2,逻辑表达式(j++||k++)&&i++的值1,执行printf("%d,%d,%d\n",i,j,k);语句,其结果为2,2,2。
第4章 选择结构程序设计 4.8 典型试题详解 3.以下程序输出的结果是________。 main() 第4章 选择结构程序设计 4.8 典型试题详解 3.以下程序输出的结果是________。 main() { int a=5,b=4 c=3,d; d=(a>b>c); printf("%d\n",d); } 正确答案:0(知识点:关系运算符和关系表达式) 试题分析:根据运算规则,对表达式(a>b>c)应先计算表达式a>b的值,其结果为1,再计算1>c的值,其结果为0,故d的值为0。
第4章 选择结构程序设计 4.8 典型试题详解 4.有定义语句:int a=1,b=2,c=3,x;,则以下选项中各程序段执行后,x的值不等于3的是________。 A)if(c<a)x=1; B)if(a<3)x=3; else if(b<a) x=2; else if (a<2) x=2; else x=3; else x=1; C)if(a<3) x=3; D)if (a<b) x=b; if(a<2) x=2; if(b<c) x=c; if(a<1) x=1; if(c<a) x=a; 正确答案:C(知识点:简单if语句和嵌套if语句的格式与功能) 试题分析:根据嵌套if语句的功能,对各程序段执行后,A)的结果是x=3,B)的结果是x=3,C)的结果是x=2,D)的结果是x=3。在这类题目中,一定要注意其逻辑关系。
第4章 选择结构程序设计 4.8 典型试题详解 5.以下程序运行后的结果是________。 main() 第4章 选择结构程序设计 4.8 典型试题详解 5.以下程序运行后的结果是________。 main() { int a=1,b=3,c=5; if(c=a+b) printf("yes\n"); else printf("no\n"); } 正确答案:yes(知识点:简单if语句的格式与功能、运算符=和==) 试题分析:if语句后判断的条件是c=a+b,即将a+b的值赋给c,再判断c的值是否为真,而不是判断c是否等于a+b。运算符=和==是不同的。
第4章 选择结构程序设计 4.8 典型试题详解 6.若有以下程序: main() { int a=4,b=3,c=5,t=0; 第4章 选择结构程序设计 4.8 典型试题详解 6.若有以下程序: main() { int a=4,b=3,c=5,t=0; if(a<b)t=a;a=b;b=t; if(a<c)t=a;a=c;c=t; printf("%d%d%d",a,b,c); } 执行后的输出结果为________。 正确答案:503(知识点:简单if语句的格式与功能\运算符=和==) 试题分析:根据a<b的值0,程序执行a=b;b=t;,则a=3,b=0,再根据a<c的值1,程序执行t=a;,再执行a=c;c=t;,则a=5,c=3。注意,第一个if语句在其后的t=a;后已经结束,其后的a=b;b=t;是第一个if语句语法上下面的语句。同样,第一个if语句也在其后的t=a;后结束。
第4章 选择结构程序设计 4.8 典型试题详解 7.若a,b,c1,c2,x,y均为整型变量,正确的switch语句是________。 第4章 选择结构程序设计 4.8 典型试题详解 7.若a,b,c1,c2,x,y均为整型变量,正确的switch语句是________。 A)switch(a+b); B)switch(a*a+b*b) { case 1:y=a+b;break; { case 3: case 0:y=a-b;break; case 1:y=a+b;break; } case 3:y=b-a;break;} C)switch a D)switch(a-b) { case c1:y=a-b;break; { default:y=a*b;break; case c2:x=a*d;break; case 3:case 4:x=a+b;break; } case 10:case 11:y=a-b;break; } 正确答案:D(知识点:switch语句的格式) 试题分析:switch语句格式规定:switch后的表达式后面不能有“;”;case后只能是整型或字符型常量;同一个switch语句中的所有case后面的常量表达式的值都必须互不相同。
第4章 选择结构程序设计 4.8 典型试题详解 8.有如下程序,该程序的输出结果是________。 main() 第4章 选择结构程序设计 4.8 典型试题详解 8.有如下程序,该程序的输出结果是________。 main() { int x=1,a=0,b=0; switch(x) { case 0:b++; case 1:a++; case 2:a++;b++; } printf(“a=%d,b=%d\n”,a,b); } A)a=2,b=1 B)a=1,b=1 C)a=1,b=0 D)a=2,b=2 正确答案:A(知识点:switch语句的功能) 试题分析:x=1,程序从case 1:后执行,case 1: 后没有break语句,顺序执行case 2:后的语句。