资源描述
Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,谭浩强C语言_第4章_选择,顺序结构程序设计,从键盘输入一个大写字母,要求改用小写字母输出,int main(),char c1,c2;,scanf(%c,printf(您输入的字符是:%c,%dn,c1,c1);,c2=c1+32;,printf(转换为小写字母是:%c,%dn,c2,c2);,system(pause);,第四章,分支结构程序设计,C语言用if语句来实现,If(关系表达式),语句1,else,语句2,如:if(x0)y=1;,Else y=-1;,其中 “x0”是一个关系表达式,“”是关系运算符,关系运算符,关系运算符用来判断两个操作数的大小关系,2,优先级,3,关系运算符,1.关系运算符及其优先次序,(,小于,),(,大于,),=(,大于或等于,),=(,等于,),!=(,不等于,),优先级相同(高),优先级相同(低),说明:,关系运算符的优先级低于算术运算符,关系运算符的优先级高于赋值运算符,关系表达式,2.关系表达式,用关系运算符将两个表达式(可以是算术表达式或,关系表达式,逻辑表达式,赋值表达式,字符表达式),接起来的式子,称关系表达式,例:,a,b,a+b,b+c,(a,=3)(b=5),ab)(bb”,的值为“真”,表达式的值为,1,。,C语言中没有专用的逻辑值,1代表真,0代表假,逻辑运算符,4,5,逻辑运算符,逻辑运算符,1.逻辑运算符及其优先次序,&(,逻辑与,),相当于其他语言中的,AND,|(,逻辑或,),相当于其他语言中的,OR,!(,逻辑非,),相当于其他语言中的,NOT,例:,a&b,若,a,b,为真,则,a&b,为真。,a|b,若,a,b,之一为真,则,a|b,为真。,!,a,若,a,为真,则,!a,为假。,优先次序:,!,(,非,)-&()-|(),逻辑运算符中的“,&”,和“,|”,低于关系运算符,“,!”,高于算,术运算符,逻辑表达式,2.逻辑表达式,用逻辑运算符将关系表达式或逻辑量连接起来的式子就,是逻辑表达式,逻辑表达式的值应该是一个逻辑量“真”或“假”。,例:,设a=4,b=5:,!a的值为0 a&b的值为1,a|b的值为1 !a|b的值为1,4&0|2的值为1,任何非零的数值被认作“真”,逻辑表达式,例:,53&84-!0,自左向右运算,1&0逻辑值为0,83逻辑值为1,表达式值为0,逻辑表达式,在逻辑表达式的求解中,并不是所有的逻辑运算符都要被执行。,(1)a&b&c 只有a为真时,才需要判断b的值,只有a和b都为真时,,才需要判断c的值。,(2)a|b|c 只要a为真,就不必判断b和c的值,只有a为假,才,判断b。a和b都为假才判断c,例,:,(m=ab)&(n=cd),当a=1,b=2,c=3,d=4,m和n的原值为1时,由于“ab”的值,为0,因此m=0,而“n=cd”不被执行,因此n的值不是0而,仍保持原值1。,if语句实现选择结构,If,语句的三种基本形式,(1)if,(表达式)语句,例:,if(x,y),printf(“%d”,x,);,表达式,语句,真(非0),假,(0),if语句的3种形式,6,7-8,例:用if语句求两个数中的最大数,#include,int main(),int i,j,max;,printf(请输入两个整数:);,scanf(%d%d,max=i;,if(maxy)printf(“%d”,x);,else printf(“%d”,y);,条件,语句1,语句2,Y,N,8,例:用if对输入的两个数排序,#include,int main(),int i,j,max;,printf(请输入两个整数:);,scanf(%d%d,if(ij),printf(您输入的数按从小到大顺序为%d,%dn,j,i);,else,printf(您输入的数按从小到大顺序为%d,%dn,i,j);,system(pause);,8-9,(3)if(表达式1)语句1,else if(表达式2)语句2,else if(表达式3)语句3,else if(表达式m)语句m,else 语句n,9,例:检查键盘输入字符是何种类型:大写字母、小写字母、数字、其它。,10,#include,int main(),char c;,printf(请输入一个字符:);,scanf(%c,if(c64&c=97&c=48&c=57),printf(您输入的是数字!n);,else printf(您输入的是其它字符n);,system(pause);,if语句的嵌套,匹配规则:,Else总是与它上面的,最近的,统一复合语句中的,未配,对的if语句配对。,例:,If(),if()语句1,else,if()语句2,else 语句3,例:,If(),if()语句1,else,if()语句2,else 语句3,当if和else数目不同时,可以加,花括号,来确定配对关系。,多路分支,11,利用switch语句实现多分支选择结构,switch语句的格式:,switch,(表达式),case常量表达式:语句,case常量表达式:语句,case常量表达式:语句,default :语句,11,4.4 利用switch语句实现多分支选择结构,例:,要求按照考试成绩的等级输出百分制分数段,用,switch语句实现:,switch,(grade),case,printf();,case,printf();,case,printf();,case,printf();,default,(printf);,4.4 利用switch语句实现多分支选择结构,说明:,(1)switch后面括弧内的“表达式”,其值可以是整型、字符型、枚举型)。,(2)当表达式的值与某一个case后面的常量表达式的值相等时,就执行此case后面的语句,若所有的case中的常量表达式的值都没有与表达式的值匹配的,就执行default后面的语句。,(3)每一个case的常量表达式的值必须互不相同,否则就会出现互相矛盾的现象(对表达式的同一个值,有两种或多种执行方案)。,12-13,4.4 利用switch语句实现多分支选择结构,(4)各个case和default的出现次序不影响执行结,果。例如,可以先出现“default:”,再出现,“case:”,然后是“case:”。,(5)执行完一个case后面的语句后,流程控制转移到下一 个case继续执行。“case常量表达式”只是起语句标号作用。在执行 switch语句时,根据switch后面表达式的值 找到匹配的入口标号,就从此标号开始执行下去,不再进行判断。,应该在执行一个case分支后,可以用一个,break语句来终止switch语句的执行。,(6)多个可以共用一组执行语句。,14-15,Switch实例:对输入的整数转换为中文星期名称,#include,int main(),int w;,printf(请输入1个整数);,scanf(%d,switch(w),case 1:printf(星期一n);break;,case 2:printf(星期二n);break;,case 3:printf(星期三n);break;,case 4:printf(星期四n);break;,case 5:printf(星期五n);break;,case 6:printf(星期六n);break;,case 7:printf(星期日n);break;,default:pritnf(错误输入n);,system(“pause”);,15,
展开阅读全文