资源描述
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,11/7/2009,#,项目四选择结构程序设计,任务8A比a大吗?关系表达式,任务9闰年的表示逻辑表达式,任务10儿童票售票提示if选择语句,任务11打印成绩等级switch多分支语句,任务8A比a大吗?关系表达式,任务描述:,编写程序,比较C语言中字母A和字母a的大小。,任务分析:,在本任务中,要比较两个值的大小需要用到关系运算符。在C语言中,,所谓关系运算就是进行比较的运算:将两个值进行比较,判断其是否符合,给定的条件。若符合,则为真(结果为1),否则为假(结果为0)。,任务8A比a大吗?关系表达式,4.1关系运算符及其优先级,表4-1C语言中的关系运算符,运算符,含义,优先级,结合方向,自左至右,自左至右,自左至右,自左至右,自左至右,自左至右,大于,6,6,6,6,7,7,=,大于或等于,小于,=”、“=”、“=”、和“!=”与数学中对应的运,算符写法不同,要注意区分。,(2)关系运算符被分为两种优先级,前四种高于后两种。关系运,算符的优先级低于算术运算符,高于赋值运算符。,(3)当相同优先级的关系运算符同时出现时,从左至右进行运算。,任务8A比a大吗?关系表达式,4.2关系表达式,用关系运算符将两个表达式连接起来的式子称为关系表达式。关系表达,式的值是一个逻辑值,即“真”和“假”。C语言没有逻辑型数据,以,“1”代表“真”,以“0”代表“假”。,若有定义语句:a=1,b=2,c=3;则:,ab为真,值为1。,d=cbad的值为0。,任务8A比a大吗?关系表达式,任务实施:,#include,main(),inta,b,c;,a=Aa;,b=A=a;,c=Aa;,printf(%d,%d,%d,a,b,c);,任务8A比a大吗?关系表达式,任务总结:,关系表达式可以像本任务中这样赋值给一个变量,也可以作为条件判断单独使用。,在使用关系运算符时要注意其与数学中运算符写法的不同。,任务拓展:,将“知识准备”中的例子在软件中进行验证,更好地理解掌握关系表达式,的使用。,任务9闰年的表示逻辑表达式,任务描述:,闰年分为普通闰年和世纪闰年:,(1)普通闰年:年份是4的倍数,且不是100的倍数。,(2)世纪闰年:年份是400的倍数。,请用C语言逻辑表达式来表示闰年。,任务分析:,在本任务中,需要用到逻辑表达式。要将文字描述转化成C语言的逻辑,表达式,需要先来认识逻辑运算符。,任务9闰年的表示逻辑表达式,4.3逻辑运算符及其优先级,表4-2C语言中的逻辑运算符,运算符,含义,优先级,结合方向,&,逻辑与,逻辑或,逻辑非,11,12,自左至右,自左至右,自右至左,|,!,2,任务8A比a大吗?关系表达式,4.3逻辑运算符及其优先级,(1)“&”和“|”,(2)三种逻辑运算符优先级都不相同,“!”,“|”,(3)当相同优先级的逻辑运算符同时出现时,“&”和“|”,从左至右进行运算,而“!”是从右至左进行运算。,为双目运算符,“!”,为单目运算符。,最高,“&”高于,。逻辑运算符的优先级高于赋值运算符。,是,任务9闰年的表示逻辑表达式,4.4逻辑表达式,用逻辑运算符连接若干个表达式组成的式子称为逻辑表达式。与关系表,达式一样,逻辑表达式的值也是一个逻辑值,即“真”和“假”,以“1”,代表“真”,以“0”代表“假”。但在判断一个量是否为“真”时,以,“0”代表“假”,以非0代表“真”。,1.求值规则,a&b若a、b同时为真,则a&b为真,值为1。,a|b若a、b之一为真,则a|b为真,值为1。,!a若a为真,则!a为假,值为0。,任务9闰年的表示逻辑表达式,4.4逻辑表达式,2.求值策略,按照求值规则,逻辑与和逻辑或表达式应该从左至右依次计算各表达式,的值,但实际上并不一定从左至右运算到底,当表达式的值能够确定的,时候运算就应该停止。,(1)a&b&c若a为假,则整个表达式为假,就不必判断b和c的值;,若a为真,b为假,则整个表达式也为假,就不必判断c的值。,(2)a|b|c若a为真,则整个表达式为真,就不必判断b和c的值;若a为,假,b为真,则整个表达式也为真,就不必判断c的值。,任务9闰年的表示逻辑表达式,任务实施:,#include,main(),intyear;,printf(输入一个年份:);,scanf(%d,if(year%4=0)&(year%100!=0)|(year%400=0)/*if语句判断是否满足条件*/,printf(%d年是闰年,year);,elseprintf(%d年是平年,year);/*如对非闰年不做要求,可省略此句*/,任务9闰年的表示逻辑表达式,任务总结:,能够将实际问题的文字描述转换成正确的逻辑表达式是本任务的重点,在逻辑运算中,需要综合运用运算符的优先级、结合性、求值规则以及求值策略。,任务拓展:,1.用逻辑表达式表示1b),t=a;a=b;b=t;,printf(%d,a);,任务10儿童票售票提示if选择语句,4.5if语句的三种形式,2.ifelse语句,语句格式:,if(表达式),语句1;,else,语句2;,执行过程如图所示:先判断表达式,如果表达式为真,则执行语句,1,否则执行语句2。,任务10儿童票售票提示if选择语句,4.5if语句的三种形式,3.if语句的嵌套,(1)当实际运用中面临两种以上的选择时,把ifelse语句稍加扩,展就能满足需求。其一般形式为:,if(表达式1)语句1;,elseif(表达式2)语句2;,elseif(表达式3)语句3;,elseif(表达式m)语句m;,else语句n;,任务10儿童票售票提示if选择语句,4.5if语句的三种形式,(2)一条if语句中可以包含另一条if语句,称为if语句的嵌套。在嵌套的if语,句中,else与它前面最近的if配对,除非用花括号来改变。,格式1:,if(表达式),if(表达式)语句1;,else语句2;,格式2:,if(表达式),if(表达式)语句1;,else语句2;,逻辑运算符的优先级高于赋值运算符。,(2)a|b|c若a为真,则整个表达式为真,就不必判断b和c的值;,任务11打印成绩等级switch多分支语句,语句序列1;break;,7switch多分支语句,任务9闰年的表示逻辑表达式,后,跳出switch结构,执行switch结构后的语句。,switch(表达式),scanf(%d,的值,但实际上并不一定从左至右运算到底,当表达式的值能够确定的,任务9闰年的表示逻辑表达式,elseprintf(%d年是平年,year);/*如对非闰年不做要求,可省略此句*/,3逻辑运算符及其优先级,任务10儿童票售票提示if选择语句,任务10儿童票售票提示if选择语句,任务10儿童票售票提示if选择语句,4.5if语句的三种形式,配对关系不同,程序运行结果就不同,试比较以下两个程序段的输出结果。,程序段1:,if(score=60),if(score=60),if(scorey?x:y;,先计算xy是否为真,如果为真,则把x的值赋给max,否则将y的值赋给max。,(2)条件运算符的结合性为右结合性,即自右向左进行计算。,max=xy?x:yz?y:z;等价于max=xy?x:(yz?y:z);,任务10儿童票售票提示if选择语句,任务实施:,#include,main(),floath;,printf(请输入儿童身高(米):);,scanf(%f,if(h1.2),printf(免票!);,elseif(h=1.5),printf(请购买半价票!);,elseprintf(请购买全价票!);,任务10儿童票售票提示if选择语句,任务总结:,多个if结构并列,有执行多个分支的可能性,基本的ifelse结构以及扩展的ifelse结构只能根据条件执行其中的一个分支,使用ifelse的嵌套结构要仔细确定好if与else的配对。,任务拓展:,1.从键盘输入3个数,判断能否构成三角形,如果能,则输出该三角形的,形状信息(等边、等腰、任意三种情况),否则输出提示。,2.从键盘上输入3个数,按照从大到小的顺序输出。,3.从键盘输入一个字母,判断它是否为大写英文字母,若是,转换成对应,的小写字母,否则原样输出(用条件表达式实现)。,任务11打印成绩等级switch多分支语句,任务描述:,编写程序,当输入学生的考试成绩(百分制)后,输出学生的成绩,等级:90分及以上为优,80-89分为良,70-79分为中,60-69分为及格,,60分以下为不及格。,任务分析:,在本任务中,程序面临多重选择,使用if嵌套语句可以实现多重选择,,但是嵌套层次过多,这时使用switch多分支语句更为方便。,任务11打印成绩等级switch多分支语句,4.7switch多分支语句,switch(表达式),case常量表达式1:,语句序列1;break;,case常量表达式2:,语句序列2;break;,case常量表达式n:,语句序列n;break;,default:语句序列n+1;,任务11打印成绩等级switch多分支语句,4.7switch多分支语句,switch语句的工作过程是:,先计算switch括号中表达式的值,如果它与某一case后的常量表达,式的值相等,则执行这个case常量后的语句序列,遇到break语句,后,跳出switch结构,执行switch结构后的语句。若表达式的值与,所有case后的常量都不相等,则执行default(如果有)后的语句,序列。,任务11打印成绩等级switch多分支语句,任务实施:,#include,main(),floatscore;,intx;,printf(请输入成绩:);,scanf(%f,x=score/10;,switch(x),case10:,case9:printf(优n);break;,case8:printf(良n);break;,case7:printf(中n);break;,case6:printf(及格n);break;,default:printf(不及格n);,任务11打印成绩等级switch多分支语句,任务总结:,本任务使用switch语句实现了五重分支结构,break语句作用非常关键,,使程序能及时跳出switch结构。,任务拓展:,编写一个程序,能够对两个操作数进行基本的四则运算,例如从键盘上输,入“3+5”时,输出“15”,当除数为0时,输出提示“除数不能为零!”。,项目总结,(1)关系表达式和逻辑表达式均可用于判断,前者适合单个条件的简,单判断,后者可将多个简单判断联合构成复杂的判断。这两种表达式的,值均为“真”或“假”,在C语言中使用数值1和0来表示的。,(2)使用关系表达式和逻辑表达式时要注意与数学上表达方式的不同,,多个运算符同时使用时要注意优先级和结合性。,(3)多个if结构并列,有执行多个分支的可能性,基本的ifelse结构,以及扩展的ifelse结构只能根据条件执行其中的一个分支,要根据需要,灵活选用。ifelse的嵌套结构要仔细确定好if与else的配对。,(4)当程序面临多重选择时,选用switch多分支语句更为方便。,
展开阅读全文