《C语言程序设计》课程教案表
授课题目
第三章程序的控制结构(3)——选择结构if 课时安排 1 授课时间
教学目的和要求
1.掌握:条件表达式、if语句
2.熟悉:关系运算符和关系表达式、逻辑运算符和逻辑表达式
教学内容
1.基本内容:(1)关系运算符和关系表达式(2)逻辑运算符和逻辑表达式(3)条件语句2.重点:条件语句
讲课进程和时间分配
引子(15分钟)
关系运算就是比较运算,即将两个数据进行比较,判定两个数据是否符合给定的关系。
a >
b a = = b a != b
1、关系运算符和关系表达式
(1)关系运算符及其优先次序
1)关系运算符
C语言中关系运算符为二目运算符,共有6种:
< 小于关系运算符
<= 小于等于
> 大于
>= 大于等于
= = 等于)
!= 不等于
关系操作数可以是数值类型数据和字符型数据。
2)关系运算符的优先级
①<、<=、> 和>= 为同一级,== 和!= 为同一级。且前4个高于后2个;结合方向
均为自左至右。
②关系运算符的优先级低于算术运算符,但高于赋值运算符。
例如:
a+b > b+c 等效于(a+b)>(b+c)。
(2+a)==(b-a) 等效于2+a == b-a。
(2)关系表达式
1)关系表达式的概念
是指用关系运算符将两个表达式连接起来进行关系运算的式子。
例如:
a +
b > b +
c 比较两个算术表达式的值
a <= 2 *
b 比较变量和算术表达式的值
'a' < 'b' 比较两个字符的ASCII码值
2)关系表达式的值—逻辑值(“真”或“假”)
由于C语言没有逻辑型数据,所以,用整数“1”表示“逻辑真”,用整数“0”表示“逻辑假”。
例如,假设a=3,b=4,c=5则:
a>b的值为0(假)。
(a>b)!=c的值为1(真)。
(a
注意:C语言用整数“1”表示“逻辑真”,用整数“0”表示“逻辑假”。所以,关系表达式的值,还可以参与其它种类的运算,例如算术运算、逻辑运算等。
3)关系运算符的结合律
C语言规定关系表达式采取左结合律。表达式中出现优先级别为同一级别的运算符时,则按从左到右结合方向处理。
例如:
int a=2,b=3,c=1;
a>b 先计算a>b,值是0 , 再计算0 6>3<2 值: 1 先计算6>3 ,值是1 , 再计算1<2,值为1 2、逻辑运算符和逻辑表达式 (1)逻辑运算符 C语言提供3种逻辑运算符: && 逻辑与(相当于“同时”) || 逻辑或(相当于“或者”) ! 逻辑非(相当于“否定”) 其中,&&和||为双目运算符,且结合方向为自左至右;! 为单目运算符,仅对其右边的操作数进行逻辑求反运算。 1)逻辑非! 逻辑非是一元运算符。 操作数值为0,逻辑非运算的结果为1(逻辑真); 当操作数值为非0时,逻辑非运算的结果为0。例如: int a=5,b=3; !a 结果:0 !(a < b) 结果:1。因为a < b 的值为 0 2)逻辑与 && 逻辑与是二元运算,只有参加逻辑与运算的两个操作数值均为非0(逻辑真)时,结果才为真。例如: int a = 5,b = 3; a && b 值: 1 (a < b) && (a > 0) 值:0,因为a 3)逻辑或|| 逻辑或也是二元运算,只要两个操作数中有一个为非0(逻辑真),结果就为1。 例如: int a=5,b=3 a || b 值:1 (a < b) || (a > 0) 值:1 因为a > 0 的值为1。 (2)逻辑运算符优先级 C 语言逻辑运算符的优先级规定如下: 1) 优先级顺序为 ! → && → || 2) 与其他种类运算符的优先关系: 高 低 例如:!a&& b > 5 计算顺序:(!a )&&(b > 5)a = = b || a < c 计算顺序:a = = (b||(a< c)) (3)逻辑表达式 1)逻辑表达式的概念 所谓逻辑表达式是指,用逻辑运算符将1个或多个表达式连接起来,进行逻辑运算的式子。在C 语言中,可以用逻辑表达式表示多个条件的组合。 例如:!(a > b) 对关系表达式的值取非, (a > b )&&(b > c ) (a > b )&&(b > c )||(b == 0) 2)逻辑量的真假判定 C语言用整数“1”表示“逻辑真”,用“0”表示“逻辑假”。但在判断一个表达式或变量的“真”或“假”时,如果为0,则判定为“逻辑假”;如果为非0,则判定为“逻辑真”。 3)逻辑运算符的结合性 C 语言逻辑运算符采用左结合律。表达式中出现优先级别为同一级别的运算符时, 按从左到右的结合方向处理。例如:a && b && c 计算顺序为:(a&& b)&& c 。 3、条件语句(25分钟) (1)if 语句的三种格式 引子:例如计算分段函数 y= 计算 x<0 ,如果结果为1:计算:y=3-x; 否则,计算:y=2 * x; 需要根据x 的值进行流程选择(分支)。 赋值运算符 &&和 || 关系运算符 算术运算符 !(非) 3-x (x<0) 2x (x>=0) 首先先判断表达式的值 若为非0则执行下面的语句 若为0则跳过该语句 1)单分支选择语句 一般形式:i f (表达式) 语句 例:main() { float x , y; scanf(“%f ”, &x); y = 2 * x ; if ( x < 0 ) printf(“y= %6.2f”, y ); } 如果x<0为真,则打印y 的值,否则跳过printf(“y= %6.2f”, y )直接执行下面的语句。 练习:运行下面程序时,若从键盘输入“3,4 main() { int a,b,s; scanf(“%d,%d”,&a,&b); s=a; if(s s=s*s; printf(“%d \n”,s); } A 、14 B 、16 C 、18 D 、20 2)双分支选择语句 if (表达式) 语句1 else 语句2 例: 输入两个数, 比较其大小, 将较大的数输出 流程分析: ? (1) 输入两个数据a,b ; ? (2) 如果a>b 则输出a ;否则,输出b 。 #include main( ) { float a, b; scanf(“%f, %f”,&a, &b); 语句 真(非0) 假(0) 表达式 if (a>b) printf (“%f”, a ); else printf (“%f”, b ); } 练习:下面程序的输出结果是[ ] main() { int x=2,y=-1,z=2; if(y<0) z=0 else z+=1; printf(“%d\n”,z); } 3)多分支选择语句 一般形式:if (表达式) 语句1 else if (表达式)语句2 else … 写一个程序完成下列功能: 1 输入一个分数score 2 score<60 输出E 3 60<=score <70 输出 D 4 75<=score <80 输出 C 5 80<=score <90 输出 B 5 90<=score 输出 A main( ) { int score; scanf(“%d”, &score); if ( score<60) printf(“%c” , ’E’); else if ( score <70) printf(“%c” , ’D’); else if (score <80) printf(“%c” , ’C’); else if (score <90) printf(“%c” , ’B’); else printf(“%c” , ’A’); } 说明:if语句中的表达式一般为关系或逻辑表达式,也可以为任何数值类型的表达式。执行语句可以是一条简单语句、空语句或复合语句,也可以嵌套其它流程控制语句。4)复杂条件选择 问题: 输入两个字符ch1和ch2, 如果ch1==‘Z’ 且ch2==‘B’, 则输出“You are right ! “ main() { char ch1,ch2; ch1=getchar( ); ch2=getchar( ); if ( ch1 == ‘Z’ && ch2==‘B’ ) printf( “You are right ! “ ); } 练习: 以下不正确的语句为[ ] A、if(x>y) ; B、if(x>y) { x++; y++; } C、if(x=y)&&(x!=0)x+=y; D、if(x!=y) scanf(“%d”,&x); else scanf(“%d”,&y); 运行下面程序时,若从键盘输入字母“b”,则输入结果是[ ] main( ) { char c; c=getchar(); if (c>=‘a’&&c<=‘u’) c=c+4; else if (c>=‘v’&&c<=‘z’) c=c-21; else printf(“input error!\n”); putchar(c); } A) g B)w C)f D) d 5)if语句的嵌套 一个if又包含一个或多个if语句,称为if语句的嵌套。在if语句中可以根据需要,用if语句的三种形式进行互相嵌套。一般形式如下: ①if()内嵌if if()〈语句1〉 else 〈语句2〉 else if()〈语句3〉 else 〈语句4〉 ②if() if()〈语句1〉 else if()〈语句2〉 else 〈语句3〉 说明:①if与else的配对关系,从最内层开始,else总是与离它最近的未曾配对的if配对。 ②if与else的个数最好相同,从内层到外层一一对应,以避免出错。 ③如果if与else的个数不相同,可以用花括号来确定配对关系。例如: if() {if()〈语句1〉} else 〈语句2〉 这时{}限定了内嵌if语句的范围,因此else与第一个if配对。 例4.3 对下面的函数编程,要求输入一个x值,输出对应的y值 -1 (x<0) y= 0 (x=0) 1 (x>0) 方法1: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); } 方法2:main() { int x,y; scanf(″%d″,&x); y=-1; if(x= =0)y=0; else if(x>0)y=1; printf(″x=%d,y=%d\n″,x,y); } 练习:运行下面程序,若从键盘输入“3”和“5”,则程序的输出结果是[ ] main() { int x,y; scanf(“%d,%d”,&x,&y); if(x==y) printf(“x==y”); else if(x>y) printf(“x>y”); else printf(“x } A)3<5 B)5>3 C)x>y D)x 执行下列程序的输出结果是[ ] main() { int a=258; if(a>=100) { if(a>=1000) printf(“%d is gr eater than 1000\n”,a); else printf(“%d is 100 to 999\n”,a); } else { if(a<10) printf(“%d is less than 10\n”,a); printf(“%d is 10 to 99\n”,a); } } A.a is less than 10 B.a is 10 to 99 C.a is greater than 1000 D.258 is 100 to 999 4、总结(5分钟) 讨论、思考题、作业: 实验指导书习题 参考资料(含参考书、文献等): 叶斌陈世强. C语言程序设计. 北京:科学出版社 授课类型:理论课?讨论课□实验课□练习课□其他□ 教学方式:传统授课?双语□讨论□示教□指导□其他□教学资源:多媒体?模型□实物□挂图□音像□其他□