第3章选择结构流程及应用主要内容单分支和双分支结构程序设计多双分支结构程序设计单分支和双分支结构程序设计主要内容1、选择结构判定条件的构成2、简单if语句3、if-else语句4、条件运算符和条件表达式本单元课程目标应知1、掌握关系表达式和逻辑表达式的使用。2、掌握简单if语句和if-else语句的语法。应会1、根据问题分析画出单分支和双分支选择性问题的流程图2、能够根据流程图编写C语言程序难点:选择结构流程条件语句的C语言语法选择结构判定条件的构成在C语言中,一般用关系表达式和逻辑表达式构成判定条件。表达闰年的条件按照历法的规定,某一年要成为闰年,则应符合以下两个条件之一:(1)能被4整除,但不能被100整除;(2)能被400整除。设year表示年份,用C语言的逻辑表达式来表达润年的逻辑表达式即为:((year%4==O)&&(year%100!=O))||(year%400==O)单分支(简单if)语句If(条件){做某件事}条件表达式复合语句假真如果条件满足做某件事试一试问题3.4从键盘输入一个数,输出其绝对值。1.定义变量二个int变量iX,iY,其中iX用来接收用户从键盘输入的数据,iY用来存放iX的绝对值。2.从键盘输入一个整数放iX;3.把iX放iY;4.正数的绝对值是正数本身,负数的绝对值是其相反数。所以,如果iX0,则iY=-iX,否则不需要做什么;5.输出iX和iY。流程图程序代码#includestdio.hvoidmain(){intiX,iY;printf(pleaseinputainteger:);scanf(%d,&iX);iY=iX;if(iX0)iY=-iX;printf(\n|%d|=%d,iX,iY);getch();}运行结果为:pleaseinputainteger:-12↙(回车)|-12|=12练一练小明去参加一个同学的生日聚会,同学的家长规定18岁以上的才可以饮酒,所以需要编一程序根据输入的年龄打印一张饮酒卷,使的能饮酒的同学可以获取饮酒卷。双分支(if-else)选择语句if(条件表达式)语句1;else语句2;条件表达式复合语句1假真复合语句2试一试问题3.5编一程序控制电灯开关。从键盘输入1表示开灯,这时显示“thelightisOn”,输入0或其它数表示关灯,显示“thelightisoff”。解题步骤:1.定义整型变量iOnOff;2.从键盘接收用户输入存入变量iOnOff;3.根据iOnOff是否为1输出电灯的开关状态。若iOnOff=1,则输出”thelightisOn”,否则电灯为关灯状态,输出”thelightisoff”。流程图程序代码#includestdio.hvoidmain(){intiOnOff;printf(pleaseinput1orainteger:);scanf(%d,&iOnOff);if(iOnOff==1)printf(\nthelightison.);elseprintf(\nthelightisoff.);getch();}运行结果为:pleaseinput1orainteger:1↙(回车)thelightison.练一练问题:编一程序,从键盘输入一个整数,判断它的奇偶性。如果输入的是奇数,输出“ODD”,如果输入的是偶数,则输出“EVEN”。条件运算符与条件表达式?:可以实现双分支选择结构。表达式1?表达式2:表达式3运算规则为:如果“表达式1”的值为真,则条件表达式的运算结果等于“表达式2”的值,否则,运算结果等于“表达式3”的值。试一试问题3.6编一程序从键盘输入两个整数,输出较大的一个。解题步骤:1.定义整型变量iX,iY用来存放两个整数;2.定义变量iMax,存放两个数中较大的一个;3.从键盘接收用户输入;4.比较iX和iY,大者放iMax中;5.输出iMax。流程图程序代码#include“stdio.h”voidmain(){intiX,iY,iMax;printf(pleaseinpit2integers:);scanf(%d,%d,&iX,&iY);iMax=iXiY?iX:iY;printf(iMax=%d,iMax);getch();}课堂实践1.用if-else语句实现问题3-6的双分支选择结构。2.用条件表达式实现问题3-5的双分支选择结构。小结1.if和else同属于一个if语句,else不能作为语句单独使用,它只是if语句的一部分,与if配对使用。因此程序中不可以没有if而只有else。2.if-else语句在执行时,只能执行与if有关的语句或者执行与else有关的语句,而不可能同时执行两者。3.if语句的表达式可以是任意类型的C语言的合法的表达式,除常见的关系表达式或逻辑表达式外,也允许是其它类型的数据,如整型、实型、字符型等。4.在if和else的后面,可以是单条语句,也可以复合语句。单条语句时,注意别忘记写分号“;”,复合语句时要注意“{}”的后面不能加“;”。5.条件运算符的其结合性为“从右到左”(即右结合性)。比如表达式iAiB?iA:iCiD?iC:iD相当于iAiB?iA:(iCiD?iC:iD),如果iA=1,iB=2,iC=3,iD=4,则上述条件表达式的值等于4。作业编一程序,从键盘输入三角形的三条边长,判断是否构成三角形,如能则求出三角形的周长和面积并输出,如不能,输出不能构成三角形的信息。要求1)写出解题步骤2)画出流程图3)编写程序调试运行提示:构成三角形的条件为:三角形任意两边的和大于第三边时,构成三角形。面积计算公式为:fArea=其中,f1,f2,f3是三角形的三条边长,fTemp,fTemp=(f1+f2+f3)/2。计算一个数的平方根可用函数floatsqrt(floatf),该函数是数学库函数,需要在程序的开头加上#includemath.h。多分支结构程序设计主要内容1、嵌套if-else语句2、switch语句本单元课程目标应知掌握嵌套if-else语句和switch语句的语法。应会1、根据问题分析画出多分支选择性问题的流程图2、能够根据流程图编写C语言程序难点:多分支语句的C语言语法上节课内容回顾单分支判断语句(简单if语句)双分支选择语句(if-else语句)条件运算符1请列举生活中具有这三种特点的问题。2写出它们的c语句嵌套if-else语句所谓嵌套就是在if-else语句的if或else子句中又包含了一个或多个if-else语句,其目的就是解决多分支选择问题。其一般形式如下:if(条件1)语句1;elseif(条件2)语句2;elseif(条件3)语句3;┇elseif(条件n-1)语句n-1;else语句n;可以是简单语句或复合语句嵌套if-else语句流程图试一试问题3.7从键盘输入一个自变量x,求分段函数y=f(x)的值,f(x)的表达式如下:【解题步骤】1.定义整型变量iX,iY;2.从键盘输入数据放iX;3.根据iX的值,选择相应的函数表达式计算iY;4.输出iY。)0(302)50(0)5(3xxxxxy流程图程序代码#includestdio.hvoidmain(){intiX,iY;printf(pleaseinputainteger:);scanf(%d,&iX);if(iX5)iY=iX+3;elseif(iX0)iY=2*iX+30;elseiY=0;printf(f(%d)=%d,iX,iY);getch();}运行结果:pleaseinputainteger:2↙(回车)f(2)=0再试一试问题3.8编一程序将成绩的百分制转换为等级制。百分制与等级制的对应关系如下:90-100对应A、80-89对应B、70-79对应C、60-69对应D、0-59对应E。【解题步骤】1.定义float变量fScore用来存放成绩值;2.从键盘输入一个成绩值放变量fScore;3.根据fScore的值输出相应的等级。流程图fScore=90&&fScore=100YN开始定义fScore结束输入数据存入fScoreNNYYYYNInvalidinputfScore=80&&fScore=89BNfScore=70&&fScore=79fScore=60&&fScore=69CEAfScore=0&&fScore=59D程序代码#includeStdio.hvoidmain(){floatfScore;printf(pleaseinputyourscore:);scanf(%f,&fScore);if(fScore=90&&fScore=100)printf(yourgradeisA.);elseif(fScore=80&&fScore=89)printf(yourgradeisB.);elseif(fScore=70&&fScore=79)printf(yourgradeisC.);elseif(fScore=60&&fScore=69)printf(yourgradeisD.);elseif(fScore=0&&fScore=59)printf(yourgradeisE.);elseprintf(invalidinput!!);getch();}课堂实践问题:将星期一、星期二…星期六、星期日依次编号为1、2…6、7,编一程序从键盘输入星期的序号,可输出其对应的英文。比如,输入6,可输出”Saturday”。星期一Monday星期二Tuseday星期三Wenday星期四Thuseday星期五Friday星期六Saturday星期日Sundayswitch语句switch语句是C语言中又一种实现多分支选择结构的语句,其一般形式是:switch(表达式){case常量表达式1:语句序列1case常量表达式2:语句序列2……case常量表达式n:语句序列ndefault:语句序列n+1}switch语句流程图其它常量表达式1语句序列1表达式常量表达式2常量表达式n语句序列2语句序列n语句序列n+1...试一试问题3.9编一程序可查询驾驶证可以驾驶的车辆类型。要求从键盘输入驾照的类型。比如输入驾照类型‘C’,输出“你可以驾驶小轿车”。其中,A牌驾照可驾驶大客车、人货车和小轿车,B牌驾照可驾驶人货车和小轿车,C牌驾照可驾驶小轿车,D牌驾照可驾驶摩托车。【解题步骤】1.定义字符变量chLicence用来存放驾照类型代码;2.从键盘输入一个字符放chLicence;3.根据chLisence中的值,输出相应的准驾车型。流程图开始定义chLicence结束输入驾照代码存入chLicence‘D’‘A’chLicence‘B’‘C’youcandrivebus,car,truck.youcandrivecar,truck.youcandrivecar.youcandriveautobikeonly.其它inputerror!!程序代码#includeStdio.hvoidmain(){charchLicence;printf(pleaseinputyourdrivinglicence:);scanf(%c,&chLicence);switch(chLicence){case'A':printf(youcandrivebus,car,truck..);break;case'B':printf(youcandrivetruck,car);break;case'C':printf(youcandrivecar.);break;case'D':printf(youcandriveautobikeonly.);br