C语言课件05-ControlFlow.ppt

上传人:本田雅阁 文档编号:2143321 上传时间:2019-02-21 格式:PPT 页数:25 大小:182.51KB
返回 下载 相关 举报
C语言课件05-ControlFlow.ppt_第1页
第1页 / 共25页
C语言课件05-ControlFlow.ppt_第2页
第2页 / 共25页
C语言课件05-ControlFlow.ppt_第3页
第3页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《C语言课件05-ControlFlow.ppt》由会员分享,可在线阅读,更多相关《C语言课件05-ControlFlow.ppt(25页珍藏版)》请在三一文库上搜索。

1、控制流,提纲,分支结构 if 条件运算符 switch 循环结构 while do-while for break与continue goto 多重循环 例题 运算符小结,结束,if(1): if语句的三种形式,语句形式: if (表达式) 语句 if (表达式) 语句1 else 语句2 if (表达式1) 语句1 else if (表达式2) 语句2 else if (表达式n-1) 语句n-1 else 语句n 示例 P8488,此处的语句指单个语句,如果在某个分支中需要执行多个操作,必须使用块语句。 包围表达式的小括号是必须的。 此处的表达式不要求是逻辑表达式或关系表达式,可以是数值表

2、达式(非0表示真,0表示假),这个else 语句n也可以没有,if(2): if语句的嵌套,if语句中的内嵌语句也可能是if语句。 一般形式是: if (表达式1) if (表达式2) 语句1 else 语句2 else if (表达式3) 语句3 else 语句4 P9091,if(3): if语句歧义,歧义情形:if (表达式1) if (表达式2) 语句1 else 语句2 解决方案:C规定,else总与最近的未配对的if配对。 如果想表达左边这种情形必须采用如下形式: if (表达式1) if (表达式2) 语句1 else 语句2 P9295,返回,条件运算符(1),当if语句中无论

3、表达式为“真”和“假”时,都只执行一个赋值语句,并且赋值语句的左值相同时,C允许使用形式更简单的条件运算符来替代。如: if (ab) max=a; else max=b; 等价于 max=(ab)?a:b; 其中,(ab)?a:b为“条件表达式”。 条件运算符要求有3个操作对象,是C语言中唯一的三目运算符。条件表达式的一般形式为: 表达式1?表达式2:表达式3,条件运算符(2),条件运算符优先级高于赋值运算符,但是低于算术运算符。所以 max=(ab?a:b) 等价于 max=ab?a:b ab?a:b+1 等价于 ab?a:(b+1) 条件运算符的结合方向为“自右至左”。所以 ab?a:c

4、d?c:d 等价于 ab?a:(cd?c:d) 注意,与(ab?a:c)d?c:d不同。 见P96例4.3.12 条件表达式中,三个表达式的类型均可不同。当表达式2和表达式3的类型不同时,可能出现类型转换。如:xy?1:1.5,返回,double型,switch,语句形式: switch (表达式) case 常量表达式1: 语句组1 case 常量表达式2: 语句组2 case 常量表达式n: 语句组n default: 语句组n+1 示例 P9798例4.4.1和例4.4.2,返回,表达式可以任意类型,其值将自动转换为整数。 各常量表达式的值必须是整数(或字符),且各不相同。 当某case

5、常量表达式被匹配成功时,将执行其后语句组,执行过程将一直持续到遇见break、return或switch语句的结束“”。,语句形式: while (表达式) 语句 注意: while的循环体只能包含一个语句,若有多项操作应采用复合语句。 while的特点是先判断表达式,后执行循环体;故while语句的循环体可能一次也不被执行。 使用while语句经常容易犯的错误是:在循环体中不包含能最终促使循环结束的语句死循环。 示例,while,返回,语句形式: do 语句 while (表达式); 注意 do-while语句的特点是先执行循环体,再判断循环条件是否成立。故循环体至少执行一次。 示例,do-

6、while(1),把do-while转换成while 把while转换成do-while,do-while(2),返回,语句形式: 一般形式:for (表达式1;表达式2;表达式3) 语句 最简单的应用形式: for (循环变量赋初值;循环条件;循环变量增值) 语句 如:for (i=0; i=n; i+) printf(“%d “, i); 注意: for语句的三个表达式都不是必须的,但作为分隔符的分号却是必须的,下面是一些例子: i=0; for ( ;i=n; i+) printf (“%d “, i); for(i=0; i=n; ) printf(“%d “, i+); for(;

7、;) 语句 表达式2通常是关系表达式或逻辑表达式。 语句部分也可以是空语句,如:for (i=0; i=n; i+) ;,for(1),没有表达式2,语句中必须有break或return,把for转换成while 把while转换成for,for(2),返回,break语句 一般形式:break; break可以用在switch语句中,也可用在循环语句中。在循环语句中,break用于终止循环。 break不能用于循环语句或switch语句外的任何语句中,这里的循环语句专指while,do-while或for。 continue语句 一般形式:continue; 作用:结束本次循环,即跳过循环体

