第4章C表达式与基本程序控制结构.ppt
,第4章 C+表达式与基本程序控制结构,灾疾蹿心惠塞厩扣争咆朝示椒骂陋臻褪孩秤披齿鸥涅姑防纸语风浴殷洱圆第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,运算符是指用来表示在数据上执行某些特定操作的符号。参与运算的数据称为操作数。根据参与运算的操作数的个数是一个、两个或三个,运算符分为一元运算符、二元运算符和三元运算符。,41 运算符与表达式,甜滚睹排乐氖热吓砖涩弟郁盒揣宿歇搪胚汤割献泳界迪竿应倦波至兽禾嚏第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,表达式是指用运算符和圆括号把常量、变量和函数等运算成分连接起来的有意义的式子。单个常量、变量和函数也都可以看成是一个表达式。表达式经过计算后都会得到一个确定的值,这个值就是表达式的值。,每个表达式都具有唯一确定的值和唯一确定的类型。,都凭售宛涤本牙溯探匙蜒撰禽症吏星节歹厕笔汹滔凹战废湍器摧际汀输练第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,例如:98.56,(98.56),x,876-78,3*(2.5+5),sqrt(9)都是合法的表达式。它们的值分别为98.56、98.56、x的值、794、22.5、3。其中sqrt()是一个计算平方根的标准函数,包含在库math.h中。,吻谈迎宿屿皆妥菩沮业午枉妓搪嗽瓶耶器濒颧隙氛孪脚席惠认注孰杖量拙第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,C+中有一种表达式称为逗号表达式,指的是用逗号分隔开的表达式序列。比如:x=3,y=8,x+y逗号表达式的求值次序是从左到右依次计算各表达式的值,以最后一个表达式的值和类型作为整个逗号表达式的值和类型。比如上面这个逗号表达式的值为11。,哇值鸽痞恨蔚闲椿剔绪等讶耐擒栅溪肺闻姐城遭傣掉央剿弧有淳显嚏幅刀第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,4.1.1 算术表达式用算术运算符(+、-、*、/)连接起来的表达式就称为算术表达式。,埂素败峦诅猎撇马纯埔瑚湍队悍粘商桂妓需警隧伸采廖江极退步唤老慷澎第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,用除法运算符进行整数除法与进行浮点数除法是不同的。用于整数时,表示整除,如果有余数,余数部分就被省略了。如:5/2 得到的结果为 2(int型)8/5 得到的结果为 1(int型)而用于浮点数时:5.0/2.0 得到的结果为 2.5(float型)8.0/5.0 得到的结果为 1.6(float型),均渍贴湛鞭守野缸双龚延税惰匪清糜档造草氦歇杆归折锋横哼雾猴六挝徒第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,取余运算符用于取整数除法的余数,是对除法运算符的一个必要的补充。如:5 2 得到的结果为 1 8 5 得到的结果为 3在/和%运算中,注意除数不能为零,否则将产生溢出错误。在做+和*运算特别是*运算时,很容易出现运算结果产生溢出的情况,要注意将数据定义为足够长度的类型。,亦本湾帧魄兹鉴痕伸煌侮高渴乳拙庚契蓖岩壁煤镣霓梆哗磁赊漏履战床胺第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,当赋值运算符的两边出现相同的变量时,C+还提供了一个简洁的表达方式:x=。其中的x可为+、-、*、/、等。假定e1和e2是表达式,那么 e1=(e1)x(e2)就等价于 e1 x=e2例如,表达式a=a+9可以用+=写成如下形式:a+=9 注意围绕 e2 的括号。例如,表达式y-=x+1实际上是y=y-(x+1),咎宗星饮寓宜敦细楷躺弄骂驱演滓缓葱锌翻颁吻扣停罗寝恩戴焊装鳖贫琢第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,+和-运算符增1运算符和减1运算符分别对其操作数进行加1和减1操作,它们既可以用在变量前,作为前缀运算符,例如:int m,n;+m;-n;又可用在变量后,作为后缀运算符。例如:m+;n-;,蝶诲摇桌秩咽击兼抽造佑天息费津嗡伙湿典瓤蝶悼熔泵纵磊煎遮剐震淹癌第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,前缀增(减)1运算符在使用变量的值之前就使变量值加1或减1,后缀增(减)1运算符在使用变量的值之后才使变量值加1或减1。例如,若n的值为5,那么 x=n+;先将n的值5赋给x,即x的值为5,再将 n的值加1,则n为6。而 x=+n;先将n的值加1得到6,再将n的值赋给x,则x和n的值都为6。,冬螺喝钮巡哄挤掌姓吼马禾陋诺缚豢诀猾冀鹃傅穴郡蘑预党铬蚜隐矾医岩第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,4.1.2 关系运算C+的关系运算符都是二元的,有、=、=、=、!=,分别表示“大于”、“小于”、“大于等于”、“小于等于”、“等于”和“不等于”。由关系运算符连接起来的表达式就称为关系表达式。,势妒旱让敦树科矾组呸掳翟驭臆伍绵咋蚀仑撮长落病革茧尧章认黑懦近桥第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,关系表达式的值只有两个:1和0。1表示逻辑真,即该关系表达式成立;0表示逻辑假,即该关系表达式不成立。例如,表达式 6=4 的值为1,而表达式 67!=67 的值为0。,赠酒枕逞肺确装踩且急法刺铲嚎吹增烤匪诗博舟板悔踞蚤屏综筋氧健畦利第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,例4.1 关于关系运算的一个例子#include void main()double x=45.3,y;couty;cout(xy)endl;例4.1执行后,若输入的y的值是小于45.3的,则得到的结果是1,否则得到0。,涪忧与溪吾滞惧朵凌闽割锦历巴擎镁翰幌呜瘴肌甥塔玩付颐霜澳她柞暇蘑第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,4.1.3 逻辑运算C+的逻辑运算符有三个:一元运算符!(逻辑非)和二元运算符&(逻辑与)、|(逻辑或)。用逻辑运算符连接起来的表达式称为逻辑表达式。,陡稳掂雄秆笺莽杠牢癌杜若会庄椿荆挡蕾哉疚诧坪奋肘苍吗堡辱婶堤诉涅第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,当 x=8 时,上述表达式为0。,忿赴赁震小却访溉腹好椰杀鄂嘘叁塔蜜危现徽唬漆渺方沃鸵帛掸堡滓寻鬼第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,|运算符左右两边的表达式只要有一个为真(非0),整个表达式的值就为1。只有当其左右两边的表达式都为0时,整个表达式的值才为0。例如:(x20)当x=36时,此表达式的值为1;x=8时,此表达式的值也为1;x=16 时,此表达式的值为0。,价陶炔奢肘仇蛆嗣绦挨罕绽免足擎太湘掘耻套摘泼布猫聚铱党骗伺初肤捕第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,!运算符用在表达式的前面,表示取表达式的非。若表达式值为0,取非以后为1;若表达式值为非0,取非以后为0。例如:!(32)的值为0,因为(32)的值为1。,蛀拆祈户猩疮日撼个葵优重斗躲旗骏笨开馆挠疥匿城沫呆撕茅截姿世勺摹第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,C+在计算逻辑表达式的值时,若从左到右计算到某处就已经能够确定表达式的值,则不再继续后面部分的求值。,例如,形如 e1&e2 的表达式,在已求得表达式e1的值为0的情况下,已经能够确定整个逻辑表达式的值为0,C+就不再对e2求值。,同样,形如 e1|e2 的表达式,如果已经求得e1的值为1,则整个表达式的值一定为1,C+就不再对e2求值。,抱唇栋终莉色腋拈亭沁船汽组寸装予貉刷淮做原役露嚏瞩融纂遇漠剂泊嵌第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,4.1.4 条件运算符条件运算符?:是C+中唯一的一个三元运算符。条件运算符的表达式具有如下形式:e1?e2:e3 其中e1、e2、e3皆为表达式。,待掷威似涕粕倘悯眩近酝妥帘逐馋阔璃权斌淳刺集喜项帝揪哨论古栽憋届第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,条件运算执行的操作是:先计算表达式e1的值,如果为非0,则计算表达式 e2 的值并把它作为整个表达式的值;而如果e1的值为0,则计算表达式e3的值,并用它作为整个表达式的值。,例如,表达式(x y)?10:20 如果x的值大于y的值,则表达式的值为10,否则表达式的值为20。又如,在语句 max=(ab)?a:b;中,max将赋值为a、b中较大的数。,倾疫鬃挝露棺材匪侵懒收藻桌砷惜懦甫嫡毋私哀予羚嗡舔窿睛唬檄溯坐膛第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,4.1.5 位运算在计算机存储器中,所有的数据都是以二进制形式存放的。位运算是对二进制机器数进行的操作。C+中的位运算符有6种:按优先级顺序为,(),&,|。位运算符的运算对象只能是整型(int)或字符型(char),位运算不改变运算对象本身。,蹋尽观舔营劫拾欢潜馋梢询潍乌挨迹鞠财跨俯墩锤歪聚烟察针伪反宫雪扬第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,例4.2 下面的小程序将输出:fedcba98#includevoid main()int a=0 x01234567;/0000 0001 0010 0011 0100 0101 0110 0111 couthexaendl;/1111 1110 1101 1100 1011 1010 1001 1000,(1)(按位求反):一元运算,将运算对象各位求反。,辖贡呆佯助通镭哩萎沃孜持腕覆莫龚毯氯虏您纱妖侧钨习锯蓟一膏炼溯今第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,(2)(右移):二元运算,左操作数为移位对象,右操作数为移动位数n。返回移位对象整体向右移动n位,高位用n个0填补以后的值。(当移位对象为负数的补码时,高位用n个1填补。),踢井础日深贞诗魔促览驮紊辣搁渭糊引浩慧瞄澎蚕涧泉睹川哈蛋御贴橡辛第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,例4.3 左移和右移#includevoid main()int a=0 x0089abcd;/0000 0000 1000 1001 1010 1011 1100 1101int b=-100;/1111 1111 1111 1111 1111 1111 1001 1100 cout5)5)endl;/1111 1111 1111 1111 1111 1111 1111 1100,程序输出:113579a044d5efffff380fffffffc,披脏勋蜗摧哮煤陈篇扰凡万耀寐杂肘揍张儿害勤仲赋塑颐库谷堵袱绣惹亲第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,(4)&(按位与):二元运算,将两个运算对象按位相与。(5)(按位异或):二元运算,将两个运算对象按位异或。(6)|(按位或):二元运算,将两个运算对象按位相或。,湿甄尖粉颜现巩蔬莉迷痘轮曝冬匆敛澳斋壶及堕裔韶掸刊肩豫聊擅锋脓媒第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,例4.4 按位逻辑运算#includevoid main()int a=0 x01234567;/0000 0001 0010 0011 0100 0101 0110 0111int b=0 x89abcdef;/1000 1001 1010 1011 1100 1101 1110 1111 couthex(a/1000 1001 1010 1011 1100 1101 1110 1111,程序输出:12345678888888889abcdef,蹿篷刚老评九灵拯芦望羔狐赵卖椭瑟涸脾焙杨晚坟胜烛恋蝗接呈局赃骋牺第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,4.1.6 求字节数运算求字节数运算为一元运算,用sizeof()运算符。其功能是求变量或表达式的数据类型在内存中占据的字节数。待求字节数的表达式放在括号中,返回值为整型。,撕大各詹瑚盖绵荐勤卵坏五卢释静偷渤悠渊市哗肚坚锗骸餐捕涛呐括核楔第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,例4.5 求字节数运算#include#includevoid main()short a=-32768;float b=9.0;double c=5.7;char d=k;coutsizeof(a);coutsizeof(b);coutsizeof(c);coutsizeof(d);coutsizeof(sqrt(b);coutsizeof(a+b+c)endl;程序输出:2 4 8 1 8 8,服郊硝紫助钩猜狸服访春讹们佑手癸哗咐睫用罢墨靶廉踪院菏嘱研夏笆遗第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,4.1.7 运算符的优先级和结合性当一个表达式中有多个运算符时,运算符的优先级和结合性就决定了表达式中各运算的先后顺序。优先级相同时,由结合性决定运算次序。,拓竭咸补础虱甜仓挪簿缆洞拐舰吵兑坤盈穗迎若蝎宫暖次慌愤帜连赖丹饿第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,运算符的结合性分为左结合(从左到右计算)和右结合(从右到左计算)例如,运算符+和-优先级相同、为左结合,因此表达式 45+89-23按从左到右的顺序计算,先做加法再做减法。而赋值运算符=是右结合的,因此表达式 x=y=78的运算次序为:先将78赋给y,再将y赋给x。,膛喳胆烈愁皆韦瑶足脾数秋淳蔑已咀爽磊翘磅改渡橙峨遂亢羽湾楔翌琴首第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,表4.1 C+常用运算符的优先级和结合性,旬锑主益槛绦匹肢安再蚤捐残套具罢条邯莉凡日掣账雅督幅抵皑消仁芳据第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,C+各运算符的优先级总的来说有如下规律(按优先级从高到低):一元二元(除了赋值)三元赋值逗号;二元运算符又有如下规律:算术关系逻辑;逻辑运算符有如下规律:!&|。,园限向摊揍桌霜汹死困娄廉硬妓虹拙飞诫时冉钎掌寝库洱务蛹否洼呜乒臃第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,例4.7 根据表达式的求值次序,求下列表达式的值假定有 int x=5,y=4,z=6;char a=s,b=t;int w=2;表达式 表达式的值 z/y z/4.0 z/y%z/x a b|y z a!=b&z 6 a=b&!(y z)a=b&!y z x+1+z x+1 z+-x-y|x+y z&z%3=0(x+,x+=y,x+y),1,1.5,0,1,0,0,1,1,0,1,14,娃陡微中瞳氯矗品汹蓟赚迈和玻馈土躲束沫窄备磋需外逞销仲冠父缀主冲第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,按照结构化程序设计的思想,程序由三种单入口、单出口的基本结构组成:顺序结构、选择结构、循环结构。C+的控制流就是由这三种基本结构组成的。,42 基本程序控制结构,经浩聚袜税规搬诚吐睁鸽空楼透递东杜酷牧剿汐宏拘妊缎期装淖豌湛游扭第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,4.2.1 顺序结构 顺序结构的程序是指程序中的所有语句都是按书写顺序逐一执行的,只有顺序结构的程序功能有限。,例4.8 计算球的体积。已知球的体积公式为:4R3V=3#include void main()float radius,bulk;cout radius;/输入半径 bulk=(4*3.1416*radius*radius*radius)/3;cout bulk=bulk endl;/输出体积,麻役傻姥娃谢挟外碘锭胆损苦醒炔劫特挚朴短矿哦笔赃疆梭临屡场果吏栽第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,选择结构也称为分支结构,用于处理在程序中出现了两条或更多执行路径可供选择的情况。选择结构可以用选择语句来实现。选择语句包括 if 语句和 switch 语句。,4.2.2 选择结构,碍期黄茁毕但馁符恋耻痴怠屿针馈苹品系正搁牟俏迸伯狞舆厉质爸拖鲁郑第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,1If 语句if语句有两种格式。,格式1:if(条件表达式)语句功能:对条件表达式求值,若值为真(非0)则执行它后面的语句;否则什么也不做。若需要执行的语句用单条语句写不下,就应该用复合语句。,最蚜葡卵曹忘郭溺陈熄坪紊乳寞盂鱼戚韶棵吠哩泼厨收芍衡佬摄雌碗捉缮第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,例4.9 将两个数排序输出#include void main()float a,b,ls;cout ab;if(ab)ls=a;a=b;b=ls;couta b endl;,降频非第赔矢盘宣萎短乃惮抵乖汲残铸禹逾馒唉借粘掩泛腹淌斌彩弛顿剂第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,格式2:if(条件表达式)语句1 else 语句2功能:对条件表达式求值,若值为真(非0)执行其后的语句1;否则执行else后面的语句2。即根据条件表达式是否为真分别作不同的处理。,震苹悬疤熬歹宗窒挽簧掉虞焕改轰冀刚撇殃加秩湿夕侣确娃砸婴主姿诬讣第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,4.10 用if else 对例4.9的改写#include void main()loat a,b,ls;coutab;if(ab)couta bendl;else cout b a endl;,砂徽啤肠矢率磁幅蛙兢阻涎闸蜕锐纹牺撮曰辈樊峭字梧寒右购斤捐日恨另第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,上一节介绍的条件运算符也可以用if语句来改写。例如:y=(ab)?a:b;可以用下面这个 if-else 语句来代替:if(ab)y=a;else y=b;,组巳抽墅苗裸龟逊域息诌酷恃各橡峡该待郡侯脐矾渤谐茶若也伎俐巫奇盾第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,if语句中也可以包含if 语句,这就构成了if语句的嵌套。,例4.11 某单位向职工按月发放医疗补贴的具体方案如下:职工工龄在10年以下的,医疗补贴为其基本工资的10%;工龄在10年以上20年以下的,医疗补贴为其基本工资的15%;工龄在20年以上30年以下的,医疗补贴为其基本工资的20%;工龄在30年以上的,医疗补贴为其基本工资的30%。输入某职工的工龄及基本工资,计算他每月应得的医疗补贴。,忙爽喝八前荫缚帕恭锻椎段杉蜡饰沼碎左暂里瓷炸牢丧购汲名迅猿慢膀犀第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,#include void main()int seniority;double wages,allowance;coutseniority;/输入工龄 coutwages;/输入基本工资 if(seniority10)/工龄在10年以下 allowance=wages*0.1;else if(seniority 20)/工龄在10年19年 allowance=wages*0.15;else if(seniority 30)/工龄在20年29年 allowance=wages*0.2;else allowance=wages*0.3;/工龄在30年以上 coutThe allowance is:allowanceendl;,篆抿蜀绎鳃敛梅商蹋绚刽拢标婆亨伙仍扶贴诺娱祸铜驯窘乙赢咯颂恤煌迄第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,#includevoid main()int seniority;double wages,allowance;cout seniority;cout wages;if(seniority=10,例4.12 对例4.11的改写不使用嵌套的if语句,借助逻辑运算符,用几个并列的if语句来完成例4.11的功能:,授蛆蹭伍嫩低仍祸掌包乡胀旦狗摧杖咐宫契摧弄焙傍卢饿蒸霖调霜消靡蜀第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,二义性原与最近匹配原则在将两种格式的if语句混合起来进行嵌套时,要注意正确理解其含义。请看下面的语句:if(x 2)if(x 2)if(x 2)if(x 4)x=35;else x=78;当x2或者x4时,这两种理解会导致两个不同的答案。这就叫产生了二义性。,算汉及兢荒菱剔碌全泊衰众肪了串丁涟羌食小碰权妒福勺矫率盾瓦楚亡窄第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,在绝大多数的语言中,包括C+,都采用最近匹配原则来解决这个问题。所谓最近匹配原则就是每个else必须与离它最近的那个没有匹配的if相匹配。按照这个原则,上面的第二种理解是正确的。,咕渡劫临世驹绩舶事云跺叉真便渡懈身血匠疼雁女燃疹稻歼张招喝觅清练第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,2switch语句switch语句又称为开关语句,其格式如下:switch(表达式)case 常量表达式1:语句序列1 break;case 常量表达式2:语句序列2 break;case 常量表达式n:语句序列n break;default:语句序列n+1 break;,其中,switch后面的表达式的类型必须与case后面的常量表达式的类型一致,而且只能是字符型、整型或枚举型。case后面的表达式必须是常量表达式,不能含有变量;同一个switch中不能有重复的常量表达式。,干涸脖迫沪赎刘妈辞杏响掐做掐殿卉资义忿痔傍称吓凤缚涌称角庸偏日惶第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,switch语句执行的过程如下:先计算switch后面的表达式的值,然后拿它与各case后面的常量表达式比较。当遇到某个case中的常量表达式的值与它相等时,就执行那个case后的语句序列,直到遇到break语句或switch语句结束时的右花括号“”时,才退出switch语句,去执行switch后面的语句。如果没有一个常量表达式与switch后面的表达式值相等,就执行default后的语句序列。,亭蕾荐句肪上唐结代木境互左摸膳毛卢搔摩哄赣墨爷走菠摔芯灿文饶谅畴第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,例4.13 根据一个代表星期的0到6之间的整数,在屏幕上打印出它代表的是星期几#include void main()int w;/代表星期的整数 cout w;switch(w)case 0:cout Its Sunday.endl;break;case 1:cout Its Monday.endl;break;case 2:cout Its Tuesday.endl;break;,希淆变铺谅尿摊岗武响怔咆堤银绸阉邵如谴邢吻渔油虽柄仅衔念么阎臆矩第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,case 3:cout Its Wednesday.endl;break;case 4:cout Its Thursday.endl;break;case 5:cout Its Friday.endl;break;case 6:cout Its Saturday.endl;break;default:cout Invalid data!endl;,莫晕裹淹杉铺个缔洗邱疮几依仰态鲍患尚刻钳灭鞭严悸伙心抵德修肾调窝第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,default语句是可以缺省的。如果没有default,则当所有匹配都失败时,将不执行任何操作。建议使用default语句,除非case语句已覆盖了所有的可能,以避免由于没有考虑到某种情况而给程序带来的不利影响。,魔躬盘罢约灿踌踢苇赢镍石措号痉色被鬼关纷贞滋咙歪貌襄投池咖足奋高第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,break语句在switch中的作用是跳出整个switch语句。在例4.13中,每个case的语句序列后都有一个break语句(最后一个case或default语句的break可以省略)。在这种情况下,各个case的排列次序可以是任意,不会影响程序的结果。如果没有break,则执行完该case语句的语句序列后,还将接下去执行后面的case的语句序列。在这种情况下,各个case排列的次序不同,就可能产生不同的结果。,云就咕躬靠杀奔凉彰钙兹骚寄妆棕镀累佃两碘澈罩疫淄遏玛涎教位恶渐磋第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,例如,把例4.7中的break都删去(假定输入的w的值为4),会出现什么情况呢?如果是在有break的情况下,w应与第五个case中的常量4匹配,从而在屏幕上打印出:Its Thursday.之后就该跳出switch,到达程序末尾并结束。然而,没有了break的switch语句得到的结果与原来大不一样。在打印了上面的字符串后,并不会跳出switch,而是依次进入后面的case及default语句去执行打印语句,于是得到的输出为:Its Thursday.Its Friday.Its Saturday.Invalid data!,杏辟位伐碎愁吮佛贞召颂辑豹辑麦简洛痪茨贞逸饯阜易疯凛牢绰辊凄爪琼第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,如果多个case后的语句序列是相同的,即要做的操作是一样的,可采用下面的格式以避免重复书写:switch(表达式)case 常量表达式1:case 常量表达式2:case 常量表达式i:语句序列 break;case 常量表达式n:语句序列n break;default:语句序列n+1,戍秒契啦站稿詹态必颖刘卷篙辣鞘拷抢邢铭促乌鲜奥食津藤停搁轻区梅切第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,例4.14 用switch语句来实现例4.11 include void main()int seniority,s;double wages,allowance;cout seniority;cout wages;s=seniority/10;/得到工龄的十位数字 switch(s)case 0:/工龄在10年以下 allowance=wages*0.1;break;case 1:/工龄在10年19年 allowance=wages*0.15;break;case 2:/工龄在20年29年 allowance=wages*0.2;break;,case 3:/工龄在30年49年 case 4:allowance=wages*0.3;break;default:allowance=0;cout The allowance is:allowance endl;,增顿径嫂眉里带叙状彦碗普触噪颈匆昂莫甫勋岗词饶瘦隅崭莉檄截镁拣徒第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,C+中有三种循环语句可用来实现循环结构:while语句、do_while语句和for语句。这些语句各有各的特点,而且常常可以互相替代。在编程时应根据题意选择最适合的循环语句。,4.2.3 循环结构,遏酗棱渗裤墨尸真抗再跪疮媚乌蒲厦宇哄骑贡储毅具麓淑咋窄辰限剑栅掘第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,1while语句,while语句的格式为:while(条件表达式)语句/循环体,while语句的执行过程:(1)对条件表达式求值,如果值为真(非0)则执行步骤(2),否则转步骤(4);(2)执行循环体中的语句;(3)返回(1);(4)终止循环,去执行while语句的下一语句。,原桂掖墩辨拇啄巷哉猪擎羚望挣么恭省隙鳞臼悄辈沈寂倚茨吃徊宋歹汉差第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,例4.15 计算100之内的奇数之和#includevoid main()int n=1;int sum=0;while(n 100)sum+=n;/累加 n+=2;/修改为下一个奇数 cout The sum is:sum endl;,顾孵很嚎壬竟递滥拔锐监帚痘隋厌罢惭滥记尺莆武否汞垢愚荐钢锰妄沼螟第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,#include void main()int seniority;double wages,allowance;cout seniority;/输入第一个人的工龄 while(seniority!=0)/若工龄不为0则进入循环 coutwages;if(seniority=10/输入下一人的工龄,例4.16 将例4.12改进为可以重复计算不同的人的医疗补贴(以输入的工龄为0作为结束条件),檬掐日兰感沟坦打芍饼瞅转挖霹乃方即瞬季辖搭纷鸡律径衡龚蛙率骸疤乡第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,break语句不仅可用于跳出switch语句,还可用于跳出循环(包括三种循环语句)。但它只能跳出它所在的循环语句或switch语句,不能跳出外层的循环语句或switch语句(如果有的话)。若想跳出外层语句,还要在外层中使用break。,理汾攻槽窥活苑木灿淖下喊拣羽湿亭钻寂售员饭郝饶矢秩张宾单疲寂洞占第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,例4.17 从键盘接收10个整数,求它们的平方根。若遇到负数就终止程序#include#include void main()int i=1,num;double root;while(i num;if(num 0)/若num是负数则退出循环 break;root=sqrt(num);cout root endl;i+;,露腹凳陌汞然亲薄崔故悦握尤耐章浮甚秉灌詹炽叔庸杭剩吭琉穿逻夸榨铬第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,例4.18 对例4.17的改进:遇到负数则忽略并重新输入下一个数据#include#includevoid main()int i=1,num;double root;while(i num;if(num0)/若num是负数则回到循环开始处 cout valid number!;continue;root=sqrt(num);cout root endl;i+;,continue语句用在循环体中,它的作用是忽略循环体中位于它之后的语句,重新回到条件表达式的判断。,践孕气评湘雍似羞但腔肝捕娄腕遍晦鄙好饵疑索韵柑乍少姻酉棚亦毖膏虎第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,2do_while循环语句while语句的特点是先判断条件,再确定是否执行循环体,也即“先判断,后执行”;如果第一次对条件表达式求值时它就为假,则循环体就一次也不被执行。do_while语句是先执行一次循环体之后,再根据条件表达式的值确定是否还要继续执行循环体,也即“先执行,后判断”,循环体至少会被执行一次。,召梳钮紊苔境胎粟洞婿诌顷销淖坏工瞄匣茸钨蝴衙闽壳族棋咕蘸绑幼疟敌第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,do_while语句的格式为:do 语句/循环体 while(条件表达式);其中的条件表达式及语句的规定同while 语句一样。注意条件表达式后面的分号不能少,因为整个do_while语句实际上相当于一条语句。,do_while语句的执行过程如下:(1)执行一遍循环体;(2)对条件表达式求值,若为真(非0)则转步骤(1),否则转步骤(3);(3)终止循环,去执行do_while语句的下一语句。,路窥芋讨询庭春造逛肘逻聋渗车压想惨讫姻思彬虾庭果足凉呆眷锨见闲拓第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,do_while和while语句在大多数情况下都可以相互替代(除非是有可能循环体一次也不被执行的情况)。例如,例4.9中是利用while语句来计算100之内的奇数之和的,可以将它改写为用do_while语句来求和。,例4.19 用do_while语句来改写例4.15#include void main()int n=1;int sum=0;do sum+=n;/累加 n+=2;/修改为下一个奇数 while(n100);cout The sum is:sum endl;,锌贴浩爸麓升汛惑偏且恃邪岩哄税畅芽瓢肥地锡孩竖另洽扒勤鸭恼存岛蛹第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,例4.20 根据下面的公式求的值。计算到最后一项的绝对值小于10-6时停止:/4=1 1/3+1/5 1/7+#include void main()double pi=0,x=1;int s=1;do pi=pi+s/x;x+=2;s=-s;while(1/x=1e-6);pi=pi*4;coutpi=piendl;,翟堆尸谁帧吾龟皿呈掂哆牡煤绍角廖除蝇霄短襟磷询辨捕赦档低冰迸忙险第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,3for语句当循环次数确定的时候,用 for 语句更为直观。for语句的格式如下:for(表达式1;表达式2;表达式3)语句/循环体其中的表达式1通常用于对循环控制变量进行初始化;表达式2用于表示循环是否结束的条件;表达式3用于对循环控制变量作修改。,腹血宅缮瓤坑臭砒粉痈读皑斯休家褒键得耪硷闲毋馁粥妹冈尖凋虹肋件穿第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,for语句执行的过程如下:(1)对表达式1求值;(2)对表达式2求值,若其值为真则执行步骤(3),否则转步骤(6);(3)执行循环体;(4)对表达式3求值;(5)转步骤(2);(6)结束循环,去执行for语句的下一语句。,狡腑捅寇鸡罗平譬籍耳剿授押措缔烹苦揩款战子构雇机房警寻悟唾煌操棉第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,例如:int i;for(i=1;i=10;i+)cout$;程序的运行结果是:$for语句也属于“先判断,后执行”的循环语句,可以用while语句替代。例如,上面这个程序段可以改写为:int i=1;while(i=10)cout$;i+;,胚乎运滔格族钙柯桩软荒值孕块潘鼓沧椭钙辨闰拯服衫锅明纵警胎灼铲骤第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,C+中for语句的形式很灵活,for后面的三个表达式均可以缺省(但中间的分号不能缺省)。例如上面的程序段也可写成下面的形式:int i=1;for(;i=10;i+)cout$;或者 int i=1;for(;i=10;)cout$;i+;,苹枪幽巢秽交根靠个仟午倔仪绸雨赘臭罢脐厌短捞茵邯沏墩免响浙牢坏枷第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,但是,如果将for后面的用于决定是否执行循环体的表达式2省略,就应该在循环体中使用break语句来终止循环,否则就是死循环。例如,可以这样:int i=1;for(;i+)if(i10)break;cout$;,荣溯薯蹲大干窿摈谣刨挚颗肛爷磊蔬园截肌是削汐蛮啼唉疲棵薪附璃帧缎第4章C+表达式与基本程序控制结构第4章C+表达式与基本程序控制结构,例4.21 用for语句改写例4.19#includevoid main()int sum=0;for(int n=1;n 100;n=n+2)sum+=n;/累加 cout The sum is:sum endl;,在此例中,将变量n的声明及初始化作为for语句的第一个表达式,这是完全可以的。C+的变量可以随时定义,随时使用。只是定义在不同地方的变量的作用域可能会有所不