您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 《C语言程序设计》第四章选择结构程序设计
第四章选择结构程序设计4.1关系运算符与关系表达式4.2逻辑运算符和逻辑表达式4.3if语句4.4switch语句4.5选择程序设计实例关系运算符1.关系运算符的运算对象、规则与结果、结合性如下表所示:对象数名称运算符运算规则运算对象结果结合性双目小于小于等于大于大于等于等于不等于====!=满足则为真,结果为1,不满足为假结果为0整型、实型、字符型等逻辑值(整数1或0)自左向右2.关系运算符的优先级●算术运算符优先于关系运算符●,=,,=优先于==,!=●,=,,=同级,结合性是自左向右●==,!=同级,结合性是自左向右3.关系运算符的使用实例设变量定义如下:charc1=‘a’,c2=‘A’;(c1,c2可看成整型,其值为97,65)intn1=65,n2=97;floatf1=0.3E1,f2=3.0001;则:①c1c2,n1n2,f1==f2的值依次是1,0,0②c1=n1,c2=n2,c1==n2的值依次是1,0,1③f1c1,f2c2,f1==n1-62的值依次是0,1,1④c1c2=1=0==1!=0的值是0⑤c1c2=n1=n2==f1!=f2的值是1关系表达式用关系运算符将两个表达式(可以是算术表达式或关系表达式、逻辑表达式、字符表达式)连接起来的式子,称关系表达式。例如,下面都是合法的关系表达式:a>b,a+b>b+c,(a=3)>(b=5),'a'<'b',(a>b)>(b<c)关系表达式的值是一个逻辑值,即“真”或“假”。例如,关系表达式“5==3”的值为“假”,“5>=0”的值为“真”。C语言没有逻辑型数据,以1代表“真”,以“0”代表“假”。例如,a=3,b=2,c=1,则:•关系表达式“a>b”的值为“真”,表达式的值为1。•关系表达式“(a>b)==c”的值为“真”(因为a>b的值为1,等于c的值),表达式的值为1。•关系表达式“b+c<a”的值为“假”,表达式的值为0。如果有以下赋值表达式:d=a>bd的值为1。f=a>b>cf的值为0(因为“>”运算符是自左至右的结合方向,先执行“a>b”得值为1,再执行关系运算“1>c”,得值0,赋给f)。逻辑运算符逻辑运算符是对两个关系式或逻辑值进行运算的,运算结果仍是逻辑值。在C语言中,逻辑值用数值非0和0来表示逻辑真和假的,所以逻辑运算符也可以对两个数值型数据进行运算,包括整型、实型、字符型等数据。1.逻辑运算符对象数名称运算符运算规则结合性单目双目双目逻辑非逻辑与逻辑或参见下表自右向左自左向右自左向右!&&||2.运算规则a!a0(假)非0(真)1(真)0(假)aba&&ba||b0(假)0(假)0(假)0(假)0(假)非0(真)0(假)1(真)非0(真)0(假)0(假)1(真)非0(真)非0(真)1(真)1(真)3.逻辑运算符的优先级●!优先于双目算术运算符优先于关系运算符优先于&&优先于||●!和单目算术运算符式同级别的,结合性是自右向左●双目逻辑运算符的结合性是自左向右逻辑表达式逻辑表达式的值应该是一个逻辑量“真”或“假”。c语言编译系统在给出逻辑运算结果时,以数值1代表“真”,以0代表“假”,但在判断一个量是否为“真”时,以0代表“假”,以非0代表“真”。即将一个非零的数值认作为“真”。例如:(1)若a=4,则!a的值为0(2)若a=4,b=5,则a&&b的值为1(3)a、b值同前,a||b的值为1(4)4&&0||2的值为1特别注意!(1)用&&对两个表达式进行计算时,若第一个表达式的值为“假”,则运算结果与第二个表达式的值无关,结果肯定为假,所以C语言规定此时第二个表达式将不再计算。(2)用||对两个表达式进行计算时,若第一个表达式的值为“真”,则运算结果与第二个表达式的值无关,结果肯定为“真”,所以C语言规定此时第二个表达式也不再计算。4.逻辑运算符的使用例子设变量定义如下:charc1=‘a’,c2=‘A’;intn1=65,n2=97;floatf1=3.0,f2=3.0001;则:①!c1的值时0②n1&&n2的值是1③f1||f2的值是1④!(c2c1)的值是1⑤!c2c1的值是0⑥f1f2||!c1的值是0⑦n1+32==n2&&n1==c2的值是1If语句1.If语句的三种形式(1)if(表达式)语句例如:if(xy)printf(“%d”,x);这种if语句的执行过程如图:表达式语句假(0)真(非0)(2)if(表达式)语句1else语句2例如:if(xy)printf(“%d”,x);elseprintf(“%d”,y);表达式语句1语句2真假(3)if(表达式)语句1elseif(表达式2)语句2elseif(表达式3)语句3:elseif(表达式m)语句melse语句n流程图表达式1表达式2表达式3表达式4语句1语句2语句3语句4语句5真真真真假假假假例:设计程序,把学生的成绩划分为A、B、C、D、E五个等级。如输入成绩,则输出等级。#includestdio.hmain(){intscore;chargrade;scanf(“%d”,&score);if(score=90)grade=‘A’;elseif(score=80)grade=‘B’;elseif(score=70)grade=‘C’;elseif(score=60)grade=‘D’;elsegrade=‘E’;printf(“%c\n”,grade);}(4)说明:●三种形式的if语句中在if后面都有“表达式”,一般为逻辑表达式或关系表式。例如,if(a==b&&x==y)printf(“a=b,x=y”);在执行if语句时先对表达式求解,若表达式的值为0,按“假”处理,若表达式的值为非0,按“真”处理,执行指定的语句。假如有以下if语句:if(3)printf(“O.K.”);是合法的,执行结果输出“O.K.”,因为表达式的值为3,按“真”处理。由此可见,表达式的类型不限于逻辑表达式,可以是任意的数值类型(包括整型,实型、字符型、指针型数据)。●第二、第三种形式的if语句中,在每个else前面有一分号,整个语句结束处有一分号。例如:if(x0)print(“%f”,x);elseprintf(“%f”,-x);各有一个分号这是由于分号是C语言中不可缺少的部分,这个分号是if语句中的内嵌语句所要求的。如果无此分号,则出现语法错误。else子句不能作为语句单独使用它必须是if语句的一部分与if配对使用。●在if和else后面可以只含一个内嵌的操作语句(如上例),也可以有多个操作语句,此时用花括号“{}”将几个语句括起来成为一个复合语句。(5)例:输入两个实数,按其由小到大的次序输出这两个数。程序如下:main(){floata,b,t;scanf(“%f,%f”,&a,&b);if(ab){t=a;a=b;b=t;}printf(“%5.2f,%5.2f”,a,b);}运行情况如下:3.6,-3.2-3.20,3.602.嵌套的if语句在if()语句1else语句2中,其中语句1,语句2本身又可以是if语句,从而构成了嵌套的if语句。C规定,else必须与最近的if相匹配。例1:if()if()语句1;else语句2;elseif()语句3;例2:Y=-1(X0)0(X=0)1(X0)编一程序,输入一个x值,输出y值,流程图如下:开始输入xX0Y=-1X=0Y=0Y=1输出y结束YNYN有以下几个程序,请判断哪个是正确的?程序1:main(){intx,y;scanf(“%d”,&x);◆if(x0)y=-1;elseif(x==0)y=0;elsey=1;◆printf(“x=%d,y=%d/n”,x,y);}程序2:将上面程序的if语句(第4-6行)改为:if(x=0)if(x0)y=1;elsey=0;elsey=-1;程序3:将上述if语句改为:y=-1;if(x!=0)if(x0)y=1;elsey=0;程序4:y=0;if(x=0)if(x0)y=1;elsey=-1;只有程序1和程序2是正确的switch语句1.switch的一般形式:switch(表达式){case常量表达式1:语句1case常量表达式2:语句2::case常量表达式n:语句ndefault:语句n+1}2.关于switch的说明:(1)switch后面括弧内的“表达式”,ANSI标准允许它为任何类型。(2)当表达式的值与某一个case后面的常量表达式的值相等时,就执行此case后面的语句,若所有的case中的常量表达式的值都没有与表达式的值匹配的,就执行default后面的语句。(3)每一个case的常量表达式的值必须互不相同,否则就会出现互相矛盾的现象。(4)各个case和default的出现次序不影响执行结果。(5)执行完一个case后面的语句后,流程控制转移到下一个case继续执行。“case常量表达式”只是起语句标号作用,并不是在该处进行条件判断。在执行switch语句时,根据switch后面表达式的值找到匹配的入口标号,就从此标号开始执行下去,不再进行判断。因此,应该在执行一个case分支后,使流程跳出switch结构,即终止switch语句的执行。可以用一个break语句来达到此目的。选择结构是结构化程序设计中的三种基本结构之一。在大多数程序中都会包含选择结构。它的作用是,根据所指定的条件是否满足,决定从给定的两组或多组操作选择其一。选择程序设计举例1.写程序,判断某一年是否是闰年。以变量leap代表是否闰年的信息。若闰年,令leap=1;非闰年,leap=0。最后判断leap是否为1(真),若是,则输出“闰年”信息。真假year被4整除真真真假假假year被100整除year被400整除Leap=1Leap=0Leap=1Leap=0leap输出“闰年”输出“非闰年”main(){intyear,leap;scanf(“%d”,&year);if(year%4==0){if(year%100==0){if(year%400==0)leap=1;elseleap=0;}elseleap=1;}elseleap=0;if(leap)printf(“%disaleapyear.\n”,year);elseprintf(“%disnotaleapyear.\n”,year);}运行情况如下:①19891989isnotaleapyear.②20002000isaleapyear.可以将程序中第5-13行改写成以下的if语句用一个逻辑表达式包含所有的闰年条件,用下面的if语句代替:if((year%4==0&&year%100!=0))||(year%400==0))leap=1;elseleap=0;2.写程序。运输公司对用户计算运费。路程(s)越远,每公里运费越低。标准如下:S250km没有折扣250≤S5002%折扣500≤S10005%折扣1000≤S20008%折扣2000≤S300010%折扣3000≤S15%折扣设每公里每吨货物的基本运费为p,货物重为w,距离为s,折扣为d,则总运费f的计算公式为f=p*w*s*(1-d)02468101225050075010001250200030001416s12435812cdmain(){intc,s;floatp,w,d,f;scanf(“%f,%f,%d”,&p,&w,&s);if(s=3000)c=12;elsec=s/250;switch(c){case0:d=0;break;case1:d=2;break;case2:case3:d=5;break;case4:case5:case6:case7:d=8;break;case8:case9:case10:case11:d=10;break;case12:d=15;break;}f=p*w*s*(1-d/100.0);pri
本文标题:《C语言程序设计》第四章选择结构程序设计
链接地址:https://www.777doc.com/doc-5053605 .html