《高级语言程序设计(c)5流程设计.ppt》由会员分享,可在线阅读,更多相关《高级语言程序设计(c)5流程设计.ppt(52页珍藏版)》请在三一办公上搜索。
1、C语言流程设计,梁春燕华电信息管理教研室,2,主要内容,运算符和表达式(续)结构化程序设计选择结构程序设计循环结构程序设计辅助控制语句小结上机作业4,运算符和表达式(续),逻辑运算符与表达式条件运算符与表达式,4,逻辑运算符种类:!&|逻辑运算真值表,C语言中,运算量:0表示“假”,非0表示“真”,运算结果:0表示“假”,1表示“真”,逻辑运算符和表达式,5,例 ab&xy a=b|x=y!a|ab,优先级:,结合方向:,/(a=x)&(x=b),/(ab)&(xy),/(a=b)|(x=y),/(!a)|(ab),逻辑运算符和表达式,6,例 a=4;b=5;!a a&b a|b!a|b 4&
2、0|2 53&2|84-!0 c&d,值为1,值为0,值为1,值为1,值为1,值为1,/(53)&2|(8(4-(!0)值为1,逻辑运算符和表达式,7,短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符,例 a(m=ab)&(n=cd),/结果m=0,n=1,逻辑运算符和表达式,8,一般形式:expr1?expr2:expr3执行过程功能:相当于条件语句,但不能取代一般if语句,例 求 a+|b|printf(“a+|b|=%dn”,b0?a+b:a-b);,例(a=b)?Y:N(x%2=1)?1:0(x=0)?x:-x
3、(c=a&c=z)?c-a+A:c,条件运算符可嵌套 如 x0?1:(x0?-1:0)优先级:13,结合方向:自右向左 如 ab?a:cd?c:d ab?a:(cd?c:d)expr1、expr2、expr3类型可不同,表达式值取较高的类型,例 x?a:b/x=0,表达式值为b;x0,表达式值为a xy?1:1.5/xy,值为1.0;xy,值为1.5,条件运算符与表达式,9,运算符的优先级(附录C),初等运算符单目运算符算术运算符关系运算符逻辑运算符(不含!)条件运算符赋值运算符逗号运算符,结构化程序设计,11,结构化程序设计基本思想:任何程序都可以用三种基本结构表示,限制使用无条件转移语句(
4、goto)结构化程序:由三种基本结构反复嵌套构成的程序优点:结构清晰,易读,提高程序设计质量和效率三种基本结构顺序结构,结构化程序设计,12,二分支选择结构,多分支选择结构,选择结构,13,当型循环结构,直到型循环结构,注:A,B,A1.An可以是一个简单语句,也可以是一个基本结构,循环结构,选择结构程序设计,15,if语句(条件选择语句)if语句的三种形式形式一:格式:if(expression)statement执行过程:,例:if(xy)printf(“%d”,x);,形式二:格式:if(expression)statement1 else statement2执行过程:,例:if(xy
5、)max=x;else max=y;,选择结构程序设计,16,形式三:格式:,if(expr1)statement1else if(expr2)statement2else if(expr3)statement3.else statement,执行过程:,例:if(salary1000)index=0.4;else if(salary800)index=0.3;else if(salary600)index=0.2;else if(salary400)index=0.1;else index=0;,17,如:if(a=b,if后面的表达式类型任意,语句可以是复合语句 if(x)if(x!=0)
6、if(!x)if(x=0),例 考虑下面程序的输出结果:#include main()int x,y;scanf(“%d,%d”,Compile Error!,说明:,18,一般形式:,if语句嵌套,19,#include main()int x,y;printf(Enter integer x,y:);scanf(%d,%d,运行:Enter integer x,y:12,23 XY Enter integer x,y:12,12 X=Y,例 输入两数并判断其大小关系,20,缺省 时,else总是和它上面离它最近的未配对的if配对,if else 配对原则:,21,修改:if(a=b)if(
7、b=c)printf(“a=b=c”);else printf(“a!=b”);,实现if else 正确配对方法:加,实现if else 正确配对方法,例:if(a=b)if(b=c)printf(“a=b=c”);else printf(“a!=b”);,22,一般形式:,switch(表达式)case E1:语句组 1;break;case E2:语句组 2;break;.case En:语句组 n;break;default:语句组;break;,执行过程:,switch语句(开关分支语句),23,E1,E2,En是常量表达式,且值必须互不相同语句标号作用,必须用break跳出case
8、后可包含多个可执行语句,且不必加 switch可嵌套多个case可共用一组执行语句,如:case A:case B:case C:printf(“score60n”);break;.,说明:,24,例 switch(score)case 5:printf(“Very good!”);case 4:printf(“Good!”);case 3:printf(“Pass!”);case 2:printf(“Fail!”);default:printf(“data error!”);,运行结果:score为5时,输出:Very good!Good!Pass!Fail!data error!,例子,2
9、5,#include main()int c;printf(Enter m or n or h or other:);c=getchar();switch(c)case m:printf(nGood morning!n);break;case n:printf(nGood night!n);break;case h:printf(nHello!n);break;default:printf(nBye!n);break;,例子 根据输入字母输出字符串,循环结构程序设计,27,概述C语言可实现循环的语句:用goto 和 if 构成循环while 语句do while 语句for 语句goto语句及
10、用goto构成循环goto语句一般格式:,goto 语句标号;.标号:语句;,循环结构程序设计,28,功能:无条件转移语句 说明:标号用标识符表示,不能用整数作标号标号只能出现在goto所在函数内,且唯一标号只能加在可执行语句前面限制使用goto语句,循环结构程序设计,29,#include main()int i,sum=0;i=1;loop:if(i=100)sum+=i;i+;goto loop;printf(%d,sum);,sum=0+1sum=1+2=3sum=3+3=6sum=6+4=10sum=4950+100=5050,例 用if 和goto语句构成循环,30,一般形式:,w
11、hile(表达式)循环体语句;,执行流程:,while语句,31,特点:先判断表达式,后执行循环体说明:循环体有可能一次也不执行循环体可为任意类型语句下列情况,退出while循环条件表达式不成立(为零)循环体内遇break,return,goto无限循环:while(1)循环体;,While语句特点和说明,32,用while循环求 1-100的和。,#include main()int i,sum=0;i=1;while(i=100)sum=sum+i;i+;printf(%d,sum);,例子,33,#include main()int i=1;while(i=10)printf(%d*%d
12、=%dn,i,i,i*i);i+;,运行结果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100,例 显示110的平方,34,一般形式:,do 循环体语句;while(表达式);,执行流程:,dowhile语句,35,特点:先执行循环体,后判断表达式说明:至少执行一次循环体dowhile可转化成while结构,dowhile语句特点和说明,36,一般形式:,for(expr1;expr2;expr3)循环体语句;,执行流程:,for语句,for语句,37,for(循环变量赋初值;循环条件;循环变量增值)循环体语句;,说明:f
13、or语句中expr1,expr2,expr3 类型任意,都可省略,但分号;不可省无限循环:for(;)for语句可以转换成while结构,expr1;while(expr2)循环体语句;expr3;,for语句一般应用形式,38,例:#include main()int i=0;for(i=0;i10;i+)putchar(a+i);,运行结果:abcdefghij,例:#include main()int i=0;for(;i10;i+)putchar(a+i);,例:#include main()int i=0;for(;i10;)putchar(a+(i+);,例:#include ma
14、in()int i=0;for(;i10;putchar(a+i),i+);,例子,39,三种循环可互相嵌套,层数不限外层循环可包含两个以上内循环,但不能相互交叉嵌套循环的执行流程,(1)while()while().,(2)do do while();.while();,(3)while()do while();.,(4)for(;)do while();while().,嵌套循环的跳转禁止:从外层跳入内层跳入同层的另一循环向上跳转,循环的嵌套,40,for(i=1;i10;i+)for(j=1;j10;j+)printf(j=9)?%4dn:%4d,i*j);,循环的嵌套(图解),辅助控制
15、语句,42,辅助控制语句,break语句功能:在循环语句和switch语句中,终止并跳出循环体或开关体说明:break只能终止并跳出最近一层的结构break不能用于循环语句和switch语句之外的任何其它语句之中,43,辅助控制语句(break),44,辅助控制语句(break),45,辅助控制语句(break),#include main()int i=1;while(i=10)if(i=5)break;printf(%d*%d=%dn,i,i,i*i);i+;,运行结果:1*1=12*2=43*3=94*4=16,46,功能:结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环
16、体的判断仅用于循环语句中,continue语句,47,continue语句,#include main()int i=1;for(;i=10;i+)if(i=5)continue;printf(%d*%d=%dn,i,i,i*i);,运行结果:1*1=12*2=43*3=94*4=166*6=367*7=498*8=649*9=8110*10=100,小结,49,小结,逻辑运算符和表达式;条件运算符和表达式;结构化程序设计的三种基本结构:顺序、选择、循环;选择结构程序设计:if语句、switch语句;循环结构程序设计:while 语句、do while 语句、for 语句;辅助控制语句:break语句、continue语句。,50,上机作业4,试验目的学会正确使用逻辑运算符和表达式;熟练掌握if语句和switch语句;熟练掌握while 语句、do while 语句和for 语句;学习调试程序。,51,上机作业4,试验内容编写程序,根据输入的百分制成绩,输出相应的成绩等级A、B、C、D、E(习题5.6):要求:分别使用if语句和switch语句来实现;如果输入出错,给出出错信息。猴子吃桃问题(习题6.10):题目改为猴子每天吃了前一天剩下的一半后,再吃两个。,END,