C语言课件05ControlFlow.ppt

上传人:sccc 文档编号:5384436 上传时间:2023-07-02 格式:PPT 页数:25 大小:182.51KB
返回 下载 相关 举报
C语言课件05ControlFlow.ppt_第1页
第1页 / 共25页
C语言课件05ControlFlow.ppt_第2页
第2页 / 共25页
C语言课件05ControlFlow.ppt_第3页
第3页 / 共25页
C语言课件05ControlFlow.ppt_第4页
第4页 / 共25页
C语言课件05ControlFlow.ppt_第5页
第5页 / 共25页
点击查看更多>>
资源描述

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

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

2、(2):if语句的嵌套,if语句中的内嵌语句也可能是if语句。一般形式是:if(表达式1)if(表达式2)语句1 else 语句2else if(表达式3)语句3 else 语句4P9091,if(3):if语句歧义,歧义情形:if(表达式1)if(表达式2)语句1else 语句2解决方案:C规定,else总与最近的未配对的if配对。如果想表达左边这种情形必须采用如下形式:if(表达式1)if(表达式2)语句1else 语句2P9295,返回,条件运算符(1),当if语句中无论表达式为“真”和“假”时,都只执行一个赋值语句,并且赋值语句的左值相同时,C允许使用形式更简单的条件运算符来替代。如:

3、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:bab?a:b+1 等价于 ab?a:(b+1)条件运算符的结合方向为“自右至左”。所以ab?a:cd?c:d等价于 ab?a:(cd?c:d)注意,与(ab?a:c)d?c:d不同。见P96例4.3.12条件表达式中,三个表达式的类型均可不同。

4、当表达式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常量表达式被匹配成功时,将执行其后语句组,执行过程将一直持续到遇见break、return或switch语句的结束“”。,语句形式:while(表达式)语句注意:while的循

5、环体只能包含一个语句,若有多项操作应采用复合语句。while的特点是先判断表达式,后执行循环体;故while语句的循环体可能一次也不被执行。使用while语句经常容易犯的错误是:在循环体中不包含能最终促使循环结束的语句死循环。示例,while,返回,语句形式:do 语句while(表达式);注意do-while语句的特点是先执行循环体,再判断循环条件是否成立。故循环体至少执行一次。示例,do-while(1),把do-while转换成while把while转换成do-while,do-while(2),返回,语句形式:一般形式:for(表达式1;表达式2;表达式3)语句最简单的应用形式:for

6、(循环变量赋初值;循环条件;循环变量增值)语句如: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(;)语句表达式2通常是关系表达式或逻辑表达式。语句部分也可以是空语句,如:for(i=0;i=n;i+);,for(1),没有表达式2,语句中必须有break或return,把for转换成while把while转换成for,for(2),返回,break语句一般形式:break;bre

7、ak可以用在switch语句中,也可用在循环语句中。在循环语句中,break用于终止循环。break不能用于循环语句或switch语句外的任何语句中,这里的循环语句专指while,do-while或for。continue语句一般形式:continue;作用:结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。continue语句和break语句的区别是:continue仅仅结束本次循环,而break则终止整个循环。示例,break与continue,返回,goto语句为无条件转向语句,其一般形式为:goto 语句标号;其中语句标号是一个标识符。goto语句的滥用

8、将使程序流程无规律、可读性差。goto主要用在与if语句一起构成循环结构。或从循环体中跳转到循环体外。例子:实现求n!void main()int n,p,i;scanf(%d,goto语句,返回,多重循环,多重循环是指在某个循环语句的循环体内还有循环语句,这又称为循环的嵌套。三种循环可以自身嵌套,也允许相互嵌套。嵌套时要注意在一个循环体内包含另一个完整的循环结构。,例如,九九乘法表:#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”);,

9、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*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)用两数中较小的数作为因子去除该两数,若均能除尽,表

10、明它就是最大 公约数。否则将它减1后再去除,直到除尽为止。最小公倍数可由两数的乘积除以最大公约数得到。,返回,(2)用辗转相除法:对于两数m和n(设mn),用n去除m,若余数为0,则n为 最大公约数,否则将n作为m,余数作为n,再用n去除m,直到n为0,m即为 最大公约数。例如:m(n)n(m%n)27 18 18 9 9 0,#includevoid 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)pr

11、intf(x is equal to y or x is equal to zn);if(a=b)printf(a=%dn,a);,示例: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:print

12、f(i=%d,in case%dn,i,10);#define J 10int 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分析下列程序的功能:#includevoid main()int num,sum=0,i;printf(“Input number:”);for(i=0;i10;i+)scanf(“%d”,continue;,分析下列程序的输出结果:#includevoid main()int a=7;do switch(a%2)case 1:a-;break;case 0:a-;continue;printf(“%dn”,a);while(a0);,6420,返回,

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号