谢丽聪老师C语言课件-5分支结构程序-2009.ppt

上传人:本田雅阁 文档编号:2096634 上传时间:2019-02-13 格式:PPT 页数:34 大小:335.51KB
返回 下载 相关 举报
谢丽聪老师C语言课件-5分支结构程序-2009.ppt_第1页
第1页 / 共34页
谢丽聪老师C语言课件-5分支结构程序-2009.ppt_第2页
第2页 / 共34页
谢丽聪老师C语言课件-5分支结构程序-2009.ppt_第3页
第3页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《谢丽聪老师C语言课件-5分支结构程序-2009.ppt》由会员分享,可在线阅读,更多相关《谢丽聪老师C语言课件-5分支结构程序-2009.ppt(34页珍藏版)》请在三一文库上搜索。

1、第五章 分支结构程序设计,5.1 关系运算符和表达式 5.2 逻辑运算符和表达式 5.3 逻辑表达式的跳跃 5.4 if语句 5.5 switch语句,5.1 关系表达式,由关系运算符、圆括号把两个表达式连接起来的式子。 表示条件 若所表示的条件成立、则其值为1(非0)、否则其值为0。 关系运算符:、=、=、!= 例: a=2 、39 、a != ( a=8 ) 、 x+(y=3)=k*z 、(a!=3)(kl),97,8,表达式 值为1,优先,成立为1 不成立为0,非=,注意:数学中多个条件,例 abcd 应表示为 ab & bc & cd 不能顺手也写为 abcd 关系运算符都是双目运算符

2、,其结合性均为左结合。关系运算符的优先级低于算术运算符,高于赋值运算符。 在六个关系运算符中,,=的优先级相同,高于=和!=,=和!=的优先级相同。,5.2 逻辑表达式:,由逻辑运算符、圆括号把表达式连接起来的式子 表示条件 若所表示的条件成立、其值为1(非0)、否则其值为0 逻辑运算符:& (与) 、| (或)、!(非) &和|均为双目运算符,具有左结合性。!为单目运算符,具有右结合性。 逻辑运算符和其它运算符优先级的关系可表示如下: !(非)&(与)|(或) “&”和“|”低于关系运算符,“!”高于算术运算符。,按照运算符的优先顺序可以得出: ab & cd 等价于 (ab)&(cd) !

3、b=c|dc&x+yc)&(x+y)b),例 : 设x=0,y=2,a=8,k=-1,q=1,z=1,则 1、x+y3 & a=8 23 &1 0 &1 0 2、x+y & a 2 &97 1 3、x+(y=3)=k*z | !a 0+3=-1 | !a 0|0 0 4、(x!=7) | a 0!=7|97 1|97 1 5、! ( x+y3 & a=8 ) !(23&1) !(0&1) !0 1 6、! ( k*q ) !(-1) 0 7、!x !(1) !(0) 1,5.3 逻辑表达式的跳跃,作第一个,知道结果,后面不作,如: & &,非0,不算,0,要算,0,不 算,非0,要 算,1、执

