第4章选择结构程序设计2020年1月11日星期六1第4章选择结构程序设计教学目标:要求学生掌握关系运算符及关系表达式的使用;掌握逻辑运算符及逻辑表达式的使用;掌握条件语句和多分支选择语句switch编程应用。教学内容:4.1关系运算符与关系表达式4.2逻辑运算符与逻辑表达式4.3if语句4.4switch语句4.5程序设计举例第4章选择结构程序设计2020年1月11日星期六24.1关系运算符与关系表达式1.关系运算符●关系运算符都是双目运算符,结合性是自左至右。●关系运算符的优先级低于算术运算符。●关系运算符的优先级高于赋值运算符。第4章选择结构程序设计2020年1月11日星期六32.关系表达式用关系运算符将两个有意义的表达式(算术表达式、关系表达式、逻辑表达式或字符表达式)连接起来的式子称关系表达式。(x=8)(y=7)x+yy+z‘a’‘c’关系运算的结果是用来说明关系成立与否,关系成立表明真,关系不成立表明假。真用1表示;假用0表示。分析下列关系表达式的值545==33x5表达式的值为1表达式的值为0x=1时表达式的值为1x=4时表达式值还是1这样C语言关系表达式应如何表示?第4章选择结构程序设计2020年1月11日星期六44.2逻辑运算符与逻辑表达式1.逻辑运算符C语言的逻辑运算符有三种:与&&,或||,非!其中与和或是双目运算符,非是单目运算符。●逻辑运算符运算规则:&&运算:同真为真,其余为假。真用1表示,假用0表示||运算:同假为假,其余为真。真用1表示,假用0表示!运算:非真即假,非假即真。真用1表示,假用0表示●逻辑运算的真值表如下:第4章选择结构程序设计2020年1月11日星期六5●逻辑运算符的优先次序逻辑非!最高,逻辑&&次之,逻辑或||最低。如:!a||b&&c的运算过程是:①!a;②b&&c;③||●逻辑运算符同赋值运算符、算术运算符、关系运算符的优先次序!逻辑非算术运算关系运算&&逻辑与||逻辑或赋值运算高低第4章选择结构程序设计2020年1月11日星期六62.逻辑表达式由逻辑运算符将C语言中合法的表达式连接起来的式子。如:!(ab),(ab)&&(bc)。逻辑表达式的值是一个逻辑量“真”或“假”,C语言规定:真用1表示,假用0表示。●例题:求逻辑表示式的值若a=6;b=5;c=0则表达式d=a||b||(c=b+3)中的d和c的值分别是多少及表达式的值?d=1c=0表达式的值为1在多个||运算符相连的表达式中,其结合方向是自左至右,若左边操作数为真,则停止运算,因整个逻辑表达式的值为真。那多个&&运算符?第4章选择结构程序设计2020年1月11日星期六7●依据下列要求写出相应的表达式1.ch是英文字母。2.x为零。3.x不为零。4.x,y不同时为零。5.year是闰年即year能被4整除但不能被100整除或year能被400整除。6.c1是数字0~9(ch=‘a’&&ch=‘z’)||(ch=‘A’&&ch=‘Z’x==0x!=0x!=0||y!=0或x||y(year%4==0&&year%100!=0)||(year%400==0)c1=‘0’&&c1=‘9’用字符的ASCII码表示第4章选择结构程序设计2020年1月11日星期六84.3if语句问题:计算分段函数的值,根据输入x的值输出y的值。y=5x+4x=02x-3x0问题分析:●通过键盘输入一个x的值。●判断x的值是大于等于0或小于0。●输出对应的y的值。显然程序的输出结果有两种可能,而输出那一种则视用户输入x的值来定即说明程序有两种流向即分支结构。实现问题的求解可用流程图形式表示,其流程图如上图所示。第4章选择结构程序设计2020年1月11日星期六9●C语言if语句的3种形式:单分支选择if语句;双分支选择if语句和多分支选择if语句。C语言中if语句的形式●单分支if语句if(表达式)语句序列;●双分支if语句if(表达式)语句1;else语句2;●多分支if语句第4章选择结构程序设计2020年1月11日星期六10y=5x+4x=02x-3x0【例题4.1】编写分段函数的程序。#includestdio.hintmain(){floatx,y;printf(inputx:\n);scanf(%f,&x);if(x=0)y=5*x+4;elsey=2*x-3;printf(y=%f\n,y);return0;}第4章选择结构程序设计2020年1月11日星期六11【例题4.2】分别用if语句和if-else语句实现输入任意的两个数a和b输出其的最大数。①数据组织形式即数据结构两个任意的数说明既可以是整数也可以是实数。但实数范围大。因此用float来声明两数的类型,用scanf()函数实现输入。②算法实现输出较大的数可采用两数比较即用关系表达式ab作判断的条件。表达式的值为真即1就输出a;表达式的值为假即0就输出b。●程序分析:●代码设计第4章选择结构程序设计2020年1月11日星期六12用if语句实现的代码设计#includestdio.hintmain(){inta,b,max;printf(\ninputtwonumbers:);scanf(%d%d,&a,&b);max=a;if(maxb)max=b;printf(max=%d,max);return0;}用if-else语句实现的代码设计#includestdio.hintmain(){inta,b;printf(inputtwonumbers:);scanf(%d%d,&a,&b);if(ab)printf(max=%d\n,a);elseprintf(max=%d\n,b);return0;}第4章选择结构程序设计2020年1月11日星期六13【例题4.3】根据用户输入的x值输出对应的y的值。y=x+1x1x+21=x2x+32=x3x+4x=3①通过键盘输入一个实型数据x。②判断的条件是x的取值,即由图知x的取值有四种情况,说明判断的表达式至少有三个分别是x1,x2,x3而不满足这三种的情况是x=3④选择多分支if语句形式来实现。⑤还可用if的嵌套形式来实现。嵌套有两种:一种是内嵌套;另一种是外嵌套。选用哪一种是编程者的爱好及风格。程序分析:第4章选择结构程序设计2020年1月11日星期六14#includestdio.hintmain(){floatx,y;printf(inputx:\n);scanf(%f,&x);if(x1)y=x+1;elseif(x2)y=x+2;elseif(x3)y=x+3;elsey=x+4;printf(当输入的x是%f则输入的y=%f\n,x,y);return0;}代码设计:第4章选择结构程序设计2020年1月11日星期六15●if语句的嵌套if语句嵌套形式内嵌if格式外嵌if格式if(exp1)if(exp2)statement_1elsestatement_2elseif(exp3)statement_3elsestatement_4if(exp1)statement_1elseif(exp2)statement_2elseif(exp3)statement_3elsestatement_4注意:if-else的配对。else总是与它前面最近的if配对。第4章选择结构程序设计2020年1月11日星期六164.4switch语句问题:从键盘输入一名学生成绩(0~100之间),输出该学生成绩对应的等级。其中A代表90分以上,B代表80~89,C代表70~79,D代表60~69,E代表60分以下,如果成绩不在0~100之间则输出错误信息。问题分析:从键盘输入一名学生成绩score。首先用if语句判断成绩是否在0~100之间,若不在则输出提示错误信息;若在则对其进行等级的判断。其等级判断可采用多分支if语句来实现,其次序可以从高到低也可低到高,这由用户自行选择,但有一点判断的层次较多,能否通过结构更清晰的方式来实现呢?这可用C提供的另一多分支结构switch语句。第4章选择结构程序设计2020年1月11日星期六17代码设计(if语句实现)#includestdio.hintmain(){floatscore;printf(\npleaseinputascore:);scanf(%f,&score);if(score=0&&score=100){if(score=90)printf(\n%.2fclaseisA!,score);elseif(score=80)printf(\n%.2fclaseisB!,score);elseif(score=70)printf(\n%.2fclaseisC!,score);elseif(score=60)printf(\n%.2fclaseisD!,score);elseprintf(\n%.2fclaseisE!,score);}elseprintf(\nThescoreiswrong!);return0;}第4章选择结构程序设计2020年1月11日星期六18代码设计(switch语句实现)#includestdio.hintmain(){floatscore;printf(\npleaseinputascore:);scanf(%f,&score);if(score=0&&score=100){}elseprintf(\nThescoreiswrong!);return0;}判断成绩等级用switch语句实现switch((int)score/10){case10:case9:printf(\n%.2fcalseisA!\n,score);break;case8:printf(\n%.2fcalseisB!\n,score);break;case7:printf(\n%.2fcalseisC!\n,score);break;case6:printf(\n%.2fcalseisD!\n,score);break;default:printf(\n%.2fcalseisE!\n,score);}表达式常量表达式满足常量表达式的语句不满足常量表达式的语句第4章选择结构程序设计2020年1月11日星期六19●switch语句的形式switch(表达式){case常量表达式1:语句1;case常量表达式2:语句2;case常量表达式3:语句3;case常量表达式n:语句n;...default:语句n+1;}●switch语句的功能计算表达式的值,并与常量表达式值逐个相比较,若相等则执行其后语句,且不再比较并执行该语句后所有语句;若不相等,则执行default后的语句。break;break;break;break;功能:跳出switch语句第4章选择结构程序设计2020年1月11日星期六204.5程序设计举例【例题4.8】通过键盘输入任意的三个整数,要求输出其中最大数和最小数。算法分析:假设输入的三个数分别是:a、b、c。首先将a和b进行比较并大的数装入max中,小数装入min中;然后再将c分别与max比较,若大则替换max;与min比较,若小则替换min最后输出max和min就是三数中最大数和最小数。代码设计#includestdio.hintmain(){inta,b,c,max,min;printf(\ninputthreenumber:);scanf(%d%d%d,&a,&b,&c);if(ab){max=a;min=b;}else{max=b;min=a;}if(minc)min=c;if(maxc)max=c;printf(max=%d;min=%d\n,max,min);return0;}第4章选择结构程序设计2020年1月11日星期六21【例题4.9】从键盘输入一个数学四则运算表达式(a+b,a-b,a*b,a/b),要求计算出该表达式的值。程序分析:应该设计两个整型变