《[精选]第3章C程序的流程设计》由会员分享,可在线阅读,更多相关《[精选]第3章C程序的流程设计(43页珍藏版)》请在金锄头文库上搜索。
1、,第三章 C程序的流程控制,C语言的结构,C语言的三大结构:顺序结构、选择结构和循环结构,本章内容提要,本节知识点,重点,难点,前面学过的运算符和表达式?,比较?,并且?,判断是针对命题的“真”、“假”进行的。,3.1.1 命题的“真”、“假”与C语言中的逻辑值,例如,下面一些命题: 1、小强是个大学生 2、今天下雨了 3、a3 4、abc 5、a5或c4,关系表达式和逻辑表达式是C语言中描述命题的两种基本形式,关系运算是逻辑运算中比较简单的一种,“关系运算”就是“ 比较运算”,指对两个表达式值的大小比较。,3.1.2 关系运算符,C语言中提供有如下6个关系运算符: ,=, ,=,= =,!=
2、,例3.1 a3,3.1.2 关系表达式,用关系运算符将两个表达式(算术、关系、逻辑、赋值表达 式等)连接起来所构成的表达式,称为关系表达式。,例3.2: cab ab=c a=bc a=bc,等效于 c(ab),等效于(ab)=c,等效于a=(bc),等效于a=(bc),1、表达式5278在数学上允许否?在C中是否允许?,关系表达式注意问题:,按自左而右的结合求解: 52值为1; 17值为0; 08的值为0。 即整个关系表达式的值为0。,2、由于关系表达式的值是整型数0或1,故也可以将其 看成是一种整型表达式。例如,若有: int i=1, j=7,a; a=i+(j%4!=0);,关系表达
3、式注意问题:,这种表达式的含义不易被理解,初学时不宜多用,3、在判定两个浮点数是否相等时,由于存储上的误差,会 得出错误的结果。例如: 1.0/3.0*3.0=1.0,关系表达式注意问题:,该关系表达式的值为0(假),并不为1(真)。所以应避免 对两个实数表达式作“相等”或“不相等”的判别。,上式可改写为: fabs (1.0/3.0* 3.0-1.0)1e-5 fabs是求绝对值函数。只要1.0/3.0*3.0与1.0 之间的差小于10-5(或一个其它的很小的数),就认为 1.0/3.0*3.0与1.0相等。,4、要表示x在区间a,b中,在数学中使用表达式axb 可否?在C语言中使用表达式“
4、a=x=b”可否?,关系表达式注意问题:,假设a=0;b=0.5。若x=0.3,上式可改写为: a=x 并且 x=b,3.1.3 逻辑运算符与逻辑表达式,3.1.3 逻辑运算符,3.1.3 逻辑表达式,用逻辑运算符(逻辑与、逻辑或、逻辑非)将关系表达式 或逻辑量连接起来构成逻辑表达式。,例3.3: ab,引例:如果学生成绩(score)不低于60分,则输出“合格”,3.2.1 双分支结构if语句,格式: if(表达式) 语句1 ; else 语句2;,引例:如果学生成绩(score)不低于60分,则输出“合格”,否则输出“不合格”。,3.2.2 多分支结构if语句,引例:如果学生成绩(scor
5、e)不低于90分,则输出“优秀”;如果80score90,则输出“良好”;如果70score80 ,则输出“中等”;如果60score70 ,则输出“合格”;如果score60,则输出“不合格”。,3.2.2 多分支结构if语句,分析一: 单分支结构,if(表达式) 语句;,特点:满足条件即执行语句,程序段: if(score=90) printf(“优秀”),if(score=80 能运行否?,说明:,2、else子句不能单独使用,必须是if语句的一部分,与if配对使 用。,例如:if(a) printf(“%c”,a); else printf (“%c”,b); else printf
6、(“%c”,c);,说明:,3、在if和else后面可以只含一个内嵌的操作语句,也可以有多个 操作语句构成的语句块(复合语句)。语句块用 括起来。,例如:求边长分别为a,b,c的三角形面积?,if(a+bc,说明:,4、if嵌套语句中,应当注意if与else的配对关系,else总是与它 上面的最近的未配对的if配对。特别是if/else子句数目不一样时,本意,实际,说明:,5、if嵌套语句解决匹配问题方法,(1)利用空语句使if子句数量 与else子句数量相同。,(2)利用 。将没有else子 句的if语句用 括起来,思考题一:,有以下几个程序,请判断哪个是正确的?,思考题一:,程序1: ma
7、in() int x,y; scanf(d,&x); if(x0) y=-1; else if(x=0) y=0; else y=1; printf(x=d,y=dn,x,y); ,思考题一:,程序2: main() int x,y; scanf(d,&x); if (x=0) if (x0)y= 1; elsey= 0; else y=-1; printf(x=d,y=dn,x,y); ,思考题一:,程序3: main() int x,y; scanf(d,&x); y=-1; if(x!=0) if(x0)y=1; else y=0; printf(x=d,y=dn,x,y); ,思考题一
8、:,程序4: main() int x,y; scanf(d,&x); y=0; if(x=0) if(x0)y=1; else y=-1; printf(x=d,y=dn,x,y); ,思考题二:,输入两个实数,按数值由小到大的次序输出这两个数。,输入三个实数,按数值由小到大的次序输出这三个数。,课堂小结:,关系运算和逻辑运算,选择结构if语句的应用,关系运算符:,=, ,=,= =,!=,逻辑运算符:& , | , !,各种运算符的优先级,表达式综合应用,if语句单分支,ifelse语句双分支,if-else if语句多分支,if语句的嵌套应用,if语句的注意问题,Thank you for coming,演讲完毕,谢谢观看!,