8、中下面尚未执行的语句,接着进行下一次是否执行循环的判定。 continue语句和break语句的区别是:continue仅仅结束本次循环,而break则终止整个循环。 示例,break与continue,返回,goto语句为无条件转向语句,其一般形式为: goto 语句标号; 其中语句标号是一个标识符。 goto语句的滥用将使程序流程无规律、可读性差。 goto主要用在与if语句一起构成循环结构。或从循环体中跳转到循环体外。 例子:实现求n! void main() int n,p,i; scanf(“%d“, ,goto语句,返回,多重循环,多重循环是指在某个循环语句的循环体内还有循环语句,

9、这又称为循环的嵌套。 三种循环可以自身嵌套,也允许相互嵌套。 嵌套时要注意在一个循环体内包含另一个完整的循环结构。,例如,九九乘法表: #include void main( ) int i,j; for(i=1;i=9;i+) for(j=1;j=9;j+) /矩形乘法表 printf(“%d*%d=%dt”,i,j,i*j); printf(“n”); ,for(j=1;j=i;j+) /左下三角形,for( j=i;j=9;j+) /左上三角形, for(j=1;ji;j+) printf(t); for(;j=9;j+) /右上三角形 printf(“%d*%d=%dt”,i,j,i*

10、j); printf(“n”); , for(j=9;ji;j-) printf(“t”); for(j=1;j=i;j+) /右下三角形 printf(“%d*%d=%dt”,i,j,i*j); printf(“n”); ,返回,例题:求最大公约数、最小公倍数,输入两个正整数m和n,求其最大公约数和最小公倍数。,可以用两种方法求解: (1)用两数中较小的数作为因子去除该两数,若均能除尽,表明它就是最大 公约数。否则将它减1后再去除,直到除尽为止。 最小公倍数可由两数的乘积除以最大公约数得到。,返回,(2)用辗转相除法:对于两数m和n(设mn),用n去除m,若余数为0,则n为 最大公约数,否则

11、将n作为m,余数作为n,再用n去除m,直到n为0,m即为 最大公约数。例如: m(n) n(m%n) 27 18 18 9 9 0,#include void main( ) int m,n,x,y; scanf(“%d%d”, ,运算符小结,返回,示例:if(1),下列语句是否正确? if (i0) i+ else i-; if (i0) i+; printf(“i=%dn“, i); ; else i-; if (x=y)|(x=z) printf(“x is equal to y or x is equal to zn“); if (a=b) printf(“a=%dn“, a); ,示

12、例:if(2),输入两个数,并要求按由小到大的次序输出 void main() float a, b, t; scanf(“%f%f“, ,示例:if(3),输入三个数,并要求按由小到大的次序输出(P86例4.3.4) void main() float a, b, c, t; scanf(“%f%f%f“, ,返回,示例:switch,下列程序片段是否正确? int i=10, j=11; switch(i) case j: printf(“i=%d, in case %dn“, i, j); case 10: printf(“i=%d, in case %dn“, i, 10); #def

13、ine J 10 int i=10; switch(i) case J: printf(“i=%d, in case %dn“, i, J); case 10: printf(“i=%d, in case %dn“, i, 10); ,返回,示例:while,输入一个整数,求其阶乘 void main() int n, p, i; scanf(“%d“, ,返回,如果输入小于等于1,循环体将不被执行。 程序的不足之处,对于输入是否非负没有判别。,示例:do-while,输入一个整数,求其阶乘 void main() int n, p, i; scanf(“%d“, ,返回,注意到,初试化部分不能直接设置i=2,这样将多执行一次乘法!,示例:break和continue 分析下列程序的功能: #include void main( ) int num,sum=0,i; printf(“Input number:”); for(i=0;i10;i+) scanf(“%d”, ,continue;,分析下列程序的输出结果: #include void main( ) int a=7; do switch(a%2) case 1:a-; break; case 0:a-; continue; printf(“%dn”,a); while(a0); ,6 4 2 0,返回,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1