您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 数据通信与网络 > 第五章 选择结构程序设计
第5章选择结构程序设计§5.1关系运算符和关系表达式§5.2逻辑运算符和逻辑表达式§5.3if语句§5.4switch语句§5.5程序举例§5.1关系运算符和关系表达式一关系运算的概念“关系运算”就是“比较运算”。即:将两个值进行比较,判断其比较的结果是否符合给定的条件,如符合,则关系表达式的值为“真”,反之,则为“假”。例如:a3当a=5,则满足给定的条件“a3”,则表达式的值为“真”;当a=2,则不满足给定的条件“a3”,则表达式的值为“假”;二关系运算符及其优先次序⒈关系运算符C语言提供6种关系运算符:==(优先级高)==!=(优先级低)⒉优先次序⑴前四种关系运算符的优先级相同,后两种也相同。前四种高于后两种。⑵关系运算符的优先级低于算术运算符。⑶关系运算符的优先级高于赋值运算符。算术运算符赋值运算符关系运算符(低)(高)例如:ca+b等效于c(a+b)ab==c等效于(ab)==ca=bc等效于a=(bc)三关系表达式⒈定义:用关系运算符将两个表达式(可以是算术表达式、关系表达式、逻辑表达式、赋值表达式、字符表达式)连接起来的式子。例如:ab,a+bb+c,(a=3)(b=5),‘a’‘b’,(ab)(bc)⒉表达式的值:关系表达式的值是一个逻辑值,即:“真”或“假”,在C中,用“1”代表“真”,“0”代表假。例如:a=3,b=2,c=1“ab”的值为“真”,即:关系表达式的值为“1”。“b+ca”的值为“假”,即:关系表达式的值为“0”。d=abd=?f=abcf=?返回§5.2逻辑运算符和逻辑表达式一逻辑运算符及其优先次序⒈逻辑运算符C语言提供三种逻辑运算符:⑴&&(逻辑与)⑵||(逻辑或)⑶!(逻辑非)几点说明:⑴“&&”和“||”是“双目(元)运算符”,它要求有两个运算量(操作数)。例如:(ab)&&(xy)(ab)||(xy)⑵“!”是“一目(元)运算符”,只要求有一个运算量。例如:!(ab)⑶逻辑运算举例(逻辑运算的真值表见p93表5.1)例如:a&&b若a、b都为真,则a&&b为真。a||b若a、b之一为真,则a||b为真。!a若a为真,则!a为假。2.逻辑运算符的优先次序⑴!(非)&&(与)||(或)(“!”的优先级最高)⑵逻辑运算符中的“&&”和“||”低于关系运算符,“!”高于算术运算符。!(非)算术运算符关系运算符&&赋值运算符(低)(高)||例如:ab&&xy等价于(ab)&&(xy)a==b||x==y!a||ab二逻辑表达式⒈定义用逻辑运算符将关系表达式或逻辑量连接起来的式子。例如:ab&&xya==b||x==y⒉逻辑表达式的值逻辑表达式的值应该是一个逻辑量“真”或“假”。在C中,给出逻辑运算结果时,以数值“1”代表“真”,以数值“0”代表“假”。但是在判断一个量是否为“真”时,以“0”代表“假”,以非0代表“真”,即:将一个非零的数值认作为“真”。例如:※若a=4,则!a的值为0。※若a=4,b=5,则a&&b的值为1。※a=4,b=5,则a||b的值为1。※a=4,b=5,则!a||b的值为1。※4&&0||2的值为1。⒊如果一个表达式中不同位置上出现数值,应区分哪些是作为数值运算或关系运算的对象,哪些作为逻辑运算的对象。例如:53&&84-!0⒋逻辑运算符两侧的运算对象不但可以是0和1,或者是0和非0的整数,也可以是任何类型的数据(字符型、实型、指针类型等)。系统最终以0和非0来判断它们属于“真”或“假”。例如:‘c’&&‘d’的值为1⒌逻辑运算真值表见表5.2(p94)⒍在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算才能求出表达式的解时,才执行该运算符。⑴a&&b&&c对&&运算符来说,只有a≠0,才继续右面的运算。⑵a||b||c对||运算符来说,只有a=0,才继续右面的运算。例如:a=1b=2c=3d=4m=n=1(m=ab)&&(n=cd)结果:m=0n=1返回§5.3if语句if语句是用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。一if语句的三种形式⒈if(表达式)语句例如:if(xy)printf(“%d”,x);表达式语句真假2.if(表达式)语句1else语句2例如:if(xy)printf(“%d”,x);elseprintf(“%d”,y);语句1表达式语句2假真3.if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3…elseif(表达式m)语句melse语句n表达式2表达式3表达式1语句1语句2语句4语句3假真真真假假例如:if(number500)cost=0.15;elseif(number300)cost=0.10;elseif(number100)cost=0.075;elseif(number50)cost=0.05;elsecost=0;几点说明:⑴if语句中的“表达式”,一般为逻辑表达式或关系表达式。除此之外,表达式的类型还可以是任意的数值类型(包括整型、实型、字符型、指针型数据)。例如:if(a==b&&x==y)printf(“a=b,x=y”);if(xy)printf(“%d”,x);if(3)printf(“ok”);if(‘a’)printf(“%d”,’a’);⑵第二、第三种形式的if语句中,在每个else前面有一个分号,整个语句结束处有一个分号。else子句不能作为语句单独使用,它必须是if语句的一部分,与if配对使用。⑶在if和else后面可以只含一个内嵌的操作语句,也可以有多个操作语句,此时用“{}”将几个语句括起来成为一个复合语句。“{}”外不需加分号。例如:输入两个实数,按代数值由小到大的次序输出这两个数。//ch5-01.cppvoidmain(){floata,b,t;scanf(“%f,%f”,&a,&b);if(ab){t=a;a=b;b=t;}printf(“%5.2f,%5.2f”,a,b);}二if语句的嵌套⒈定义:在if语句中又包含一个或多个if语句,称为if语句的嵌套。⒉一般形式:if()if()语句1else语句2elseif()语句3else语句4几点说明:⑴else总是与它上面最近的if配对。例如:编程者的目的:if()if()语句1(内嵌if语句)elseif()语句2(内嵌if语句)else语句3系统的处理:if()if()语句1(内嵌if语句)elseif()语句2(内嵌if语句)else语句3⑵如果if与else数目不一样,可以加花括弧来确定配对关系。例如:if(){if()语句1}else语句2例如:有一个函数:y=-1x00x=01x0编一程序,输入一个x值,输出y值。//ch5-02.cppvoidmain(){intx,y;scanf(“%d”,&x);if(x0)y=-1;elseif(x==0)y=0;elsey=1;printf(“x=%d,y=%d\n”,x,y);}三条件运算符1.引入例如:if(ab)max=a;elsemax=b;可用条件运算符处理以上问题:max=(ab)?a:b结论:若if语句中,在表达式为“真”和“假”时,都只执行一个赋值语句,并给同一个变量赋值,可以用简单的条件运算符来处理。2.条件运算符⑴一般形式表达式1?表达式2:表达式3例如:(ab)?a:b⑵执行过程表达式1条件表达式取表达式2的值条件表达式取表达式3的值假真⑶条件运算符有3个操作对象,称三目(元)运算符。它是C中唯一的一个三目运算符。几点说明:①执行顺序:先求解表达式1,若为非0(真),则求解表达式2,此时表达式2的值就作为整个条件表达式的值。若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个表达式的值。例如:max=(ab)?a:b算术运算符关系运算符条件运算符赋值运算符(低)(高)②优先级例如:ab?a:b+1等价于(ab)?a:(b+1)③结合方向“自右至左”例如:ab?a:cd?c:d等价于ab?a:(cd?c:d)当a=1,b=2,c=3,d=4则上述表达式的值?④条件表达式不能取代一般的if语句,只有在if语句中内嵌的语句为赋值语句(且两个分支都给同一个变量赋值)时,才能代替if语句。例如:if(ab)max=a;elsemax=b;可用条件表达式来代替:max=(ab)?a:bif(ab)printf(“a=%d”,a);elseprintf(“b=%d”,b);无法用条件表达式来代替。⑤条件表达式中,表达式1的类型可以与表达式2和表达式3的类型不同。例如:x?‘a’:‘b’(x为整型变量)例如:输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。//ch5-03.cppvoidmain(){charch;scanf(“%c”,&ch);ch=(ch=‘A’&&ch=‘Z’)?(ch+32):chprintf(“%c”,ch);}返回§5.4switch语句根据表达式的值进行选择ABMN…switch语句是多分支选择语句,用来实现如下图所表示的多分支选择结构。一一般形式switch(表达式){case常量表达式1:语句1;break;case常量表达式2:语句2;break;case常量表达式3:语句3;break;…case常量表达式n:语句n;break;default:语句n+1}例如:要求按照考试成绩的等级打印出百分制分数段。switch(grade){case‘A’:printf(“85~100\n”);break;case‘B’:printf(“70~84\n”);break;case‘C’:printf(“60~69\n”);break;case‘D’:printf(“60\n”);break;default:printf(“error\n”);}几点说明:⑴常量表达式的值的类型必须是整型或字符型,不能是浮点型。⑵当表达式的值与某一个case后面的常量表达式的值相等时,就执行此case后面的语句,若所有的case中的常量表达式的值都没有与表达式的值匹配时,就执行default后面的语句。⑶每一个case的常量表达式的值必须互不相同,否则就会出现互相矛盾的现象。(4)在执行完一个case分支后,可以用一个break语句,使流程跳出switch结构,即:终止switch语句的执行。(5)如果一个case分支后不加break语句,则执行完这个case分支后,流程控制转移到下一个case继续执行。switch(grade){case‘A’:printf(“85~100\n”);break;case‘B’:printf(“70~84\n”);break;case‘C’:printf(“60~69\n”);break;case‘D’:printf(“60\n”);break;default:printf(“error\n”);}⑺在case后面中虽然包含一个以上执行语句,但可以不必用花括弧括起来,会自动顺序执行本case后面所有的执行语句。⑻多个case可以共用一组执行语句。例如:switch(grade){case‘A’:case‘B’:case‘C’:case‘D’:printf(“60\n”);break;default:printf(“error\n”);}返回例5.7运输公司对用户计算运费。路程(s)越远,每公里运费越低。标准如下:s250km没有折扣250≤s<5002%折扣500≤s<10005%折扣1000≤s<20008%折扣2000≤s<300010%折扣3000≤s15%折扣设每公里每吨货物的基本运费为p,货物重为w,距离为s,折扣为d,则总运费的计算公式为:f=p*w*s*(1-d)§5.5程序举例//ch5-04.cppvoi
本文标题:第五章 选择结构程序设计
链接地址:https://www.777doc.com/doc-3826533 .html