1、共 34 页 第 1 1 页共 34 页 第 2 2 页基本概念基本概念逻辑的表达逻辑的表达用用ifif语句和语句和switchswitch语句实现选择结构语句实现选择结构条件运算符条件运算符基本技能基本技能编程实践编程实践共 34 页 第 3 3 页关系运算符和关系表达式关系运算符和关系表达式关系运算符关系运算符 1.1.关系运算符关系运算符 关系运算是进行比较大小的运算,并产生运算结果关系运算是进行比较大小的运算,并产生运算结果1 1(真)或(真)或 0 0(假)。(假)。语言中的关系运算符有种语言中的关系运算符有种: : 、!、!优先次序:前种同级,高于后种(后种同级)优先次序:前种同级
2、,高于后种(后种同级)关系运算符的结合性为从左到右;关系运算符的结合性为从左到右;算术运算符算术运算符 (高高)关系运算符关系运算符赋值运算符赋值运算符 (低低)注意!共 34 页 第 4 4 页关系表达式关系表达式关系表达式的值为逻辑值关系表达式的值为逻辑值,“,“真真”或或“假假”. . 注意注意: : 语言没有逻辑型数据,语言没有逻辑型数据,关系表达式关系表达式的真、假的真、假 是以数值是以数值“”代表代表“真真”,以以“”代表代表“假假”。 例例 :设:设 a=3, b=2, c=1 a=3, b=2, c=1 ,求下列表达式的值?,求下列表达式的值? cb; cb; (a-b)=1;
3、 (a-b)=1; b+cb+ca; bc; (f=abc; (自左至右自左至右 ) )共 34 页 第 5 5 页逻辑运算符逻辑运算符 & (& (逻辑与逻辑与) ) 、 | (| (逻辑或逻辑或) ) 、! (! (逻辑非逻辑非) )说明说明: :(1 1)“&”&”和和“| ”| ”是是“双目(元)运算符双目(元)运算符”, ,它要它要求有两个操作数。求有两个操作数。(2 2)“! ”! ”是是“单目(元)运算符单目(元)运算符”,只要求有一个,只要求有一个运算量。运算量。(3 3)优先级次序:)优先级次序:! & |! & |逻辑运算符和逻辑运算符和逻辑表达式逻辑表达式 a&b a&b
4、 a a、b b均为真均为真, 则则a&ba&b为为1 1(真)。(真)。 a|ba|b a a、b b之一为真之一为真,则,则a|ba|b为为1 1(真)。(真)。 !a !a 若若a a为真为真, ,则则!a!a为假。为假。 共 34 页 第 6 6 页!(非)!(非) (高高)算术运算符算术运算符 关系运算符关系运算符& 和和 |赋值运算符赋值运算符 (低低)例例a+bn+3 a=534(a+b)(n+3)共 34 页 第 7 7 页逻辑表达式逻辑表达式规定:判断一个逻辑量为规定:判断一个逻辑量为“真、假真、假”的方法:的方法:“非非” ” 代表代表“真真”, “ “”代表代表“假假”
5、例例 :写出:写出1x101x1&x10 1x1&x10 1x3 & 2 | 83 & 2 | 84!0 !0 值为:值为:“? ?” ” b&d b&d 值为:值为:“? ? ” ” 例例(m=ab)&(n=c-d(m=ab) x=a;if (ab) x=a;1. 单选择单选择if语句语句 语句语句零零条件条件非零非零条件条件可以是关系式或逻辑式可以是关系式或逻辑式选择语句选择语句if 语句语句共 34 页 第 1111 页2. 双选择双选择if语句语句语句格式语句格式: :if (if (条件条件) ) 语句组语句组1; 1; else else 语句组语句组2;2;功能功能:当条件为非零
6、时执行当条件为非零时执行语句组语句组1否则执行否则执行语句组语句组2。APB非零非零零零共 34 页 第 1212 页if printf(“及格及格n”);else printf(“不及格不及格n”);main() int a; scanf(“%d”,&a); if (a60) printf(“%dn”,a); 输出不及格的成绩输出不及格的成绩共 34 页 第 1313 页#include main( ) int a,b,max; printf(Input a and b=); scanf(%d%d,&a, &b); /* input number a and b*/ if ( ab ) ma
7、x=a; /*如果如果ab,则将则将a=max */ else max=b; /* 否则,否则, b=max */ printf(The max of a and b is : %dn, max);ab?max=bmax=aYN求求a a和和b b两数中较大的一个两数中较大的一个共 34 页 第 1414 页 说出下列程序的输出结果:说出下列程序的输出结果:main()main() int int a; a; scanf(%d,&a scanf(%d,&a);); if (a50) printf(%d,a if (a50) printf(%d,a);); if (a40) printf(%d,
8、a if (a40) printf(%d,a);); if (a30) printf(%d,a if (a30) printf(%d,a);); 程序运行程序运行: : 输入输入5858, 输出输出? ? 输入输入3030, 输出?输出?共 34 页 第 1515 页有关有关if语句的说明语句的说明l 条件后面不加分号条件后面不加分号l 语句之后有分号语句之后有分号l else不是语句,不能单独使用不是语句,不能单独使用l 当当if后有多个执行语句时,必须用后有多个执行语句时,必须用 将多将多 个语句括起来,构成一个复合语句,而个语句括起来,构成一个复合语句,而 之外不必有分号。之外不必有分号
9、。共 34 页 第 1616 页if语句的嵌套语句的嵌套格式:格式:if(表达式)(表达式) if( 表达式表达式1) 语句语句11; else 语句语句12; else if (表达式表达式2) 语句语句21; else 语句语句22;在在ifif语句的语句的“语句语句1”1”或或“语句语句2”2”中又包含着中又包含着ifif语句语句判断表达式的值,若为非判断表达式的值,若为非0,再判断,再判断表达式表达式1的的值,非值,非0执行语句执行语句11,否则执行语句,否则执行语句12若表达式的值为若表达式的值为0,再判断,再判断表达式表达式2的值,非的值,非0执行语句执行语句21,否则执行语句,否
10、则执行语句22功能功能:外if内嵌if共 34 页 第 1717 页下列程序段表示的数学式下列程序段表示的数学式? ? y y=-1;=-1; if (x!=0) if (x!=0) if (x0) y=2 if (x0) y=2* *sin(xsin(x) ); ; else y=0; else y=0; 程序段表示的数学式程序段表示的数学式: : 0 ( 0 (x0) x0) 2sinx (x0) 强调强调:ifif和和elseelse可成对出现,也可成对出现,也可不成对出现,每个可不成对出现,每个elseelse都与距都与距其最近的其最近的ifif配对。配对。共 34 页 第 1818
11、页 if 语句的常用格式:语句的常用格式: if(表达式表达式1) 语句语句 1 else if(表达式表达式2) 语句语句 2 else if(表达式表达式3) 语句语句 3 else if(表达式表达式m) 语句语句 m else 语句语句 n仅执行表达式为真的仅执行表达式为真的else if后的内嵌语句后的内嵌语句,若所有的若所有的表达式值都为表达式值都为0,则执行最后一个则执行最后一个else后的内嵌语句后的内嵌语句.共 34 页 第 1919 页 已知已知 编一个程序,输入一个编一个程序,输入一个x x的值,输出的值,输出y y值。值。010001)(xxxxy程序为: main(
12、) int x, y; scanf(“%d”,&x); if(x0) y=-1; else if(x= 0) y=0; else y=1; printf(“x=%d, y=%dn”, x, y); 共 34 页 第 2020 页switchswitch语语句句 该语句为开关语句,适合解决多分支的情况。该语句为开关语句,适合解决多分支的情况。格式:格式:switch(switch(表达式)表达式) case case 常量表达式:语句常量表达式:语句序列序列; ; case case 常量表达式:语句常量表达式:语句序列序列; ; case case 常量表达式常量表达式n n: 语句序列语句序
13、列n;n; default default :语句序列:语句序列n+1;n+1; 说明说明:执行顺序如下:执行顺序如下:switch 语句语句可以是一条语句,也可可以是一条语句,也可以是多条语句。多条语以是多条语句。多条语句不必用括号括起来。句不必用括号括起来。起语句标号的作用,不进行条起语句标号的作用,不进行条件判断,在执行完某个件判断,在执行完某个 case后的语句序列后,将自动转移后的语句序列后,将自动转移到下一个到下一个case继续执行。继续执行。可以是整型、可以是整型、字符型。字符型。共 34 页 第 2121 页 a. a. 计算表达式的值;计算表达式的值; b. b. 找到与表达
14、式的值相同的找到与表达式的值相同的casecase常量表达式,执行该常量表达式,执行该casecase后边的语句序列,之后后边的语句序列,之后依次往下执行语句块依次往下执行语句块。表达式语句序列1语句序列2语句序列n语句序列n+1 共 34 页 第 2222 页每个语句序列的最后一条语句后增加每个语句序列的最后一条语句后增加break语句,执行流程为:语句,执行流程为:表达式语句序列1语句序列n语句序列n+1语句序列2共 34 页 第 2323 页 根据考试成绩的等级打印出百分制分数段。根据考试成绩的等级打印出百分制分数段。采用多分支情况程序段:采用多分支情况程序段: switch( grad
15、e ) case A : printf(“85100n”) ; break; case B : printf(“7084n”); break; case C: printf(“6069n”); break; case D :printf(“60n”); break; default : printf(“error ”); 若若 grade= A时,输出结果为时,输出结果为? 当当 grade= B时,输出结果为?时,输出结果为?共 34 页 第 2424 页流程图为:流程图为: grade输出 “85100”输出 “b ? a : bmax=ab ? a : b 若若 a=3, b=2, a=
16、3, b=2, 则则 max=?max=?说明说明: (1) (1) 条件运算符优于赋值运算符条件运算符优于赋值运算符。 (2) (2) 条件运算符的结合方向为条件运算符的结合方向为“自自右向右向左左”。 如:当如:当a=1,b=2,c=3, d=4 a=1,b=2,c=3, d=4 时,时,表达式表达式 ab ? a : cd ? c : d , ab ? a : cd ? c : d , 值为:值为:? ? 如:如: 若若 x=1,y=0,a=3,b=-3x=1,y=0,a=3,b=-3 表达式表达式 (yx?a:b)&a+b (yx?a:b)&a+b 值为:值为:? 40条件运算符条件运
17、算符共 34 页 第 2828 页(3) 条件表达式中的表达式的类型可以与表达式条件表达式中的表达式的类型可以与表达式和表达式的类型不同。条件表达式值的类和表达式的类型不同。条件表达式值的类型为二者中较高的类型。型为二者中较高的类型。如:如: xy ? 1.2 : 6 , 当当xy成立时成立时条件表达式的值为条件表达式的值为1.2 ,否则为实型数据,否则为实型数据6.0。 c=xy ? 1 : s , 当当xy成立时成立时c=1, 否则否则c= s。共 34 页 第 2929 页if ( y0 ) x=-y;elsex=y;(y0)?x=-y:x=y;等价等价等价等价x = (y=A& ch
18、ch=(ch=A& ch=Z)? (ch+32):ch;b)b) t=a; a=b; b=t; t=a; a=b; b=t; if(a if(ac)c) t=a; a=c; c=t; t=a; a=c; c=t; if(b if(bc)c) t=b; b=c; c=t; t=b; b=c; c=t; printf(The printf(The sorted number is: %d %d sorted number is: %d %d %dn %dn, , a,b,ca,b,c);); 共 34 页 第 3333 页奇偶判断奇偶判断 z%2=0 z%2=0 数据交换数据交换 a,b,t t=
19、a;a=b;ba,b,t t=a;a=b;b=t;=t;获取数的每一位数字获取数的每一位数字 X X与与y y的个位数字相同的个位数字相同 x%10=y%10 x%10=y%10 如何如何判断十位数上数字相同判断十位数上数字相同? ?共 34 页 第 3434 页数据区间的数据区间的C C语言表达语言表达 1x101=90=90分的同学用分的同学用A A表示,表示,60-8960-89分之间的用分之间的用B B表示,表示,6060分以下的用分以下的用C C表示。表示。 1.1.程序分析:程序分析:(ab)?a:b(ab)?a:b这是条件运算符的这是条件运算符的基本例子。基本例子。共 34 页
20、第 4141 页 题目:给一个不多于题目:给一个不多于5 5位的正整数,要求:位的正整数,要求:一、求它是几位数,二、逆序打印出各位一、求它是几位数,二、逆序打印出各位数字。数字。 1. 1. 程序分析:学会分解出每一位数,如下程序分析:学会分解出每一位数,如下解释:解释:( (这里是一种简单的算法这里是一种简单的算法) ) 共 34 页 第 4242 页 题目:一个题目:一个5 5位数,判断它是不是回文数。位数,判断它是不是回文数。即即1232112321是回文数,个位与万位相同,十位是回文数,个位与万位相同,十位与千位相同。与千位相同。共 34 页 第 4343 页 题目:请输入星期几的第一个字母来判断题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则一下是星期几,如果第一个字母一样,则继续判断第二个字母。继续判断第二个字母。 1.1.程序分析:用情况语句比较好,如果第程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或一个字母一样,则判断用情况语句或ifif语语句判断第二个字母。句判断第二个字母。