4、行 int a,b,c; a=b=c=0; + +a|+ +b 后a、b值分别为0、6,a=1 停止不算,值为 0 赋给a, 停止不算,3、执行 int a,b,c;a=b=c= - 1; + +a 后a、b、c值分别为0、-1、0,1,a=0,2,不算,值为0,3,c=0,4,整体为0,例1:,main() char c=k; int i=1,j=2,k=3; float x=3e+5,y=0.85; printf(“%d,%dn“,!x*!y,!x); printf(“%d,%dn“,x|i 运行结果:0,0 1,0 0,1,0,X为非0,为非0,后面不算,为0,后面不算,5.4 选择结构

5、(if 语句),5.4.1 if语句的三种形式 1、第一种形式为基本形式: if if(表达式) 语句 语义:如果表达式的值为真,则执行其后的语句,否则不执行该语句。其过程可表示为下图。,表达式可以是任意合法表达式,后面不能加;,例2:void main() int a,b,max; printf(“n input two numbers: “); scanf(“%d %d“, 输入:23 46 输出:max=46,此语句用于提示输入,max=23,max=46,例3:void main() int a,b,c,t; printf(“n input two numbers: “); scanf

6、(“%d %d %d “ , 输入:1 6 2 输出:6 2 1,实现数的互换,功能:输入三个数,按照从大到小顺序输出,例4:从键盘输入一个字符,判断它是否小写字母。若是,将其转换成大写字母,否则不进行转换,作后输出该字母。 #include main() char c,a; c=getchar(); if(c=z ) a=c; /*判断非小写字母情况*/ if(c=a) a=c-32; *判断是否是小写字母情况*/ printf(“%cn“,a); ,main() char c; c=getchar(); if(c=a)c-=32; printf(“%cn“,c);,2、第二种形式为: if

7、-else if(表达式) 语句1; else 语句2; 语义:如果表达式的值为真,则执行语句1,否则执行语句2 。,后面不能加;,void main() int a, b; printf(“input two numbers: “); scanf(“%d %d“, 输入:23 46 输出:max=46,输入两个整数,输出其中大数,例2的改写,3、第三种形式为if-else-if形式: if(表达式1) 语句1; else if(表达式2) 语句2; else if(表达式3) 语句3; else if(表达式m) 语句m; else 语句n;,语义: 依次判断表达式的值,当出现某个值为真时,

8、则执行其对应的语句。然后跳到整个if语句之外继续执行程序。 如果所有的表达式均为假,则执行语句n。然后继续执行后续程序。,后面不能加;,此为真,做语句1,其它语句都不做,上面的语句为以下三种格式: 1、空语句 2、一个语句(不引起转移) 3、前后加大括号的语句(复合语句),也叫程序段,如: int a; float b; a=3; b=7.0;,;,允许在复合语句前部定义变量,只能在复合语句中使用,int a; a=3; float b; b=7.0;,变量要在最前面定义,不能写成,#include“stdio.h“ void main() 输入:A char c; 输出:This is a

9、capital letter c=getchar(); if(c=0 ,例5,4、在使用if语句中应注意以下问题: 1)在三种形式的if语句中,在if之后均为表达式。 该表达式通常是逻辑表达式或关系表达式, 但也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量。 例如: if(a=5) 语句; if(b) 语句; 都是允许的。只要表达式的值为非0,即为“真”。 如在: if(a=5); 中表达式的值永远为非0,所以其后的语句总是要执行的,当然这种情况在程序中不一定会出现,但在语法上是合法的。,又如,有程序段: if(a=b) printf(“%d“,a); else printf(“a=

10、0“); 本语句的语义是,把b值赋予a,如为非0则输出该值,否则输出“a=0”字符串。这种用法在程序中是经常出现的。,=为赋值运算符,比较运算符为=,2)在if语句中,条件判断表达式必须用括号括起来,在语句之后必须加分号。 3)在if语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用括起来组成一个复合语句。但要注意的是在之后不能再加分号。 例如: if(ab) a+;b+; else a=0;b=10;,if(ab) a+;b+;; else a=0;b=10;;,不能写成,5.4.2 条件运算符和条件表达式,在条件语句中,只执行单个的赋值

11、语句时,可使用条件表达式来实现。 条件运算符为?和:,它是一个三目运算符,即有三个参与运算的量。 条件表达式的一般形式为: 表达式1? 表达式2 : 表达式3 求值规则为:如果表达式1的值为真,则以表达式2 的值作为条件表达式的值,否则以表达式2的值作为整个条件表达式的值。,非 0,0,例如条件语句: if(ab) max=a; else max=b; 可用条件表达式写为: max=(ab)?a:b; 执行该语句的语义是: 如ab为真,则把a赋予max, 如ab为假,则把b 赋予max。,使用条件表达式时,还应注意以下几点: 1)条件运算符的运算优先级低于关系运算符和 算术运算符,但高于赋值符

12、。 因此:max=(ab)?a:b 可以去掉括号而写为 max=ab?a:b 2)条件运算符?和:是一对运算符,不能分开 单独使用。 3)条件运算符的结合方向是自右至左。 例如:ab?a:cd?c:d 应理解为 ab?a:(cd?c:d) 这也就是条件表达式嵌套的情形,即其中的表达式3又是一个条件表达式。,例6:计算,方法一: void main( ) float x,y; scanf (”%f ”, ,表达式,成立值为1,y=x3 ? x*x+2 : 3*x+7*x*x;,例7:从键盘输入任意的两个实数,按从小到大顺序输出这两个数,请编程实现。 void main( ) float a,b;

13、 scanf (”%f%f ”,代替,复合语句可以定义变量,a=a+b;b=a-b;a=a-b t=a;a=b;b=t,例8:P105 5.5 计算,方法一: main( ) float x,y; scanf (”%f ”,1=x &可省略吗?,可以,方法二:,void main( ) float x,y; scanf (”%f ”, , 、 可省略,y= x1? x :( x10 ? 2*x-1 : 3*x-11);,(、)可省略,方法三:,if (x10) if (x1) y=x; else y=2*x-1; else y=3*x-11;, 后不能加;, 、 和 (、) 可一起省略,y= x10? ( x1 ? x :2*x-1 ): 3*x-11;,若上面分段函数改为 则程序改为 void main( ) float x,y; scanf (”%f ”, ,此语句出错与否都输出,此程序有否缺陷?,程序应改为 void main( ) float x,y; scanf (”%f ”,

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

当前位置:首页 > 其他


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