资源描述
,*,单击此处编辑母版标题样式,C语言,技能教程,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,(中职)c语言技能教程第4章ppt课件,第4章 让程序作自己的选择,选择结构,语言技能教程,第 四 章,4.1 技能1:运用条件运算符设计简单的程序,4.2 技能2:关系表达式与逻辑表达式的运用,4.3 技能3:用if 语句编制选择结构的程序,4.4技能4:用switch 语句设计多选一的程序,4.1 技能1,【知识点】,1.条件运算符(?:),是c语言唯一的需要三个操作数的运算符,它可以组成一个条件表达式,其一般形式为:,表达式1?表达式2:表达式3,2.条件运算符的执行顺序。首先判断表达式1值,如果数值不是0,则计算表达式2的值,,并将此作为条件表达式的值;如果数值是0,则计算表达式3的值,并将此作为条件表达,式的值。,3.条件运算符的优先级优先于赋值运算符,低于关系运算符。结合性为右结合。,例4.2 求三个数中最大值的程序。,main(),float x,y,z,max;,scanf(%f%f%f,max=xy?x:y;,max=zmax?z:max;,printf(max=%.2f n,max);,4.1 技能1,【典型例题】,4.2 技能2,1.关系运算符用于比较表达式,提出类似“a大于10吗?”或“x等于y吗?”这样的问题。关系表达式的一般形式:,表达式 关系运算符 表达式,2.关系表达式的值,根据所描述的关系成立与否取值为1或0。而不是象有些语言的真与假。即关系成立,值为1;不成立,值为0。见表4-1。,3.优先级与结合性,运算顺序由高到低为:算术运算符,关系运算符,=,关系运算符=和!=,关系运算符的结合性:从左至右。,【知识点】,4.2.1 关系表达式,运算符,符号,实例,读作,求值,大于,53,5大于3吗?,1,大于或等于,=,3=3,3大于等于3吗?,1,小于,a,b,a,小于,b,吗?,1,小于或等于,=,5=90)+(s2=90)+(s3=90)+(s4=90)+(s5=90);,c80=(s1=80)+(s2=80)+(s3=80)+(s4=80)+(s5=80);,printf(90分或90以上的课程数是:%dn,c90);,printf(80-90分课程数是:%dn,c80-c90);/*相减后为80-90之间的课程数*/,4.2 技能2,4.2.2 逻辑表达式,【,知识点,】,1,.,语言有三种逻辑运算符。见表4-2。用逻辑运算符将关系表达式或逻辑量连接起来的式子称为逻辑表达式。,2.,一般意义,逻辑表达式成立其值为“真”,不成立其值为“假”。在C语言中用数值1代表“真”,用数值0代表“假”。,3.逻辑运算的运算含义见真值表4-33.逻辑运算的优先级顺序:,!(非),&,(与),|,(或),!(非)运算为单目运算符,结合性为右结合。&(与)、|(或)为双目运算符,结合性是左结合。,。,4.2 技能2,4.2.2 逻辑表达式,【,知识点,】,。,运算符,功能,表达式,&,逻辑与,a&b,|,逻辑或,a|b,!,逻辑非,!a,表4-2 逻辑运算符,4.2 技能2,4.2.2 逻辑表达式,【,知识点,】,表4-3,C逻辑运算的真值表,a,b,a&b,a|b,!a,!b,非0,非0,1,1,0,0,非0,0,0,1,0,1,0,非0,0,1,1,0,0,0,0,0,1,1,4.2 技能2,4.2.2 逻辑表达式,【,知识点,】,4.C语言逻辑运算总结:(a,b 代表一个关系表达式或逻辑量),&运算,:当 a,b 都为非0时,a&b的值为1,其它情况均为0。,|运算,:当a,b都为0时,a|b的值为0,其它情况均为1。,!运算,:a为非0,!a的值为0;a为0,!a的值为1。,4.2 技能2,4.2.2 逻辑表达式,【典型例题】,例4.5 用一个表达式判断字符型变量ch是否是一个大写英文字母。,分析:A=ch=A和ch=A&ch=Z,思考,:用一个表达式判断字符型变量ch是否是一个英文字母,4.2 技能2,4.2.2 逻辑表达式,【典型例题】,例4.6 若有变量 int a=3,b=2,c=1,则表达式a-bc|b=c的值是(),4.2 技能2,4.2.2 逻辑表达式,【典型例题】,例4.6 分析:,表达式中共有四个运算符,优先级由高到低的顺序是:-(3级),(6级),=(7级),|(11级),因此求解过程为:计算a-b,计算a-by)printf(%d,x,);,printf(,ok);,表达式,语句,真,假,图 4-1(,1,),4.3 技能3,4.3.1 if语句的三种形式,【,知识点,】,3第二种形式:,if(表达式)语句1,else 语句2,实例:if(xy),printf(%d,x);,else,printf(%d,y);,printf(ok);,语句1,语句2,假,真,表达式,图 4-1,(2,),4.3 技能3,4.3.1 if语句的三种形式,【,知识点,】,4第三种形式:,if(表达式1)语句1,else if(表达式2)语句2,else if(表达式3)语句3,else if(表达式n)语句n,else 语句n+1,实例:根据成绩写出评语。,i,f(x=90)printf(,优秀,);,else if(x=80)printf(,良好,);,else if(x=60)printf(,通过,);,else printf(,努力,);,4.3 技能3,4.3.1 if语句的三种形式,【,知识点,】,5分号是C语句的必要成份,谈到语句就一定包含了一个分号在末尾。因此上述if 语句中的第二、第三种形式中,在每个else 前面有一个分号。这三种形式每一个都是一条c语句,因此整个语句结束处有一个分号。这三种形式中的“语句”又都可以是复合语句。,6.其中()内的表达式一般为逻辑表达式和关系表达式。但可以是任意类型。如:,if(A)printf(%c,A);A的值非0,printf()函数得到执行。,4.3 技能3,4.3.1 if语句的三种形式,【典型例题】,例4.7 输入一个数x,要求不使用abs()函数,输出其绝对值,main(),float x;,printf(请输入一个数);,scanf(%f,if (x0)printf(%f,-x);,else printf(%f,x);,4.3 技能3,4.3.1 if语句的三种形式,【典型例题】,例4.8 输入两个整数,将大数存在x中,小数存在y中。,20,10,20,x,y,temp,temp的值,存入y,20,10,10,x,y,temp,y的值,存入x,10,10,20,x,y,temp,10,20,x,y,temp,x,的值,存入temp,图4-2交换两个变量,4.3 技能3,4.3.1 if语句的三种形式,【典型例题】,例4.8 输入两个整数,将大数存在x中,小数存在y中。,main(),int x,y,temp;,printf(n请输入两个数:);,scanf(%d%d,if(xy),temp=x;,x=y;,y=temp;,/*x=y成立,要执行三条语句,所以放在复合语句中*/,printf(x=%d,y=%d,x,y);,4.3 技能3,4.3.1 if语句的三种形式,【典型例题】,例4.9 输入三个数,输出其中最大的数。,main(),float x,y,z,max;,printf(请输入三个数:);,scanf(%f%f%f,if(xy)max=y;,else max=x;,if(maxz)max=z;,printf(最大数是%.2f,max);,4.3 技能3,4.3.1 if语句的三种形式,【典型例题】,例4.10 某超市给与顾客的折扣率如下:,购物金额购物金额=200元 9折,1000元购物金额=500元 8折,购物金额=1000元 7折,输入购物金额,输出打折率和购物实际付款金额,。,重点理解:500元购物金额=200元,9折时,在语句表达上,用if(x=200)t=0.9;,4.3 技能3,4.3.1 if语句的三种形式,【典型例题】,例4.10 程序如下:,main(),float s,t;,printf(请输入购物金额:);,scanf(%f,f(s200)t=1.0;,else if(s500)t=0.9;,else if(sy),if(zx),max=z;,else,if(yx),max=y;,printf(max=%d,max);,4.3 技能3,4.3.2 if语句的嵌套,【点拨】,1if语句中的“表达式”必须用“(”和“)”括起来。,2else子句是if语句的一部分,必须与if配对使用,不能单独使用。,3在三种形式的if语句中,if关键字之后均为表达式。该表达式通常是逻辑表达式或关系表达式,但也可以是其它表达式。只要表达式的值为非0,即为“真”。其后的语句总是要执行的。,4if 语句的第一、第二种形式实现的是两者选一的情形,若有三种以上情况则需要用第三种形式的if语句。,4.4 技能,4,【知识点】,1.语句格式:,switch(表达式),case常量表达式1:语句组1,case常量表达式2:语句组2,case常量表达式n:语句组n,default:语句组n+1,4.4 技能,4,【知识点】,2.执行过程:计算表达式的值。,并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。,4.4 技能,4,【知识点】,3.switch后圆括号内“表达式”的类型,可以是任意的能求得一个整数值,如int 类型或char类型值的表达式。,4.每一个case的常量表达式的值必须互不相同。,5.各个case 和default的顺序可以任意,不影响执行结果。,6.多个case 可以共用一组语句。,如:case A:,case B:,case C:printf(成绩合格);break;/*也可以将这三行写在一行上*/,4.4 技能,4,【,典型例题,】,例4.12 设计,一个简单,的计算器,,能进行,加减乘,除运算。,main(),float x,y,result;,char oper;,printf(请输入两个数和一个运算符号);,scanf(%f%c%f,switch(oper),case+:result=x+y;break;,case-:result=x-y;break;,case*:result=x*y;break;,case/:result=x/y;break;,printf(%.2f%c%.2f=%.2f,x,oper,y,result);,4.4 技能,4,【点拨】,1在case后,如果有一个以上执行语句,可以不用括起来。当然加上也可以。,2各case和default子句的先后顺序可以变动,而不会影响程序执行结果。,3default子句可以省略不用。,4.switch 语句几乎和break分不开,尽管从语法上没有硬性的规定,但任何一个用到switch语句的实用程序,都离不开break语句。因为本质上,case语句只是一个入口,并没有判断的功能,如果没有break,程序就会毫无阻碍地长驱直入,而不具备了分支的作用。,理论与上机实习双指导,一、学习目标,本章重点介绍了选择结构的程序设计。通过本章学习,能够编写一般的选择结构程序,并能够排除选择结构中的语法错误及逻辑错误。通过本章学习,应达到以下要求:,1熟练掌握条件运算符的使用。,2熟练掌握c语言逻辑值的概念及表示方法,以及关系运算符和逻辑运算符的运算规则。,3根据条件正确写出关系表达式和逻辑表达式。,4在23的基础上熟练掌握三种形式的if 语句,并能设计一般的程序。,5熟练掌握switch语句。并能设计多分支的程序。,理论与上机实习双指导,二、常见问题及上机注意事项,1表示一
展开阅读全文