版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章 程序的流程控制 语句,本章内容,语句概述 表达式语句 复合语句 选择语句 循环语句 转移语句 空语句 程序设计风格,语句概述,表达式构成了数据处理的基本单位。 当程序中有多个表达式时,就会面临: 先计算哪一个表达式 根据不同的情况计算不同的表达式 一个或几个表达式需要重复计算多次 语句实现对程序执行流程的控制,包括: 顺序控制 分支控制 循环控制,C+语句的分类,表达式语句,在C+表达式的后面加上一个分号“;”就可以构成表达式语句,其格式为: ; 例如: a + b * c; a b ? a: b; a+; x = a | b 连续的多个表达式语句按它们的书写次序(从左到右、从上到下)
2、依次执行。,较常使用的表达式语句,赋值 自增/自减 输入/输出 无返回值的函数调用,等 例如 x = a+b; /赋值 x+; /自增 f(a); /函数调用 cin a; /输入 cout b; /输出,复合语句,复合语句是由一对花括号括起来的一条或多条语句,又称为分程序或块(block)。其格式为: 中的语句可以是任何的C+语句,其中包括数据定义和声明语句。 语法上,复合语句可看作是一个语句。 复合语句一般作为函数体和结构语句的成分语句。,复合语句举例,int a,b; cin a b; int max; if (a = b) /选择语句 max = a; else max = b; co
3、ut max endl; ,选择语句,在程序中,常常需要根据不同的情况来从一组语句中选择一个来执行(分支),这是通过选择语句来完成的。 选择语句包括: if语句 switch语句,if 语句,if语句(又称条件语句)是根据一个条件满足与否来决定是否执行某条语句或从两个语句中选择一个语句执行。 if语句有两种格式: if () if () else 其中的、必须是一个语句。,if语句的含义,第一种格式,第二种格式,例子:从键盘输入三个整数,计算其中的最大值并将其输出,#include using namespace std; int main() int a,b,c,max; cout a b
4、c; if (a b) max = a; else max = b; if (c max) max = c; cout 最大者为: max endl; return 0; ,if语句的锯齿格式,为了提高程序的易读性,在写if语句时,最好采用“锯齿”格式,即把成分语句往后缩进几列。 当if语句的成分语句也是if语句时,如果嵌套层次很深,“锯齿”格式将会使得程序正文严重偏向右边,从而带来对程序编辑、查看是的困难。为了减少文本的缩进量,可以把这样的if语句按下面的格式书写: if (.) . else if (.) . else if (.) . else if (.) . else .,例子:从键
5、盘输入一个三角形的三条边,判断其为何种三角形,#include using namespace std; int main() int a,b,c; cin a b c; if (a+b = c | b+c = a | c+a = b) cout 不是三角形; else if (a = b ,避免不必要的测试,if (score = 90) cout = 80 ,if 语句的歧义问题,下面的if语句的含义是什么? if () if () else if () if () else if () if () else C+规定:else子句与前面最近的、没有else子句的if配对。因此,上面的if
6、语句解释为: if () if () else 若要按2来解释,则需要加上花括号: if () if () else ,switch 语句,程序中有时需要从两个(组)以上的语句中选择一个(组)来执行。 C+提供了一条多路选择语句:switch语句(又称开关语句),它能根据某个表达式的值在多组语句中选择一组语句来执行。,switch语句的格式,switch () case : case : : case : default: ,例子、从键盘输入一个星期的某一天(0:星期天;1:星期一;.),然后输出其对应的英语单词,#include using namespace std; int main()
7、 int day; cin day; switch (day) case 0: cout Sunday; break; case 1: cout Monday; break; case 2: cout Tuesday; break; case 3: cout Wednesday; break; case 4: cout Thursday; break; case 5: cout Friday; break; case 6: cout Saturday; break; default: cout Input error; cout endl; return 0; ,switch语句中的使用bre
8、ak语句,在执行switch语句的某个分支时,需要用break语句结束该分支的执行。 在switch语句的一个分支的执行中,如果没有break语句(最后一个分支除外),则该分支执行完后,将继续执行紧接着的下一个分支中的语句序列。 在其它一些语言(如:Pascal)的多路选择语句中,一个分支执行完后将自动结束多路选择语句的执行。 C+中的switch语句比其它一些语言中的多路选择语句更具有灵活性。当若干个分支具有部分重复功能时,C+的switch语句可以节省代码量。,循环(重复)语句,程序设计中经常会遇到需要对相同的操作重复执行多次,而每一次操作的数据有所不同。 循环语句为解决重复操作提供了一种
9、途径。 循环一般由四个部分组成: 循环初始化 循环条件 循环体 下一次循环准备。,C+提供了三种实现重复操作的循环语句: while语句 do-while语句 for语句 这三种循环语句在表达能力上是等价的,在解决某个具体问题时,用其中的一种可能会比其它两种更加自然。,while 语句,while语句具有如下的格式: while () ,用while语句求n!,#include using namespace std; int main() int n; cin n; int i=2,f=1; /循环初始化 while (i = n) /循环条件 f *= i; i+; /下一次循环准备 co
10、ut factorial of n = f endl; return 0; ,do-while 语句,do-while语句的格式如下: do while ();,用do-while语句求n!,#include using namespace std; int main() int n; cin n; int i=1,f=1; /循环初始化 do f *= i; i+; /下一次循环的准备 while (i = n); /循环条件 cout factorial of n = f endl; return 0; ,for 语句,for语句的格式如下: for (;) ,#include using
11、 namespace std; int main() int n,i,f; cin n; for (i=2,f=1 /循环初始化 ; i=n /循环条件 ; i+) /下一次循环准备 f *= i; /循环体 cout factorial of n = f endl; return 0; ,用for语句求n!,三种循环语句的使用原则,循环可以分成两大类: 计数控制的循环 事件控制的循环 使用三种循环语句的一般原则是: 计数控制的循环用for语句; 事件控制的循环用while或do-while语句,其中,如果循环体至少要执行一次,则用do-while语句。 由于for语句能清晰地表示“循环初始化
12、”、“循环条件”以及“下一次循环准备”,因此,一些非计数控制的循环也用for语句实现。,例 :计算从键盘输入的一系列整数的和,要求首先输入整数的个数。(计数控制的循环),#include using namespace std; int main() int n; cout n; cout a; sum += a; cout 输入的 n 个整数的和是: sum endl; return 0; ,例:计算从键盘输入的一系列整数的和,要求输入以-1结束。(事件控制的循环 ),#include using namespace std; int main() int a,sum=0; cout a;
13、while (a != -1) sum += a; cin a; cout 输入的整数的和是: sum endl; return 0; ,例 315 从键盘接收字符,一直到输入了字符y(Y)或n(N)为止。 (事件控制的循环 ),#include #include using namespace std; int main() char ch; do cout ch; ch = tolower(ch); while (ch != y ,0,1,1,2,3,5,8,13,. #include using namespace std; int main() int n; cin n; int fi
14、b_1=0; /用于记住前一个Fibonacci数 int fib_2=1; /用于记住新的Fibonacci数 for (int i=3; i=n; i+) int temp=fib_1+fib_2; /计算新的Fibonacci数 fib_1 = fib_2; /记住前一个Fibonacci数 fib_2 = temp; /记住新的Fibonacci数 cout 第 n 个费波那契数是: fib_2 endl; return 0; ,例:求第n个费波那契(Fibonacci)数,循环优化问题,算法的优化:减少循环次数 避免在循环中重复计算不变的表达式,#include using name
15、space std; int main() int n; cout n; /从键盘输入一个正整数 for (int i=2; in; i+) /循环:分别判断2、3、.、n-1是否为素数 int j=2; while (j i ,例:编程求出小于n的所有素数(质数),#include #include using namespace std; int main() int n; cin n; /从键盘输入一个数 if (n sqrt(i) /i是素数 cout i ,; cout endl; return 0; ,. int j = 2,k=sqrt(i); while ( j k) /i是素
16、数。 .,转移语句,除了有条件的分支语句(if和switch)外,C+还提供了无条件的分支语句: break continue goto return,break语句,break语句的格式: break; break语句的含义有两个: 结束switch语句的某个分支的执行 退出包含它的最内层循环语句(由于循环可以嵌套) 在循环体中只要执行了break语句,就立即跳出(结束)循环,循环体中跟在break语句后面的语句将不再执行,程序继续执行循环之后的语句。 在循环体中,break语句一般作为某个if语句的子句,用于实现进一步的循环控制。,例如,判断i是否为素数的循环也可写成: j = 2; k
17、= sqrt(i); while (j = k) if (i%j = 0) break; /退出循环 j+; 或 for (j=2,k=sqrt(i); j=k; j+) if (i%j = 0) break;,continue语句,continue语句的格式如下: continue; continue语句只能用在循环语句的循环体中,其含义是:立即结束当前循环,准备进入下一次循环。 对于while和do-while语句,continue语句将使控制转到循环条件的判断; 对于for语句,continue语句将使控制转到:先计算,然后计算,并根据的计算结果来决定是进入下一次循环还是结束循环。,例:
18、从键盘输入一些非零整数,然后输出其中所有正数的平方根。,#include #include using namespace std; int main() int n; double square_root; cout n; n!=0; cinn) if (n 0) continue; /准备进入下一次循环 square_root = sqrt(n); cout n 的平方根是: square_root endl; return 0; ,goto语句,goto语句的格式如下: goto ; 为标识符,其定义格式为: : 在使用goto语句时,应该注意: 不能用goto语句从一个函数外部转入该函
19、数的内部(函数体),也不能用goto语句从一个函数的内部转到该函数的外部。 C+允许用goto语句从内层复合语句转到外层复合语句或从外层复合语句转入内层复合语句,但是,goto语句不能掠过带有初始化的变量定义。,用goto语句求n!,#include using namespace std; int main() int n; cin n; int i=1,f=1; loop: f *= i; i+; if (i = n) goto loop; cout factorial of n = f endl; return 0; ,空语句,空语句的格式为: ; 空语句不做任何事情,其作用是用于语法上需要一条语句的地方,而该地方又不需做任何事情。空语句常常作为结构语句的子句。 在一个复合语句中,需要转向该复合语句中最后一条语句之后,这时可以采用以下的做法: . . goto end; . end:; 用空语句和goto语句可以来实现continue语句的功能,用空语句和goto语句实现continue语句的功能,while (.) . . continue; . 上述程序等价于: while (.) . . goto end; . end:; ,程序设计风格,程序设
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 客户需求分析工具市场调研数据驱动型
- 重点项目生态保护措施推进责任书范文9篇
- 资源节约型企业承诺书6篇
- 财务报告生成器及财务分析工具集
- 高级外语教师跨文化交际能力培养指导书
- 山东省海阳市美宝校2026年中考押题卷英语试题含解析
- 陕西省延安市实验中学2026年初三3月月考数学试题(解析版)含解析
- 食品企业烘焙食品保质期确定设计方案、实施方案及管理制度
- 云南省迪庆市级名校2026届初三下学期摸底测试物理试题含解析
- 稳健发展保障责任承诺书(3篇)
- 2026湖北事业单位联考十堰市市直招聘152人备考题库附参考答案详解(考试直接用)
- 党课讲稿:践“廉行”强“廉政”守“廉心”勇担新时代廉洁从政使命
- 2025年海南琼中县事业编考试题及答案
- GB/T 7582-2025声学听阈与年龄和性别关系的统计分布
- 旋挖干成孔灌注桩施工方案
- 2026年新能源汽车动力电池回收体系构建行业报告
- 税务延期申请报告范本(3篇)
- 北京2025年北京市人民政府外事办公室所属事业单位招聘笔试历年参考题库附带答案详解
- GB/T 46842-2025资产管理文化数字资产交易实施指南
- 2025年十堰市教育局直属学校招聘真题
- 2025年云南省文山州砚山县辅警招聘考试题库附答案解析
评论
0/150
提交评论