资源预览内容
第1页 / 共63页
第2页 / 共63页
第3页 / 共63页
第4页 / 共63页
第5页 / 共63页
第6页 / 共63页
第7页 / 共63页
第8页 / 共63页
第9页 / 共63页
第10页 / 共63页
亲,该文档总共63页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第5章 C+的流程控制语句,5.1 C+语言的语句和程序结构 5.2 选择结构语句 5.3 循环结构语句 5.4 转向语句 5.5 程序举例 5.6 程序调试方法简介 作业:47,9,10(1),19(2),20,5.1 C+语言的语句和程序结构,一个C+源程序:由若干个源程序文件组成。 一个源程序文件:由编译预处理命令、全局类型定义、全局变量定义、函数定义等组成。 一个函数:包括函数首部和函数体。函数体包含局部类型定义、局部变量定义、函数原型声明、编译预处理命令、若干个语句等。,C+语句的分类,说明语句:完成数据类型和变量的定义。 控制语句:改变程序执行顺序的语句,包括:条件、循环、开关、转向、返回语句。 函数调用语句:在函数调用后加分号构成。如: sin(x); 表达式语句:在表达式后加分号构成。如: i=i+1; 空语句:仅由一个分号所构成,不执行任何动作。 复合语句(也称块语句):用花括号把一个或多个语句括起来后构成的语句。作为一个语句处理。,5.2 选择结构语句,选择语句也称分支语句:根据给定条件,选择执行两个或两个以上分支程序段中的某一个。 C+语言的选择语句: 条件语句:if。有三种形式。 开关语句:switch。,条件语句,格式1: if() S 其中,是任何C+表达式,通常为算术表达式、关系表达式、逻辑表达式或逗号表达式;S是一个单一语句,包括复合语句和空语句。作为判断条件的必须用括号括起来。 格式2: if() S1 else S2,例5.1 从键盘上输入三个整数,输出三个数中的最大数。 分析:先读入三个数,求出前两个数中的大数,再求出该大数与第三个数之间的最大数。 #include void main(void) int a,b,c,t; coutabc; if(ab) t=a; else t=b; /A coutc) couttn;else coutcn;/C ,A、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,则方程有两个相等的实根。 #include #include void 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 注意,当出现如下形式的嵌套条件语句时: if(e1) if(e2) S1 else S2 C+规定:else与其前面最近的还没有配对的if进行配对。这样,上面的条件语句中else与第二个if配对。若希望else与第一个if配对,则可用改变: if(e1) if(e2) S1 else S2,例5.3 输入三角形的三边,判断其为何种三角形。 #include void main(void) int a,b,c; coutabc; if(a+b=c|b+c=a|a+c=b) cout不能组成三角形!n; else if(a=b ,开关语句: switch,格式: switch() case :; break; case :; break; case :; break; default: ,开关语句: switch,执行过程: 先求的值,再依次与case后面的比较,若与某一的值相等,则转去执行该case后边的语句序列,一直执行下去,直至遇到break语句或开关语句的右花括号为止。否则,若有default分支,则执行该分支后边的语句序列,否则什么也不执行。 与if语句相比: 任一开关语句均可用条件语句来实现,但反之不然。原因是开关语句限定表达式的取值类型,而条件语句中的条件表达式可取任意类型的值。 开关语句结构清晰,易理解。,例5.4 输入一个字符,判断它是元音字母还是空白符。 #include void 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; break; case : case n: case t: cout这是空白符n; break; default: cout这是其它字符n; ,请画程序流程图 用if语句改写本例,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,则转s2; s4.输出sum的值。,s2和s3是重复执行的操作。 while、dowhile和for语句实现循环,并把这三个语句称为循环结构语句。,while语句,格式: while() S 其中,表达式是任何表达式;语句S是任一语句,称为循环体。 执行过程:先计算表达式的值,若表达式的值不等于0,则执行语句S,再计算表达式的值,重复以上过程,直到表达式的值等于0为止。,特点:先判断后执行,故循环体有可能一次也不执行。,例5.6 用while语句求1+2+3+100的值。 #include void main(void) int i=2,/待求和的当前项 s=1;/当前项前所有项的累加和 while(i=100) s+=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。 #include void 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。 #include void main(void) int i,/待求和的当前项 s;/当前项前所有项的累加和 for(i=2,s=1;i=100;i+) s+=i; cout1+2+3+100=sendl; ,表达式1通常用于设置循环初值,多为赋值表达式和逗号表达式。,表达式2通常用于循环结束条件的判断,多为关系表达式、逻辑表达式。,表达式3通常用于改变循环的结束条件。,从循环的组成要素上讲,for语句的常用形式应为: for(循环变量初始化;循环结束条件;循环变量更新) 循环体语句 例5.9 输入一行字符,并按输入的顺序输出该行字符。 #include void main(void) char c; cout“输入一行字符串:n; for(cin.get(c);c!=n;cin.get(c) coutc;/依次输出字符 coutc;/输出最后一个字符,即结束条件n ,三种循环语句的比较,for和while语句都是先判断循环条件,循环体可能一次也不执行。而dowhile语句是先执行循环体,后判断循环条件,所以循环体至少要执行一次。因此对于至少要执行一次重复结构的程序段,建议使用dowhile语句,而对于其他的重复结构的程序段,可使用for或while语句。 由于for语句有三个表达式,可分别用于循环变量初始化、循环结束条件和循环控制变量的更新,所以用得最多的是for语句,其次是while语句,而dowhile语句相对于前两种语句用得少一些。,合理使用循环语句,合理使用循环语句,可优化程序结构,精简程序。例如,例5.9 再用while和dowhile语句实现:,#include void main(void) char c; cout“输入字符串:n; cin.get(c); while(c!=n) coutc; cin.get(c); coutc; ,#include void main(void) char c; cout“输入字符串:n; do cin.get(c); coutc; while(c!=n); ,从例5.9的三个程序可见,本例用dowhile语句时,程序最简,其次为for语句,再次为while语句。,循环的嵌套及其应用,循环的嵌套:循环的内嵌语句也可以是循环语句。 例5.10 输出1000以内所有完数。“完数”是指与其因子之和相等的数。例如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。,#include void 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%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语句,但考虑到有时不得不改变程序执行的流程,C+语言提供了功能受到限制的转向语句break和continue来替代goto语句。,break语句,格式:
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号