C程序设计第五章.ppt

上传人:啊飒飒 文档编号:14910497 上传时间:2022-02-24 格式:PPT 页数:39 大小:217KB
返回 下载 相关 举报
C程序设计第五章.ppt_第1页
第1页 / 共39页
C程序设计第五章.ppt_第2页
第2页 / 共39页
C程序设计第五章.ppt_第3页
第3页 / 共39页
C程序设计第五章.ppt_第4页
第4页 / 共39页
C程序设计第五章.ppt_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《C程序设计第五章.ppt》由会员分享,可在线阅读,更多相关《C程序设计第五章.ppt(39页珍藏版)》请在三一文库上搜索。

1、第五章.分支结构程序设计,关系运算符、逻辑运算符与关系表达式分支结构语句程序设计举例,5.1 关系运算符和关系表达式,6 种关系运算符: (小于) (小于或等于) (大于) (大于或等于) (等于) ! (不等于),一、关系运算符及其优先次序,优先级相同(高),优先级相同(低),结合性:自左向右,5.1 关系运算符和关系表达式,一、关系运算符及其优先次序,与其它运算符优先级的比较:,例如: c=da+b,等效于:c=(d(a+b),1. 什么是关系表达式?,二、关系表达式,如:(ab)(by 、s+fd,2. 关系表达式的值,运算结果逻辑值 1“真” ,0“假”,如: 设 a=3, b=2,

2、c=1 求下面关系表达式 的值:,cb (a-b) = = 1 b+cbc,值为,值为,值为,如果关系运算对象的类型不同,也要先进行类型转换。,5.2 逻辑运算符和逻辑表达式,3种逻辑运算符: ! (逻辑非) & (逻辑与) | (逻辑或),一、逻辑运算符及其优先次序,优先级,(高),(低),如: !a a为真,则!a为假。 a|b a、b之一为真,则a|b为真。 a&b a、b 同时为真,则 a&b 为真。,逻辑运算赋与逻辑表达式,5.2 逻辑运算符和逻辑表达式,与其它运算符优先级的比较:,一、逻辑运算符及其优先次序,(高),(低),例如:c=da+b&ab,等效于: c=(d(a+b)&(

3、ab),1. 什么是逻辑表达式?,二、逻辑表达式,用逻辑运算符将逻辑运算对象连结起来的式子。,如:(ab)&(bb,2. 逻辑表达式的值,运算结果逻辑值(假为0、真为1只有两种取值),如: 53 & 2 | 83 & 84-!0,值为 1,值为,运算对象以数值非0为真、0为假,值为 0,逻辑运算赋相应的运算对象连接起来,运算对象可以是:关系表达式或逻辑量逻辑表达式的求解:自左向右扫描表达式,只要能够判断出表达式的值时就停止运算。 如: a&b&c , a|b|c a=1,b=2,c=3,d=4,m=n=1 (m=ab) & (n=cd) m=? n=?,5.3 if语句,1. if (表达式)

4、 语句,一、if 语句的三种形式,执行过程: 当表达式的值为“真”(非零)时,执行语句,否则,不执行语句。,如: if ( x y ) z = x;,2. if (表达式) 语句1 else 语句2,执行过程: 当表达式的值为“真”(非零)时,执行语句1,否则,执行语句2。,如: if (xy) z=x ; else z=y ;,3. if (表达式1) 语句1 else if(表达式2) 语句2 else if(表达式3) 语句3 : else if(表达式m) 语句m else 语句n,如:if (grade=85) level=A; else if (grade=70) level=B;

5、 else if (grade=60) level=C; else level=D;,if 语句说明:, if后面的表达式一般为逻辑表达式或关系表 达式,也可以是任意数值类型表达式。,该语句是合法的:if(3) printf(“ok!”);, if 语句中的“语句”为一个简单语句或复合语句。,如:下面程序段是否有错?,if (x=0) printf(“X is positive.”); x+;else printf(“X is negative.”);,if (x=0) printf(“X is positive.”); x+;else printf(“X is negative.”);,请区

6、分 if (x = =1) 与 if (x=1) 的不同。,例exp5_1 输入两个数,按数值将其按大小顺序输出.#include main() float a,b,t; scanf(“%f,%f”, 要点:交换两个数据的方法,例exp5_2 输入三个数按大小顺序输出.#include main()float a,b,c,t;if(ab) t=a;a=b;b=t;if(ac) t=a;a=c;c=t;if(bc) t=b;b=c;c=t;printf(“%5.2f,%5.2f,%5.2f”,a,b,c);,二、if 语句的嵌套,在 if 语句中又包含一个或多个if 语句称为 if 语句的嵌套。

7、,一般形式:,if (条件1) if (条件2)语句1 else 语句2else if (条件3)语句3 else 语句4,内嵌if,内嵌if,如:if(x0) if(y0) printf(x0,y0); else printf(“x0,y0) printf(“x0); else printf(“x=0, y=0”);,嵌套使用要点1、if语句中if与else的配对关系为:else总是与它上面的最近的if配对.书写格式的缩进与否与它们之间的配对无关.例如: if() if()语句块1 else语句块2这时的else配对的对象为内层的if,而不是外层的if.2、要实行强行的配对关系可以利用 。

8、如:if() if()语句块1 else 语句块2,else与if的匹配原则:一个else应与其之前距离最近且没有与其它else配对的if 配对。,if (n6) if (n12) printf(“6n12”);else printf(“n=6”);,if (n6) if (n12) printf(“6n12”);else printf(“n=6”);,缩 排,#inclde main() int x; scanf(“%d”, ,例exp5_3 有一函数:-1(x0)main() int x,y; scanf(“%d”, printf(“x=%d,y=%dn”,x,y):,四、条件运算符和条件

9、表达式,如:max= (ab) ? a : b ; 若 a=3, b=2, 则 max=?,如: (ab) ? a : b,目的简化 if 语句。,C语言中唯一一个三目运算符,1.条件运算符的优先级:,算数运算符=关系运算符=逻辑运算符(除!),赋值运算符=条件运算符,如:x = a+bc & cd ? a+b : d,等效于: x = (a+b)c) & (cd) ? (a+b) : d),2.条件运算符的结合方向: 自右至左,如:ab ? a : cd ? c : d,等效于:ab ? a : (cd ? c : d),使用要点,3.表达式2,表达式3也可以是赋值表达式和函数表 达式。 如

10、 ab?(a=100):(b=100) ab? prinf(“%d”,a): printf(“%d”,b)4.表达式1的类型可以与表达式2和表达式3的类型不同,表达式2和表达式3的类型也可以不同。 如 x? a:b xy? 1:1.5,思考:输入一个字符,判断是否是大写字母,如果是,转成小写字母;如果不是,不转换。然后输出最后得到的字符。,5.4 switch 语句,一般形式:,switch(表达式) case 常量表达式1:语句序列1 break; case 常量表达式2:语句序列2 break; : case 常量表达式n:语句序列n break; default :语句序列n+1 ,执行

11、过程:,用break语句处理后的程序段:,switch(grade) case A : printf(“85100 ”); break; case B : printf(“7084 ”); break; case C : printf(“6069 ”); break; case D : printf(“60 ”); break; default : printf(“error ”); ,若gread= A,输出结果又是什么?,85100,完整程序 :,main() char grade; printf(“Input grade(A,B,C,D):”); scanf(“%c”, ,流程图为:,g

12、rade,输出 “85100”,输出 “60”,输出 “60-69”,输出 “error”,输出 “70-84”,使用要点1.switch中的表达式可以是整型或字符型表达式。 (也可以是枚举类型,新标准的c语言允许为任意类型.)2.每个常量表达式的值必须各不相同,否则将会出现矛盾.3.当表达式的值与case后面的常量表达式值相等时就执行此case后面的语句.4.“case 常量:”只起语句标号的作用。5.break语句在switch中的作用:强行跳出switch体转到其它某条语句,每个case后面应有一个break语句(否则程序的执行顺序将改变),default分支后的break可以省略。6.

13、各个case出现的先后顺序不影响程序的执行结果.7.多个case可以执行一组语句.,例exp5_4:写一程序判定某一年是否为闰年。闰年的判定:某年能被4整除但不能被100整除或者能被4整除,又能被400整除.,例exp5_4:#include 请同学们考虑程序有无main() 其它简化形式 int year,leap; scanf(“%d”,,main( ) int year, leap=0; scanf(“%d”, ,Exp5_7 已知基本运费、货重,以及路程(s)和折扣的关系标准如下:,s250km 没有折扣 250s500 %2折扣 500s1000 5%折扣 1000s2000 8%折

14、扣 2000s3000 10%折扣 3000s 15%折扣,算法:先按距离的250倍数进行分类,求每类的折 扣,再按公式计算。,编程序,计算运费。设基本运费p、货物重量w、距离s和折扣d。则总运费的计算公式为: f=p*w*s*(1-d),250 500 1000 2000 3000,s,0,161412108642,折扣的变化点都是250的倍数 . c=s/250 代表250的倍数。,1 2 4 8 12 c,总运费的计算公式为: f=p*w*s*(1-d),程序为: main( ) int c,s; float p, w, d , f ; scanf(“%f , %f , %d”, /*7

15、50s1000*/ case 4: /*1000s1250*/ case 5: /*1250s1500*/,case 6: /*1500s1750*/ case7: d=8 ; break ; /*1750s2000*/ case8: /*2000s2250*/ case9: /*2250s2500*/ case10: /*2500s2750*/ case11: d=10 ; break; /*2750s3000*/ case12: d=15 ; break; /*3000s*/ f=p*w*s*(1-d/100.0) ; printf(“freight=%15.4f ”, f ) ; ,运行

16、情况:输入:100,20,300 结果:freight= 588000.0000,课后题: 求 ax2+bx+c=0 方程的解 1、a=0 ,方程不是二次方程 2、b2-4ac=0, 有两个相等的实根 3、b2-4ac0, 有两个不相等的实根 4、b2-4ac0, 有两个共轭复根 5、如何判断实数为零(或大于零,或小于零) a=0 fabs(a)=1e-6,特殊条件的处理,#includemain() else if( disc1e-6) float a,b,c,d,disc,x1,x2,realpart,imapart; x1=(-b+sqrt(disc)/(2*a); scanf(“%f,%f,%f”,

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

当前位置:首页 > 科普知识


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