C语言第5章 选择结构程序设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第5章选择结构程序设计Followme!5.1关系运算符和关系表达式1.关系运算符及其优先次序C语言中的关系运算符有6种:、=、、=、==(等于)、!=(不等于)关系运算符都是双目运算符,其结合性均为左结合。运算优先次序:1.在6种关系运算符中,前4种同级,高于后2种(后2种同级)例如:x!=y、s-d=f、ab+cbd==c、c==ed、a==bc等价于(bd)==c2.关系运算符的优先级低于算术运算符,高于赋值运算符。算术运算符(高)关系运算符赋值运算符(低)2.关系表达式用关系运算符将两个表达式连接起来的式子。如:(ab)(bc)、‘a’‘b’、xy、s+fd关系表达式的值是一个逻辑值(真或假),但C语言没有逻辑型数据,关系表达式的真、假是以数值1和0表示。“1”代表“真”,以“0”代表“假”。例:a=3,b=2,c=1则cb;0(a-b)==1;1b+ca;0f=abc;(自左至右)f=01.逻辑运算符及其优先次序C语言提供三种逻辑运算符:&&(逻辑与)、||(逻辑或)、!(逻辑非)注:“&&”和“||”是“双目(元)运算符”,它要求有两个运算量操作数。而“!”是“单目(元)运算符”,只要求有一个运算量。运算规则:a&&ba、b同时为真,a&&b为真;a||ba、b之一为真,a||b为真;!aa为真,!a为假。a为假,!a为真运算优先顺序:(1)!→&&→||(2)&&和||低于关系运算符,!高于算术运算符5.2逻辑运算符和逻辑表达式!(非)(高)算术运算符关系运算符&&和||赋值运算符(低)例:2||4-!0值为:“1”‘b’&&0值为:“0”53&&84-!0值为:“0”2.逻辑表达式用逻辑运算符将关系表达式或逻辑值连接起来的式子就是逻辑表达式。逻辑表达式的值为真或假,我们用“非0”代表“真”,用“0”代表“假”。注:有些逻辑运算符可能不被执行:对于a&&b&&c,只有当a≠0,才继续进行右面的运算;对于a||b||c,只有当a=0,才继续进行右面的运算。例:判断某年是否闰年。条件为下面之一,(1)能被4整除,但不能被100整除;(2)能被4整除,又能被400整除。(year%4==0&&year%100!=0)||year%400==01.if语句的三种形式1.if(表达式)语句(单分支)如:if(g=80)printf(“%d”,g);5.3if语句3.if(表达式1)语句1(多分支)elseif(表达式2)语句2elseif(表达式3)语句3……elseif(表达式m)语句melse语句n2.if(表达式)语句1else语句2(双分支)如:if(xy)printf(“%d”,x);elseprintf(“%d”,y);如:If(x=90)y=1;elseif(x=80)y=2;Elseif(x=60)y=3;Elsey=0;说明:(1)条件表达式必须用圆括号括起来。(2)条件表达式可以逻辑表达式或关系表达式,也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量。如:if(b)printf(“%d\n”,x);(3)else子句不能单独使用,必须配合if语句使用。(4)if和else后均可放置复合语句。复合语句是用{}括起来的多个C语句。例:由小到大输出两个数。Main(){Floata,b,t;Scanf(“%f,%f”,a,b);If(ab){t=a;a=b;b=t;}Printf(“%5.2f,%5.2f\n”,a,b);}复合语句2.if语句的嵌套if()if()语句else语句elseif()语句else语句这里,else总是与最近的未配对的if配对。把内嵌的语句写在{}中不容易出错#includestdio.hmain(){intnumb1,sign;printf(“Pleaseinputannumber\n”);scanf(“%d”,&numb1);if(numb10)sign=-1;elseif(numb1==0)sign=0;elsesign=1;printf(“sign(x)=%d\n”,sign);}010001)(xxxxsign例:求开始Numb10?结束打印numb1输入numb1YNNSign=-1Numb1=0?Sign=1Sign=0Y见书95页其它几种写法!3.条件运算符及其表达式条件运算符为?和:,是一个三目运算符,有三个参与运算的量。一般形式:表达式1?表达式2:表达式3求值规则为:如果表达式1的值为真,则以表达式2的值作为条件表达式的值,否则以表达式2的值作为整个条件表达式的值。条件表达式通常用于赋值语句之中,表达式的值真、假时都执行赋值语句,且均赋给同一变量。例如:由条件语句:if(ab)max=a;elsemax=b;执行该语句的语义是:如ab为真,则把a赋予max,否则把b赋予max。max=(ab)?a:b;写成使用条件表达式时,注意:1.条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符。因此max=(ab)?a:b可以去掉括号而写为max=ab?a:b2.条件运算符?和:是一对运算符,不能分开单独使用。3.条件运算符的结合方向是自右至左。ab?a:cd?c:d应理解为ab?a:(cd?c:d)4.条件表达式中的三个表达式的数据类型可以不同。如x?‘a‘:‘b‘。表达式的类型取表达式2和表达式3中类型较高者。(int和float,取float)例:输入一个字符,判别它是否是大写字母。是,将它转成小写字母;不是,不转换。最后输出结果。#include“stdio.h”voidmain(){charch;scanf(“%c”,&ch);ch=(ch=’A’&&ch=’Z’)?(ch+32):ch;printf(“%c”,ch);}C语言还提供了另一种用于多分支选择的switch语句一般形式为:switch(表达式){case常量表达式1:语句1;case常量表达式2:语句2;…case常量表达式n:语句n;default:语句n+1;}语义是:计算表达式的值。并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。5.4switch语句例:比较下面两段程序voidmain(){inta;printf(inputintegernumber:);scanf(%d,&a);switch(a){case1:printf(Monday\n);case2:printf(Tuesday\n);case3:printf(Wednesday\n);case4:printf(Thursday\n);case5:printf(Friday\n);case6:printf(Saturday\n);case7:printf(Sunday\n);default:printf(error\n);}}voidmain(){inta;printf(inputintegernumber:);scanf(%d,&a);switch(a){case1:printf(Monday\n);break;case2:printf(Tuesday\n);break;case3:printf(Wednesday\n);break;case4:printf(Thursday\n);break;case5:printf(Friday\n);break;case6:printf(Saturday\n);break;case7:printf(Sunday\n);break;default:printf(error\n);}}Break语句:专用于跳出switch语句,只有关键字break,没有参数。使用switch语句时还应注意:1.在case后的各常量表达式的值不能相同,否则会出现错误。2.在case后,允许有多个语句,可以不用{}括起来。3.各case和default子句的先后顺序可以变动,而不会影响程序执行结果。4.default子句可以省略不用。5.多个case可以共用一组执行语句。case‘A’:case‘B’:case‘C’:printf(“60\n”);break;5.5程序举例#include“stdio.h”voidmain(){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(“%dis“,year);elseprintf(“%disnot”,year);printf(“aleapyear\n”);}例1:写出判断某年是否闰年的程序。条件为下面之一:(1)能被4整除,但不能被100整除;(2)能被4整除,又能被400整除。voidmain(){inta,b,c,max,min;printf(inputthreenumbers:);scanf(%d%d%d,&a,&b,&c);if(ab){max=a;min=b;}else{max=b;min=a;}if(maxc)max=c;elseif(minc)min=c;printf(max=%d\nmin=%d,max,min);}例2:输入三个整数,输出最大数和最小数。#include“stdio.h”voidmain(){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);printf(“freight=%15.4f”,f);}例3:运输公司计算用户运费。其中:S路程,p基本运费,w货重,d折扣。S250km无折扣250≤s5002%折扣500≤s10005%折扣1000≤s20008%折扣2000≤s300010%折扣3000≤s15折扣F=p*w*s*(1-d)本章主要内容•关系运算符与关系表达式•逻辑运算符与逻辑表达式•条件运算符•If语句格式及使用•Switch语句格式及使用•Break语句作业105页5.4、5.5、5.6选作5.7、5.8上机内容•运行调试通过105页5.4、5.5、5.6

1 / 21
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功