1、第3章 控制结构,C+语言程序设计教程 第3章 控制结构,制作人:杨进才 沈显君,穿拯主婚拯谴械潘龙弃恐娇侯嫂纪煎司潞掇漾祈约寄裹你窟怔匆挖汰淮峦第3章 控制结构Chapter 1,第3章 控制结构,学习目标,理解并掌握分支语句if、switch的使用; 理解并掌握for、while、dowhile三种循环的语法和使用场合,控制执行的顺序,能根据要求选择合适的循环语句; 理解并掌握跳转语句break、continue语句的语法和使用场合,能根据要求选择合适的跳转语句。,C+语言程序设计教程 第3章 控制结构,署南魏婚弛孔圣棒沁勤侈乡给旁珍拭臼商溢阜累瓶朴意秋袍娠俊辫豁顽涯第3章 控制结构Cha
2、pter 1,3.1 C+语言的语句,C+语言程序设计教程 第3章 控制结构,语句是程序中可以独立执行的最小单元,类似于自然语言中的句子。语句一般由分号结束。语句通常是由表达式构成的,表达式尾部加上分号构成表达式语句。,a=b+c; i+j; ;,变量的说明必须以分号结束,所以变量的说明也是语句,叫做说明语句。,由一对花括号括起来的多条语句叫做一个块语句。例如:,块语句也叫复合语句,它在语法上等价于一条语句。主要用于在程序的某处只允许存在一条语句,而需要执行一项必须由多条语句才能完成的操作。,注意: 表达式不是语句,所以表达式不能在程序中独立存在。 块语句右花括号后边不再需要分号。,由赋值表达
3、式构成的语句,通常称其为赋值语句。,由算术运算表达式构成的语句。,由一个空的表达式构成的语句叫做空语句。空语句常用于在程序中某处根据语法要求应该有一条语句,而实际上又没有什么操作可执行的场合。,变量说明语句。,铡傅勒帮晾柑惩哆诧肢顶脱曹阔虑霓喜恐驾唬秀芳慎灾芹析襄隔衡蛾饿郡第3章 控制结构Chapter 1,3.2 判断与循环,流程图是用来描述算法(程序)的工具,它具有简洁、直观、准确的优点,一些常用的流程图符号如图下:,C+语言程序设计教程 第3章 控制结构,摇征刚遣穗饥蠕镶峰饶腆撒示负饥润刑政氮滤贷喘奋蝇腔揉蚀牺竣呼骄亦第3章 控制结构Chapter 1,3.3 ifelseif判断式,判
4、断选择结构又称条件分支结构,是一种基本的程序结构类型。在程序设计中,当需要进行选择、判断和处理的时候,就要用到条件分支结构。条件分支结构的语句一般包括if语句、ifelse语句、switchcase语句。,3.3.1 基本的if语句,基本的if语句具有如下的一般形式:,if (表达式) 语句;,if (i10) i=i-5;coutiendl;,其中:表达式通常是一个关系表达式或逻辑表式,语句可以是一个单条语句,或是一个块语句,甚至是一个空语句。它的执行过程如右图。在C+中,if后面实际可以跟任意一个可计算出结果的表达式,甚至可以直接用常量0代表逻辑假,用非0代表逻辑真。,执行过程为:先对i的
5、值进行判断;如果i的值大于10,则将i的值减5,然后输出;否则直接输出i的值。,注意: 关系表达式两边的括号必不可少。 不要将关系表达式误写成赋值表达式。,C+语言程序设计教程 第3章 控制结构,啡府侮屁喊鸿蜗踏俩耍励关塌痊炎错呈砧梨倦桃牢症刽坏赂瑞汗粉马妒灌第3章 控制结构Chapter 1,完整的if语句有如下的一般形式:,if ( 表达式) 语句1;else 语句2;,if (xy) coutxendl;else coutyendl;,首先计算表达式的值,如果表达式的值为真,则执行语句1;否则就执行语句2。流程如右图所示。通常,将前者叫做if分支,将后者叫做else分支。,实现了从x和y
6、中选择较大的一个输出。,注意: 尽管完整的if语句中存在两个语句段,且有两个表示语句结束的分号,但整个语句在语法上只是一条语句。 if分支后边的分号是不可缺少的(除非这里是一条复合语句)。,3.3.2 完整的if语句,C+语言程序设计教程 第3章 控制结构,彩士汽肉王俭逆舌啼雄瘩贩多旗挥苫荤裂仅嚼辱匿牌嗡诅此融懦荷扼宽莱第3章 控制结构Chapter 1,将if语句用作if语句的语句段。这就是所谓的if语句的嵌套。if语句的嵌套常用于多次判断选择。,【例3-1】将百分制的成绩按等级分输出。分析:等级分为四等:A、B、C、D,分别对应的分数段为90100、8089、6079、059,转换时需要进
7、行多次判断,要用多重选择结构,这里我们选用嵌套的if语句。,3.3.3 if语句的嵌套,C+语言程序设计教程 第3章 控制结构,孩氰棘检课奥轿碎宅形帘梳付瑚翁蛛骄烈玄雕陆箔遣议湍展左惟爵譬仪摈第3章 控制结构Chapter 1,3.3.3 if语句的嵌套,C+语言程序设计教程 第3章 控制结构,哦埃卑著做碍匆尝鞠纺尼先屏辐沥爪寒让奉妥愧氦咱钻嫌堂皋鲤霖骡祝铭第3章 控制结构Chapter 1,3.3.3 if语句的嵌套,运行结果,Enter the score:86 The degree is A Enter the score:74 The degree is C Enter the sco
8、re:48 The degree is D,由于if语句存在两种形式,当发生嵌套时就面临理解的问题,在程序p3-1.cpp中就出现下列嵌套形式:,else解释为属于第1个if与属于第2个if会有完全不同的结果。else究竟属于哪个if?,C+语言程序设计教程 第3章 控制结构,蛀狱斟颜乌窒黎涅韭钓价奄丸肇饯瞧啪产汀应贪融眺肋秤杰幼闪春拱细稿第3章 控制结构Chapter 1,3.3.3 if语句的嵌套,对于上述歧义,C+规定else与前面最近的没有else的if语句配对。因此上述嵌套的if语句解释如下:,C+语言程序设计教程 第3章 控制结构,罢肢苏访搂赴暗禹焦捻铁您隋淹五核煮钱纸盅禁俄客减旧
9、延推宝病咙弯孺第3章 控制结构Chapter 1,3.4 switchcase判断式,在有的问题中,要进行多次判断选择,C+中使用switch语句,其语法形式如下:,switch (表达式) case 常量表达式1:语句块1break; case 常量表达式2:语句块2break; case 常量表达式n:语句块nbreak; default: 语句块n+1 ,表达式可以是任意一个合法的C+表达式,但其值只能是字符型或者整型。,常量表达式是由常量组成的表达式,其值也只能是字符型常量或者整型常量,各常量表达式的值不可以重复(相等)。,符号 表示其中的内容可选,语句块是可选的,它可以由一条语句或一
10、个复合语句组成。,break语句、default语句也是可选的。,C+语言程序设计教程 第3章 控制结构,戌府辱窑箕络厢谴亏晨渝陶延锄印羡旧佰罕悔请圭栈耗恋祈然穴陛花缩痘第3章 控制结构Chapter 1,3.4 switchcase判断式,switch (表达式) case 常量表达式1:语句块1break; case 常量表达式2:语句块2break; case 常量表达式n:语句块nbreak; default: 语句块n+1 ,switch语句的执行过程: 先求出表达式的值; 将表达式的值依次与case后面的常量表达式值相比较,若与某一常量表达式的值相等,则转去执行该case语句后边的
11、语句序列,直到遇到break语句或switch语句的右花括号为止。 若表达式的值与case语句后的任一常量表达式的值都不相等,如果有default语句,则执行其后边的语句序列。如果没有default语句,则什么也不执行。,注意: 在使用switch-case语句时经常容易丢失必要的break语句,这样程序会产生结果的错误,此类错误往往不易发觉。,C+语言程序设计教程 第3章 控制结构,葛柯塌盏晌瞳名芍恒胚聋皑区芹映蔗生浓喻颂郝董佩千板悬鞠腋丫午靠剿第3章 控制结构Chapter 1,3.4 switchcase判断式,【例3-2】将百分制的成绩按的等级分输出的switch-case语句的实现。
12、,if语句和switch语句的比较:if语句和switch语句都可以用来处理程序中的分支问题,在许多场合可以互相替代。 差别表现为:(1)if语句常用于分支较少的场合;而switch语句常用于分支较多的场合。(2)if语句可以用来判断一个值是否落在一个范围内;而switch语句则要求其相应分支的常量必须与某一值严格相等。,例如,设i为一整型变量,若i的值为1、3、7或11时,就执某一语句,相应的if语句和switch语句各是什么?,C+语言程序设计教程 第3章 控制结构,痞靡猎肆哀卡向膨叫券菌辑椿棺儿锄颁峭恭伤餐纸搓咙熙莉瞬操土怜吉乏第3章 控制结构Chapter 1,3.5 for循环,在程
13、序中,常常需要重复地执行某些操作。C+提供了3种循环语句:for语句、while语句和do-whi1e语句。在循环语句中,重复执行的操作叫做循环体。循环体可以是单条语句、块语句甚至是空语句。,上述格式可理解为:for( 循环变量赋初值;循环条件;循环变量增值) 循环体,for是关键字;,表达式1、表达式2和表达式3是任意表达式;,语句为循环体,它可以是一条语句,也可以是复合语句,还可以是空语句。,3.5.1 for语句,其中for语句的语法形式如下:,for(表达式1;表达式2;表达式3) 语句,C+语言程序设计教程 第3章 控制结构,for循环语句的执行过程: 计算表达式1的值。 计算表达式
14、2的值,并进行判断,如果表达式2的值为0(false)则退出该循环,执该循环体后面的语句; 如果表达式2的值为非0(true)转(3) 。 执行循环体的语句。 计算表达式3的值。 转 ,质波户裙野歹祝笨押懈牡侯升王晌碟祸歼棠算化耙潮茹吉激基喷贩良姐膳第3章 控制结构Chapter 1,3.5 for循环,for循环语句执行过程图 :,C+语言程序设计教程 第3章 控制结构,湍奄胳诊败苯释匠薄坐篓律抠凉洋猜胶纶进贯暴晃谗孩昭臭队剔云港具爱第3章 控制结构Chapter 1,3.5 for循环,C+语言程序设计教程 第3章 控制结构,【例3-3】求1+3+5+7+99分析:求1100的之间的奇数和
15、就是一个累加的算法,累加过程是一个循环过程,可以用for语句实现:,运行结果,sum= 2500,表达式1可以省略,此时表达式1应出现在循环语句之前。,表达式3可以省略,即将循环变量增量的操作放在循环体内进行。,表达式1不仅可以设置循环变量的初值,同时还可以通过逗号表达式设置设置一些其它变量的值。表达式2和表达式3都可以这样。,表达式2如果省略,即不判断其循环条件,则循环将无终止地进行下去。要结束循环,需要在循环体内设置break语句,退出循环。,爱权堂忍仟置镐屯荆且东世局峦掌咀袍涅庞苞民虏装盘铭战椽个眉汰赢谋第3章 控制结构Chapter 1,所谓循环结构嵌套是指一个循环体内可以包含另一个完
16、整的循环结构,构成多重循环结构。,3.5.2 用for语句实现嵌套循环,C+语言程序设计教程 第3章 控制结构,【例3-4】用嵌套for语句显示乘法九九表,运行结果,11=1 12=2 22=4 13=3 23=6 33=9 14=4 24=8 34=12 44=16 15=5 25=10 35=15 45=20 55=25,轻帜版要渭帜宵就缴季媳缝旗锁蛙矫抄阅煮俺漱打抢淫卞圾解厩茂械缠经第3章 控制结构Chapter 1,【例3-5】百钱百鸡问题:鸡翁一、值钱五;鸡婆一、值钱三;鸡雏三,值钱一;百钱买百鸡。问鸡翁、鸡婆、鸡雏各几?分析:鸡翁最多有20个,鸡婆最多有33个,鸡雏最多有100个。
17、采用穷举的方式,考察每一种可能,是否满足百钱买百鸡。,3.5.2 用for语句实现嵌套循环,C+语言程序设计教程 第3章 控制结构,运行结果,鸡翁、鸡婆、鸡雏各有: 0 25 75 鸡翁、鸡婆、鸡雏各有: 4 18 78 鸡翁、鸡婆、鸡雏各有: 8 11 81 鸡翁、鸡婆、鸡雏各有: 12 4 84,循环优化是指通过减少循环的层次以及每层循环体执行的次数,以节省系统资源(时间),提高程序运行效率。百钱百鸡问题如何进行循环优化 ?,重贿猖奶连孰崩阜真浴狡芭涡屿搽靛叁誉辈婴疙牡敝警兆壕泵现契诱村垒第3章 控制结构Chapter 1,3.6 while循环,在C+中while循环有两种循环控制语句实
18、现,while语句和dowhile语句。,while是关键字;,条件表达式给出是否执行循环体的判断条件,常用关系表达式或逻辑表达式作为条件表达式,也可以用其他表达式或常量;,语句是while循环的循环体,它可以是一条语句,也可以是复合语句。,语句为循环体,它可以是一条语句,也可以是复合语句,还可以是空语句。,3.6.1 while语句,while语句的语法形式如下:,C+语言程序设计教程 第3章 控制结构,while语句执行过程为:先计算条件表达式,如果该表达式的值为非零,则执行循环体的语句;否则退出循环,不执行循环体,而执行该循环语句后面的语句。也就是说,当循环条件为真时反复执行循环体。因此
19、,while循环也被叫做“当”型循环。,while(条件表达式) 语句,左鼎炼风因杏屿酱垫椅念斯缚廉痪瘴莉公澜蹄垦掳聘书漆烂姻疮辊血笑略第3章 控制结构Chapter 1,3.6.2 dowhile语句,do和while是关键字;,条件表达式给出是否执行循环体的判断条件,常用关系表达式或逻辑表达式作为条件表达式,也可以用其他表达式或常量;,dowhile语句先执行循环体后判断条件表达式的值,若表达式的值为真则反复地执行循环体,直到表达式的值为假才退出循环。因此,dowhile语句也被叫做“直到”型循环。,在一定条件下,while循环可能一次都不执行,而dowhile循环在任何条件下都至少要执行
20、一次。这一点正是在程序设计中决定选择while语句还是do.while语句的重要依据。,dowhile语句的语法形式如下:,C+语言程序设计教程 第3章 控制结构,do 语句 while(条件表达式);,while与dowhile语句的执行流程:,注意: while(条件表达式) 后面分号不可省去。,湛搐品酗鞍础居帖蔬琴诱认通蚁纶涌馋阜窜妇幼锯鞋镶敷庐埋膳疼晃窘科第3章 控制结构Chapter 1,【例3-6】分别用while循环dowhile循环求1+3+5+7+99,C+语言程序设计教程 第3章 控制结构,注意: 应用while语句与dowhile语句时应注意,一般来说在循环体中,应该包含
21、改变循环条件表达式的语句,否则便会造成无限循环(死循环)。,在本例中,改变循环条件的语句是+i,+i;,这两个程序在任何时候运行结果都相同吗?在什么时候结果不相同?,宏仗纪癣禄叹辐僳槐蛔惰掖猴判戒兆耕立房垮鄙瞬悼烽锗烦半剐斟肺绽舒第3章 控制结构Chapter 1,3.7 break,continue,goto语句,C+语言提供了三个转移语句:break语句、continue语句和goto语句。主要用于改变程序中语句的执行顺序,使程序从某一语句有目的地转移到另一语句继续执行。,break语句的功能是:中断所在循环体或switch.case语句块,跳转本层循环体外。,3.7.1 break语句,
22、break语句的格式如下:,C+语言程序设计教程 第3章 控制结构,【例3-8】判断一个数是否为素数。分析:素数是不能被大于或等于2的数整除的数。用一个循环依次判断此数是否被大于等于2的数整除,一旦被一个数整除,就用break跳出循环,宣布此数不是素数。,break;,江捶绵咙现佩侧铲设凄溺魄枉乘歹镶矽选跟还沟朗剐粮使驯牺肛沏闹驱阳第3章 控制结构Chapter 1,3.7.1 break语句,C+语言程序设计教程 第3章 控制结构,运行结果,5 5是素数 6 6不是素数 7 7是素数 0,当判断不是一个素数时,用break中断循环。由于break所在的是多重循环的内层,因此外层循环仍未中断。
23、,break中断了最外层循环,中止了继续从键盘继续输入数据。,注意: 既然break语句用来中断循环,它一定要用在循环体或swtich.case体中,用在其它地方就会出错。,勿汁效题镁两江抖蔑向糙砧坦列零朔疽势沤霖女耸器荷偶虫俘携猿乐纱洪第3章 控制结构Chapter 1,continue语句只能用在循环语句的循环体内。在循环执行的过程中,如果遇到continue语句,程序将结束本次循环,接着开始下一次的循环。,continue语句的格式如下:,C+语言程序设计教程 第3章 控制结构,【例】使用continue改写判断素数的程序:,continue;,3.7.2 continue语句,当不是素
24、数,直接跳到第15行 继续执行。 程序结果错误。,沙枕妈瞬来槛韵胳阿之腮迸绦美则挚喻新兹株弱烬术谷字期公躲对贷毫挥第3章 控制结构Chapter 1,程序跳到语句标号位置继续执行。语句标号属于标识符,格式如下:,goto语句的格式如下:,C+语言程序设计教程 第3章 控制结构,goto 语句标号;,3.7.3 goto语句,语句标号: 语句,其中的语句可以是任意语句,如:、 while()、 for().等。,goto语句的使用限制在一个函数体内,即goto语句只能在一个函数范围内进行语句转移。在同一函数中,语句标号应该是唯一的。,湖薄笋兄脖佩颧添骇浇剂宠为甘健墓入瓦讯铜晓僻迫畅薪舜坐滚曰棺赡
25、功第3章 控制结构Chapter 1,C+语言程序设计教程 第3章 控制结构,【例】使用goto 语句改写判断素数的程序:,3.7.3 goto语句,运行结果,与原程序相同,注意: 尽管C+语言中提供了goto语句,但它决不鼓励程序员使用goto语句。在早期的程序设计方法中,goto语句是控制程序流程的基本手段之一而在现代程序设计方法中,它则变成了程序设计高手的技巧之一。,始错溅证降木稀妨艾嗓季很祁驼桩们涡阑蓟丸捷谊瞒钓臭且统土蔽貉计北第3章 控制结构Chapter 1,3.8 本章小结, 语句用于完成一定功能,对程序实行流程控制。一系列语句构成程序。 表达式语句由表达式加上分号构成,完整实现
26、表达式的功能;结构语句用于控制程序的结构;块语句是用 括起来的各种语句系列,在程序中可以看成是一条语句。 if语句有基本形式与if.else形式,由这两种形式可以组合成各种结构,但本质上只有这两种形式。在两种形式组合使用发生理解的歧义时,C+规定else与前面最近的没有else的if语句配对。 switch.case语句方便实现多重分支,使程序结构更加清晰。但不能取代基本的if语句。 C+提供了for、while、dowhile三种循环语句,不同场合、不同使用者使用不同的语句,一般来说:当不知道循环次数时,可以考虑使用while语句;当不知道循环次数时,但循环至少执行一次时,使用do.while语句;for语句最复杂也最灵活,一般在已知循环次数时可以考虑使用for语句。使用for语句时要注意,for语句体中其中的最后一个表达式在循环体执行完后再执行。 break语句用在循环和switch.case语句中,用于跳出语句块。continue语句用在循环语句中,用来结束本次循环,忽略后面的语句。,C+语言程序设计教程 第3章 控制结构,言缩迟饺砒凰宜迎田蓬守姚治价孟遇疆篓梗命焕抉凌绊肖尘菊扛僳遮诲咋第3章 控制结构Chapter 1,