C++的流程控制语句讲义42853.pptx
《C++的流程控制语句讲义42853.pptx》由会员分享,可在线阅读,更多相关《C++的流程控制语句讲义42853.pptx(64页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第5章章 C+的流程控制语句的流程控制语句5.1 5.1 C+C+语言的语句和程序结构语言的语句和程序结构5.2 5.2 选择结构语句选择结构语句5.3 5.3 循环结构语句循环结构语句5.4 5.4 转向语句转向语句5.5 5.5 程序举例程序举例5.6 5.6 程序调试方法简介程序调试方法简介作业:作业:4 47,9,10(1),19(2),207,9,10(1),19(2),205.1 5.1 C+C+语言的语句和程序结构语言的语句和程序结构一个一个C+C+源程序:由若干个源程序文件组成。源程序:由若干个源程序文件组成。一个源程序文件:由编译预处理命令、全局类型一个源程序文件:由编译预
2、处理命令、全局类型定义、全局变量定义、函数定义等组成。定义、全局变量定义、函数定义等组成。一个函数:包括函数首部和函数体。函数体包含一个函数:包括函数首部和函数体。函数体包含局部类型定义、局部变量定义、函数原型声明、局部类型定义、局部变量定义、函数原型声明、编译预处理命令、若干个语句等。编译预处理命令、若干个语句等。C+语句的分类语句的分类说明语句:完成数据类型和变量的定义。说明语句:完成数据类型和变量的定义。控制语句:改变程序执行顺序的语句,包括:条件、控制语句:改变程序执行顺序的语句,包括:条件、循环、开关、转向、返回语句。循环、开关、转向、返回语句。函数调用语句:在函数调用后加分号构成。
3、如:函数调用语句:在函数调用后加分号构成。如:sin(x);sin(x);表达式语句:在表达式后加分号构成。如:表达式语句:在表达式后加分号构成。如:i=i+1;i=i+1;空语句:仅由一个分号所构成,不执行任何动作。空语句:仅由一个分号所构成,不执行任何动作。复合语句复合语句(也称块语句也称块语句):用花括号:用花括号把一个或多个语把一个或多个语句括起来后构成的语句。作为一个语句处理。句括起来后构成的语句。作为一个语句处理。5.2 5.2 选择结选择结构构语语句句选择语句也称分支语句:根据给定条件,选择语句也称分支语句:根据给定条件,选择执行两个或两个以上分支程序段中的选择执行两个或两个以上
4、分支程序段中的某一个。某一个。C+C+语言的选择语句:语言的选择语句:条件条件语语句句:ifif。有三种形式。有三种形式。开关开关语语句句:switchswitch。条件语句条件语句格式格式1 1:if(if()S S 其中,其中,是任何是任何C+C+表达表达式,通常为算术表达式、关系式,通常为算术表达式、关系表达式、逻辑表达式或逗号表表达式、逻辑表达式或逗号表达式;达式;S S是一个单一语句,包括是一个单一语句,包括复合语句和空语句。作为判断复合语句和空语句。作为判断条件的条件的 必须用括号括必须用括号括起来。起来。格式格式2 2:if(if()S1 else S2S1 else S2例例5
5、.1 5.1 从键盘上输入三个整数,输出三个数中的最大数。从键盘上输入三个整数,输出三个数中的最大数。分析:先读入三个数,求出前两个数中的大数,再求出该大数与分析:先读入三个数,求出前两个数中的大数,再求出该大数与第三个数之间的最大数。第三个数之间的最大数。#includeincludevoid main(void)void main(void)int a,b,c,t;int a,b,c,t;cout coutabc;cinabc;if(ab)t=a;else t=b;/A if(ab)t=a;else t=b;/A cout coutc)couttn;else coutcc)couttn;e
6、lse coutcn;/C A A、B B、C C三行可用下列语句替代:三行可用下列语句替代:t=a;t=a;if(tb)t=b;if(tb)t=b;if(tc)t=c;if(tc)t=c;coutncoutn最大数是最大数是tendl;tendl;例例5.2 5.2 求求axax2 2+bx+c=0+bx+c=0的根。的根。a a、b b、c c从键盘输入,从键盘输入,aa0 0。分析:当输入分析:当输入a a、b b、c c的值后,若的值后,若b b2 2-4ac0-4ac0-4ac0,则方程有两个不同的实根;若,则方程有两个不同的实根;若b b2 2-4ac=O4ac=O,则方程有两个相
7、等的实根。,则方程有两个相等的实根。#includeinclude#include#includevoid main(void)void main(void)float a,b,c,delta;float a,b,c,delta;cout coutabc;cinabc;delta=b*b-4*a*c;delta=b*b-4*a*c;if(delta=0)/if(delta=0)/使用复合语句使用复合语句 delta=sqrt(delta);delta=sqrt(delta);if(delta)if(delta)cout cout方程有两个不同的实根:方程有两个不同的实根:;coutnx1=(-
8、b+delta)/2/a;coutnx1=(-b+delta)/2/a;couttx2=(-b-delta)/2/an;couttx2=(-b-delta)/2/an;else else cout cout方程有两个相等的实根:方程有两个相等的实根:x1=x2=x1=x2=-b/2/an;-b/2/an;else cout else cout方程没有实根方程没有实根!n;n;条件语句条件语句格式格式3 3:if(if()1)S1S1 else if(else if()2)S2S2 else if.else if.else Sn else Sn注意,当出现如下形式的嵌套条件语句时:注意,当出现如
9、下形式的嵌套条件语句时:if(e1)if(e2)S1 else S2if(e1)if(e2)S1 else S2 C+C+规定:规定:elseelse与其前面最近的还没有配对的与其前面最近的还没有配对的ifif进行进行配对。这样,上面的条件语句中配对。这样,上面的条件语句中elseelse与第二个与第二个ifif配对。配对。若希望若希望elseelse与第一个与第一个ifif配对,则可用配对,则可用改变:改变:if(e1)if(e2)S1 else S2if(e1)if(e2)S1 else S2例例5.3 5.3 输入三角形的三边,判断其为何种三角形。输入三角形的三边,判断其为何种三角形。#
10、includeincludevoid main(void)void main(void)int a,b,c;int a,b,c;cout coutabc;cinabc;if(a+b=c|b+c=a|a+c=b)if(a+b=c|b+c=a|a+c=b)cout cout不能组成三角形!不能组成三角形!n;n;else if(a=b&b=c)else if(a=b&b=c)cout cout等边三角形等边三角形 n;n;else if(a=b|b=c|c=a)else if(a=b|b=c|c=a)cout cout等腰三角形等腰三角形 n;n;else if(a*a+b*b=c*c|b*b+c
11、*c=a*a|a*a+c*c=b*b)else if(a*a+b*b=c*c|b*b+c*c=a*a|a*a+c*c=b*b)cout cout直角三角形直角三角形 n;n;else else cout cout普通三角形普通三角形 n;n;开关语句:开关语句:switchswitch格式:格式:switch(switch()case case:;1;break;break;case case:;2;break;break;case case:;break;n;break;default:default:值只能是字符型或整型值只能是字符型或整型可选项可选项defaultdefault分支可放在
12、开关语句中分支可放在开关语句中的任何位置,通常为开关语句的任何位置,通常为开关语句的最后一个分支。的最后一个分支。应加空格,否则被认为是语句应加空格,否则被认为是语句标号,如标号,如case9,并不出现语并不出现语法错,这类错误较难查找。法错,这类错误较难查找。的值必须互不相同的值必须互不相同开关语句:开关语句:switchswitch执行过程:执行过程:先求先求 的值,再依次与的值,再依次与casecase后面的后面的 比较,若与某一比较,若与某一 的值相等,则转去执的值相等,则转去执行该行该casecase后边的语句序列,一直执行下去,直至遇到后边的语句序列,一直执行下去,直至遇到brea
13、kbreak语句或开关语句的右花括号为止。否则,若有语句或开关语句的右花括号为止。否则,若有defaultdefault分支,则执行该分支后边的语句序列,否则什分支,则执行该分支后边的语句序列,否则什么也不执行。么也不执行。与与ifif语句相比:语句相比:任一开关任一开关语语句均可用条件句均可用条件语语句来句来实现实现,但反之不然。,但反之不然。原因是开关原因是开关语语句限定表达式的取句限定表达式的取值类值类型,而条件型,而条件语语句句中的条件表达式可取任意中的条件表达式可取任意类类型的型的值值。开关开关语语句句结结构清晰,易理解。构清晰,易理解。例例5.4 5.4 输入一个字符,判断它是元音
14、字母还是空白符。输入一个字符,判断它是元音字母还是空白符。#includeincludevoid main(void)void main(void)char c;char c;cin.get(c);cin.get(c);switch(c)switch(c)case a:case A:case e:case E:case a:case A:case e:case E:case i:case I:case o:case O:case i:case I:case o:case O:case u:case U:case u:case U:cout cout这是元音字母这是元音字母 n;break;n;
15、break;case :case n:case t:case :case n:case t:cout cout这是空白符这是空白符 n;break;n;break;default:cout default:cout这是其它字符这是其它字符 n;n;请画程序流程图请画程序流程图用用if语句改写本例语句改写本例若若defaultdefault分支及其语句前移到第一个分支,分支及其语句前移到第一个分支,则如何修改程序而保持功能不变?则如何修改程序而保持功能不变?当省略当省略casecase后面的语句序列时,则可后面的语句序列时,则可实现多个入口,执行同一语句序列。实现多个入口,执行同一语句序列。5.
16、3 5.3 循循环结环结构构语语句句循环:某条件成立时,重复执行的操作。循环:某条件成立时,重复执行的操作。问题:计算问题:计算1+2+3+1001+2+3+100。分析:编程时不可能依次列出分析:编程时不可能依次列出1 1100100个数。设个数。设 变量变量sumsum累计和值累计和值,初值为初值为1 1;变量变量i i 存放当前待累计的数,初值为存放当前待累计的数,初值为2 2。算法:算法:s1.s1.给变量给变量sumsum赋初值赋初值1,1,i i赋初值赋初值2 2;s2.s2.令令sum=sum+i,i=i+1sum=sum+i,i=i+1;s3.s3.若若i=100i=100,则
17、转则转s2s2;s4.s4.输出输出sumsum的值。的值。s2s2和和s3s3是重复执行的操作。是重复执行的操作。whilewhile、dowhiledowhile和和forfor语语句实现循环,并把这三个语句实现循环,并把这三个语句称为循环结构语句。句称为循环结构语句。while语句语句格式:格式:while(while()S S 其中,表达式是任何表达其中,表达式是任何表达式;语句式;语句S S是任一语句,是任一语句,称为循环体。称为循环体。执行过程:先计算表达式执行过程:先计算表达式的值,若表达式的值不等的值,若表达式的值不等于于0 0,则执行语句,则执行语句S S,再计再计算表达式的
18、值,重复以上算表达式的值,重复以上过程,直到表达式的值等过程,直到表达式的值等于于0 0为止。为止。特点:先判断后执行,特点:先判断后执行,故循环体有可能一次也故循环体有可能一次也不执行。不执行。例例5.6 5.6 用用whilewhile语句求语句求1+2+3+1001+2+3+100的值。的值。#includeincludevoid main(void)void main(void)int i=2,/int i=2,/待求和的当前项待求和的当前项 s=1;/s=1;/当前项前所有项的累加和当前项前所有项的累加和 while(i=100)while(i=100)s+=i;i+;s+=i;i+
19、;cout1+2+3+100=sn;cout1+2+3+100=sn;必须明确所用变量的含义及初值必须明确所用变量的含义及初值或:或:while(i=100)while(i=100)s+=i,i+;s+=i,i+;或:或:while(i=100)while(i=100)s+=i+;s+=i+;此处无须使此处无须使用复合语句用复合语句此处必须使用复合语句此处必须使用复合语句在循环体或表达式内,应有改变在循环体或表达式内,应有改变表达式的值的成分,否则,会产表达式的值的成分,否则,会产生无休止的循环生无休止的循环(称死循环称死循环)。dowhiledowhile语语句句格式:格式:dodo 语句语
20、句 while(while(););语句为任一语句,是循环语句为任一语句,是循环体;表达式是任一表达式。体;表达式是任一表达式。执行过程:先执行语句,执行过程:先执行语句,后判断表达式的值;若表后判断表达式的值;若表达式的值不为达式的值不为0 0,则继续,则继续执行循环体,直到表达式执行循环体,直到表达式的值为的值为0 0时为止。时为止。特点:先执行后判断,特点:先执行后判断,故循环体至少执行一次。故循环体至少执行一次。例例5.7 5.7 用用dowhiledowhile语句求语句求1+2+1001+2+100。#includeincludevoid main(void)void main(v
21、oid)int i=2,/int i=2,/待求和的当前项待求和的当前项 s=1;/s=1;/当前项前所有项的累加和当前项前所有项的累加和 dodo s+=i+;s+=i+;while(i=100);while(i=100);cout1+2+3+100=sn;cout1+2+3+100=sn;在循环体或表达式内,应有改变在循环体或表达式内,应有改变表达式的值的成分,否则,会产表达式的值的成分,否则,会产生无休止的循环生无休止的循环(称死循环称死循环)。分号不能忘!分号不能忘!forfor语语句句格式:格式:for(for(;)3)语句语句 表达式表达式1 13 3是任何表达式;语句是任一语句,
22、为循环体。是任何表达式;语句是任一语句,为循环体。特点:先判断后执行,循特点:先判断后执行,循环体有可能一次也不执行。环体有可能一次也不执行。执行过程:执行过程:计算表达式计算表达式1 1;若表达式若表达式2 2的值为的值为0 0,则执,则执行行,否则转,否则转;执行语句,计算表达式执行语句,计算表达式3 3,转,转;结束循环。结束循环。例例5.8 5.8 用用forfor语句求语句求1+2+1001+2+100。#includeincludevoid main(void)void main(void)int i,/int i,/待求和的当前项待求和的当前项 s;/s;/当前项前所有项的累加和
23、当前项前所有项的累加和 for(i=2,s=1;i=100;i+)for(i=2,s=1;i=100;i+)s+=i;s+=i;cout1+2+3+100=sendl;cout1+2+3+100=s100)break;if(i100)break;三三个个表表达达式式可可分分别别省省和和同同时时省省,但但两两个个分分号号不可省,三个表达式的不可省,三个表达式的作用不能省作用不能省:i=2,s=1;i=2,s=1;for(;i=100;)s+=i+;for(;i=100;)s+=i+;从循环的组成要素上讲,从循环的组成要素上讲,forfor语句的常用形式应为:语句的常用形式应为:for(for(循
24、环变量初始化循环变量初始化;循环结束条件循环结束条件;循环变量更新循环变量更新)循环体语句循环体语句例例5.9 5.9 输入一行字符,并按输入的顺序输出该行字符。输入一行字符,并按输入的顺序输出该行字符。#includeincludevoid main(void)void main(void)char c;char c;cout“cout“输入一行字符串:输入一行字符串:n;n;for(cin.get(c);c!=n;cin.get(c)for(cin.get(c);c!=n;cin.get(c)coutc;coutc;/依次输出字符依次输出字符 coutc;/coutc;/输出最后一个字符,
25、即结束条件输出最后一个字符,即结束条件nn 依次读取字符依次读取字符直到读取的是换行符为止直到读取的是换行符为止三种循三种循环语环语句的比句的比较较forfor和和whilewhile语句都是先判断循环条件,循环体可能一语句都是先判断循环条件,循环体可能一次也不执行。而次也不执行。而dowhiledowhile语句是先执行循环体,后判语句是先执行循环体,后判断循环条件,所以循环体至少要执行一次。因此对于断循环条件,所以循环体至少要执行一次。因此对于至少要执行一次重复结构的程序段,建议使用至少要执行一次重复结构的程序段,建议使用dowhiledowhile语句,而对于其他的重复结构的程序段,可语
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 流程 控制 语句 讲义 42853
限制150内