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