《C语言程序设计》课程教案表授课题目第三章程序的控制结构(3)——选择结构if课时安排1授课时间教学目的和要求1.掌握:条件表达式、if语句2.熟悉:关系运算符和关系表达式、逻辑运算符和逻辑表达式教学内容1.基本内容:(1)关系运算符和关系表达式(2)逻辑运算符和逻辑表达式(3)条件语句2.重点:条件语句讲课进程和时间分配引子(15分钟)关系运算就是比较运算,即将两个数据进行比较,判定两个数据是否符合给定的关系。aba==ba!=b1、关系运算符和关系表达式(1)关系运算符及其优先次序1)关系运算符C语言中关系运算符为二目运算符,共有6种:小于关系运算符=小于等于大于=大于等于==等于)!=不等于关系操作数可以是数值类型数据和字符型数据。2)关系运算符的优先级①、=、和=为同一级,==和!=为同一级。且前4个高于后2个;结合方向均为自左至右。②关系运算符的优先级低于算术运算符,但高于赋值运算符。例如:a+bb+c等效于(a+b)(b+c)。(2+a)==(b-a)等效于2+a==b-a。(2)关系表达式1)关系表达式的概念是指用关系运算符将两个表达式连接起来进行关系运算的式子。例如:a+bb+c比较两个算术表达式的值a=2*b比较变量和算术表达式的值'a''b'比较两个字符的ASCII码值2)关系表达式的值—逻辑值(“真”或“假”)由于C语言没有逻辑型数据,所以,用整数“1”表示“逻辑真”,用整数“0”表示“逻辑假”。例如,假设a=3,b=4,c=5则:ab的值为0(假)。(ab)!=c的值为1(真)。(ab)+c的值为6,因为ab的值为1,1+5=6。注意:C语言用整数“1”表示“逻辑真”,用整数“0”表示“逻辑假”。所以,关系表达式的值,还可以参与其它种类的运算,例如算术运算、逻辑运算等。3)关系运算符的结合律C语言规定关系表达式采取左结合律。表达式中出现优先级别为同一级别的运算符时,则按从左到右结合方向处理。例如:inta=2,b=3,c=1;abc值:1先计算ab,值是0,再计算0c,值是1632值:1先计算63,值是1,再计算12,值为12、逻辑运算符和逻辑表达式(1)逻辑运算符C语言提供3种逻辑运算符:&&逻辑与(相当于“同时”)||逻辑或(相当于“或者”)!逻辑非(相当于“否定”)其中,&&和||为双目运算符,且结合方向为自左至右;!为单目运算符,仅对其右边的操作数进行逻辑求反运算。1)逻辑非!逻辑非是一元运算符。操作数值为0,逻辑非运算的结果为1(逻辑真);当操作数值为非0时,逻辑非运算的结果为0。例如:inta=5,b=3;!a结果:0!(ab)结果:1。因为ab的值为02)逻辑与&&逻辑与是二元运算,只有参加逻辑与运算的两个操作数值均为非0(逻辑真)时,结果才为真。例如:inta=5,b=3;a&&b值:1(ab)&&(a0)值:0,因为ab的值为0。3)逻辑或¦¦逻辑或也是二元运算,只要两个操作数中有一个为非0(逻辑真),结果就为1。例如:inta=5,b=3a¦¦b值:1(ab)¦¦(a0)值:1因为a0的值为1。(2)逻辑运算符优先级C语言逻辑运算符的优先级规定如下:1)优先级顺序为!→&&→¦¦2)与其他种类运算符的优先关系:高低例如:!a&&b5计算顺序:(!a)&&(b5)a==b¦¦ac计算顺序:a==(b¦¦(ac))(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=计算x0,如果结果为1:计算:y=3-x;否则,计算:y=2*x;需要根据x的值进行流程选择(分支)。赋值运算符&&和||关系运算符算术运算符!(非)3-x(x0)2x(x=0)首先先判断表达式的值若为非0则执行下面的语句若为0则跳过该语句1)单分支选择语句一般形式:if(表达式)语句例:main(){floatx,y;scanf(“%f”,&x);y=2*x;if(x0)printf(“y=%6.2f”,y);}如果x0为真,则打印y的值,否则跳过printf(“y=%6.2f”,y)直接执行下面的语句。练习:运行下面程序时,若从键盘输入“3,4CR”,则程序的输出结果是[]main(){inta,b,s;scanf(“%d,%d”,&a,&b);s=a;if(sb)s=b;s=s*s;printf(“%d\n”,s);}A、14B、16C、18D、202)双分支选择语句if(表达式)语句1else语句2例:输入两个数,比较其大小,将较大的数输出流程分析:•(1)输入两个数据a,b;•(2)如果ab则输出a;否则,输出b。#includestdio.hmain(){floata,b;scanf(“%f,%f”,&a,&b);表达式语句真(非0)假(0)语句表达式if(ab)printf(“%f”,a);elseprintf(“%f”,b);}练习:下面程序的输出结果是[]main(){intx=2,y=-1,z=2;if(y0)z=0elsez+=1;printf(“%d\n”,z);}3)多分支选择语句一般形式:if(表达式)语句1elseif(表达式)语句2else…写一个程序完成下列功能:1输入一个分数score2score60输出E360=score70输出D475=score80输出C580=score90输出B590=score输出Amain(){intscore;scanf(“%d”,&score);if(score60)printf(“%c”,’E’);elseif(score70)printf(“%c”,’D’);elseif(score80)printf(“%c”,’C’);elseif(score90)printf(“%c”,’B’);elseprintf(“%c”,’A’);}说明:if语句中的表达式一般为关系或逻辑表达式,也可以为任何数值类型的表达式。执行语句可以是一条简单语句、空语句或复合语句,也可以嵌套其它流程控制语句。4)复杂条件选择问题:输入两个字符ch1和ch2,如果ch1==‘Z’且ch2==‘B’,则输出“Youareright!“main(){charch1,ch2;ch1=getchar();ch2=getchar();if(ch1==‘Z’&&ch2==‘B’)printf(“Youareright!“);}练习:以下不正确的语句为[]A、if(xy);B、if(xy){x++;y++;}C、if(x=y)&&(x!=0)x+=y;D、if(x!=y)scanf(“%d”,&x);elsescanf(“%d”,&y);运行下面程序时,若从键盘输入字母“b”,则输入结果是[]main(){charc;c=getchar();if(c=‘a’&&c=‘u’)c=c+4;elseif(c=‘v’&&c=‘z’)c=c-21;elseprintf(“inputerror!\n”);putchar(c);}A)gB)wC)fD)d5)if语句的嵌套一个if又包含一个或多个if语句,称为if语句的嵌套。在if语句中可以根据需要,用if语句的三种形式进行互相嵌套。一般形式如下:①if()内嵌ifif()〈语句1〉else〈语句2〉elseif()〈语句3〉else〈语句4〉②if()if()〈语句1〉elseif()〈语句2〉else〈语句3〉说明:①if与else的配对关系,从最内层开始,else总是与离它最近的未曾配对的if配对。②if与else的个数最好相同,从内层到外层一一对应,以避免出错。③如果if与else的个数不相同,可以用花括号来确定配对关系。例如:if(){if()〈语句1〉}else〈语句2〉这时{}限定了内嵌if语句的范围,因此else与第一个if配对。例4.3对下面的函数编程,要求输入一个x值,输出对应的y值-1(x0)y=0(x=0)1(x0)方法1:main(){intx,y;scanf(″%d″,&x);if(x0)y=-1;elseif(x==0)y=0;elsey=1;printf(″x=%d,y=%d\n″,x,y);}方法2:main(){intx,y;scanf(″%d″,&x);y=-1;if(x==0)y=0;elseif(x0)y=1;printf(″x=%d,y=%d\n″,x,y);}练习:运行下面程序,若从键盘输入“3”和“5”,则程序的输出结果是[]main(){intx,y;scanf(“%d,%d”,&x,&y);if(x==y)printf(“x==y”);elseif(xy)printf(“xy”);elseprintf(“xy”);}A)35B)53C)xyD)xy执行下列程序的输出结果是[]main(){inta=258;if(a=100){if(a=1000)printf(“%disgreaterthan1000\n”,a);elseprintf(“%dis100to999\n”,a);}else{if(a10)printf(“%dislessthan10\n”,a);printf(“%dis10to99\n”,a);}}A.aislessthan10B.ais10to99C.aisgreaterthan1000D.258is100to9994、总结(5分钟)讨论、思考题、作业:实验指导书习题参考资料(含参考书、文献等):叶斌陈世强.C语言程序设计.北京:科学出版社授课类型:理论课讨论课□实验课□练习课□其他□教学方式:传统授课双语□讨论□示教□指导□其他□教学资源:多媒体模型□实物□挂图□音像□其他□