《最新谢丽聪老师C语言课件5分支结构程序2》由会员分享,可在线阅读,更多相关《最新谢丽聪老师C语言课件5分支结构程序2(34页珍藏版)》请在金锄头文库上搜索。
1、第五章 分支结构程序设计5.1 5.1 关系运算符和表达式关系运算符和表达式5.25.2 逻辑运算符和表达式逻辑运算符和表达式5.3 5.3 逻辑表达式的跳跃逻辑表达式的跳跃5.45.4 if if语句语句5.55.5 switch switch语句语句谢丽聪老师C语言课件-5分支结构程序(2)-20095.1 5.1 关系表达式关系表达式由由关关系系运运算算符符、圆圆括括号号把把两两个个表表达达式式连连接接起起来的式子。来的式子。表示条件表示条件若若所所表表示示的的条条件件成成立立、则则其其值值为为1(非非0)、否则其值为否则其值为0。关系运算符:关系运算符:、=、=、!=例:例:a=2、3
2、9、a!=(a=8)、x+(y=3)=k*z、(a!=3)(kbcd应表示为应表示为ab&bc&cd不能顺手也写为不能顺手也写为abcd关关系系运运算算符符都都是是双双目目运运算算符符,其其结结合合性性均均为为左左结结合合。关关系系运运算算符符的的优优先先级级低低于于算算术术运算符,高于赋值运算符运算符,高于赋值运算符。在在六六个个关关系系运运算算符符中中,,=的的优优先先级级相相同同,高高于于=和和!=,=和和!=的的优优先级相同先级相同。谢丽聪老师C语言课件-5分支结构程序(2)-20095.2 5.2 逻辑表达式:逻辑表达式:由逻辑运算符、圆括号把表达式连接起来的式子由逻辑运算符、圆括号
3、把表达式连接起来的式子表示条件表示条件表示条件表示条件若所表示的条件成立、其值为若所表示的条件成立、其值为1(非非0)、否则其值为、否则其值为0逻辑运算符:逻辑运算符:逻辑运算符:逻辑运算符:&(与)(与)、|(或)、!(非)(或)、!(非) &和和|均均为为双双双双目目目目运运运运算算算算符符符符,具具有有左左左左结结结结合合合合性性性性。! !为为单单单单目目目目运算符运算符运算符运算符,具有,具有右右右右结结结结合性合性合性合性。逻辑逻辑运算符和其它运算符运算符和其它运算符优优先先级级的关系可表示如下:的关系可表示如下:! !(非)(非)(非)(非)&(&(与与与与)|()|(或或或或)
4、 )“&”“&”和和和和“|”“|”低于关系运算符,低于关系运算符,低于关系运算符,低于关系运算符,“ “!” ”高于算高于算高于算高于算术术术术运算符。运算符。运算符。运算符。 谢丽聪老师C语言课件-5分支结构程序(2)-2009按照运算符的按照运算符的优优先先顺顺序可以得出:序可以得出:ab&cd等价于等价于(ab)&(cd)!b=c|da等价于等价于(!b)=c)|(dc&x+yc)&(x+y)3&a=823&110&1 1 0 02、x+y&a2&9797 1 13、x+(y=3)=k*z|!a0+3=-1|!a0|00 04、(x!=7)|a0!=7|971|971 15、! !(x
5、+y3&a=8)!(23&1)!(0&1)!016、! !(k*q)!(-1)0 07、!x!(1)!(0)1谢丽聪老师C语言课件-5分支结构程序(2)-20095.3 5.3 逻辑表达式的跳跃逻辑表达式的跳跃作第一个,知道结果,后面不作,如:作第一个,知道结果,后面不作,如: &非非非非0 0不算不算不算不算0 0要算要算要算要算0 0不不不不 算算算算非非非非0 0要要要要 算算算算谢丽聪老师C语言课件-5分支结构程序(2)-20091、执行、执行inta,b,c;a=b=c=0;+a|+b&+c;后后a、b、c值分别为值分别为1、0、02、执行、执行inta=5,b=6,x=1,y=2;
6、(a=xy)&(b=xy);后后a、b值分别为值分别为0、6a=1a=1停止不算停止不算停止不算停止不算值为值为值为值为00赋给赋给赋给赋给a a,停止不算停止不算停止不算停止不算 谢丽聪老师C语言课件-5分支结构程序(2)-20093、执行、执行inta,b,c;a=b=c=-1;+a&+b|+c;后后a、b、c值分别为值分别为0、-1、0 1 1a=0a=02 2不算,值为不算,值为不算,值为不算,值为0 03 3c=0c=04 4整体为整体为整体为整体为0 0谢丽聪老师C语言课件-5分支结构程序(2)-2009例例1:main()charc=k;inti=1,j=2,k=3;floatx
7、=3e+5,y=0.85;printf(%d,%dn,!x*!y,!x);printf(%d,%dn,x|i&j-3,ij&xy);printf(%d,%dn,i=5&c&(j=8),x+y|i+j+k); 运行运行运行运行结结结结果:果:果:果:0,00,01,01,00,10,1 0 0X X为非为非为非为非0 0为非为非为非为非0,0,后面不算后面不算后面不算后面不算为为为为0,0,后面不算后面不算后面不算后面不算为为为为1,1,后面要算后面要算后面要算后面要算谢丽聪老师C语言课件-5分支结构程序(2)-20095.4 5.4 选择结构选择结构(if (if 语句语句) )5.4.1if
8、语句的三种形式1、第一种形式、第一种形式为为基本形式基本形式: ifif(表达式表达式)语句语句语语义义:如如果果表表达达式式的的值值为为真真,则则执执行行其其后后的的语语句句,否则不执行该语句。其过程可表示为下图。否则不执行该语句。其过程可表示为下图。表表 达达 式式 可可以以 是是 任任 意意合合 法法 表表 达达式式 , 后后 面面不能加;不能加;谢丽聪老师C语言课件-5分支结构程序(2)-2009例例2:voidmain()inta,b,max;printf(ninputtwonumbers:);scanf(%d%d,&a,&b);max=a;if(maxb)max=b;printf(
9、max=%d,max);输输入:入:2346输输出:出:max=46此语句用于提示输入此语句用于提示输入此语句用于提示输入此语句用于提示输入max=23max=23max=46max=46谢丽聪老师C语言课件-5分支结构程序(2)-2009例例3:voidmain()inta,b,c,t;printf(ninputtwonumbers:);scanf(%d%d%d,&a,&b,&c);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(%d%d%dn,a,b,c);输输入:入:162 输输出:出:621实现数的实现数的互换互
10、换功能:输入三个数,按功能:输入三个数,按功能:输入三个数,按功能:输入三个数,按照从大到小顺序输出照从大到小顺序输出照从大到小顺序输出照从大到小顺序输出谢丽聪老师C语言课件-5分支结构程序(2)-2009例例例例4 4:从从从从键键键键盘盘盘盘输输输输入入入入一一一一个个个个字字字字符符符符,判判判判断断断断它它它它是是是是否否否否小小小小写写写写字字字字母母母母。若若若若是是是是,将将将将其其其其转转转转换换换换成成成成大大大大写写写写字字字字母母母母,否否否否则则则则不不不不进进进进行行行行转转转转换换换换,作作作作后输出该字母。后输出该字母。后输出该字母。后输出该字母。#include
11、#includemain()main() charc,a;charc,a;c=getchar();c=getchar();if(c=z)if(c=z)a=c;a=c;/*/*判断非小写字母情况判断非小写字母情况判断非小写字母情况判断非小写字母情况*/*/if(c=a)if(c=a)a=c-32;a=c-32;* *判断是否是小写字母情况判断是否是小写字母情况判断是否是小写字母情况判断是否是小写字母情况*/*/printf(%cn,a);printf(%cn,a); main()main()charc;charc;c=getchar();c=getchar();if(c=a)c-=32;if(c
12、=a)c-=32;printf(%cn,c);printf(%cn,c);谢丽聪老师C语言课件-5分支结构程序(2)-20092、第二种形式、第二种形式为为: if-else if(表达式表达式) 语语句句1; else 语语句句2;语语义义:如如果果表表达达式式的的值值为为真真,则则执执行行语语句句1,否否则则执行语句执行语句2 。 后后面面不不能能加;加;谢丽聪老师C语言课件-5分支结构程序(2)-2009voidmain()inta,b;printf(inputtwonumbers:);scanf(%d%d,&a,&b);if(ab)printf(max=%dn,a);elseprint
13、f(max=%dn,b); 输输输输入:入:入:入:23 4623 46 输输输输出:出:出:出:max=46max=46 输入两个整数输入两个整数输入两个整数输入两个整数输出其中大数输出其中大数输出其中大数输出其中大数例例2的改写的改写谢丽聪老师C语言课件-5分支结构程序(2)-20093、第三种形式、第三种形式为为if-else-if形式:形式:if(if(表达式表达式表达式表达式1)1)语语语语句句句句1 1;elseif(elseif(表达式表达式表达式表达式2)2)语语语语句句句句2 2;elseif(elseif(表达式表达式表达式表达式3)3)语语语语句句句句3 3; elsei
14、f(elseif(表达式表达式表达式表达式m)m)语语语语句句句句mm;elseelse语语语语句句句句n n;语义:语义:依依次次判判断断表表达达式式的的值值,当当出出现现某某个个值值为为真真时时,则则执执行行其其对对应应的的语语句句。然然后后跳跳到到整整个个if语语句句之之外外继继续续执执行行程程序序。如如果果所所有有的的表表达达式式均均为为假假,则则执执行行语语句句n。然然后后继继续续执执行行后续程序。后续程序。后后面面不不能能加;加;谢丽聪老师C语言课件-5分支结构程序(2)-2009此为真此为真此为真此为真, ,做语句做语句做语句做语句1 1,其它语句都不做其它语句都不做其它语句都不
15、做其它语句都不做谢丽聪老师C语言课件-5分支结构程序(2)-2009上面的语句为以下三种格式:上面的语句为以下三种格式:1、空语句、空语句2、一个语句(不引起转移)、一个语句(不引起转移)3、前后加大括号的语句(复合语句),也、前后加大括号的语句(复合语句),也叫程序段,如:叫程序段,如:inta;floatb;a=3;b=7.0;;允许在复合语句前部定义变量,只允许在复合语句前部定义变量,只允许在复合语句前部定义变量,只允许在复合语句前部定义变量,只能在复合语句中使用能在复合语句中使用能在复合语句中使用能在复合语句中使用inta;inta;a=3;a=3;floatb;floatb;b=7.
16、0;b=7.0;变量要在变量要在变量要在变量要在最前面定最前面定最前面定最前面定义义义义不能写成不能写成谢丽聪老师C语言课件-5分支结构程序(2)-2009#includestdio.h#includestdio.h voidvoid main() main() 输输输输入:入:入:入:A A char c; char c; 输输输输出:出:出:出:ThisisacapitalletterThisisacapitalletter c=getchar(); c=getchar(); if(c32) if(c=0&c=0&c=A&c=A&c=a&c=a&cb)a+;b+;elsea=0;b=10;
17、 if(ab)a+;b+;;elsea=0;b=10;;不能写成不能写成复合语句复合语句复合语句复合语句谢丽聪老师C语言课件-5分支结构程序(2)-20095.4.2条件运算符和条件表达式 在在条条件件语语句句中中,只只执执行行单单个个的的赋赋值值语语句句时时,可可使使用用条件表达式来条件表达式来实现实现。条条件件运运算算符符为为?和和:,它它是是一一个个三三三三目目目目运运运运算算算算符符符符,即即有有三个参与运算的量。三个参与运算的量。条件表达式的一般形式条件表达式的一般形式为为:表达式表达式表达式表达式1 1? 表达式表达式表达式表达式22: 表达式表达式表达式表达式3 3求求求求值值值
18、值规规规规则则则则为为为为:如如果果表表达达式式1的的值值为为真真,则则以以表表达达式式2的的值值作作为为条条件件表表达达式式的的值值,否否则则以以表表达达式式2的的值值作作为为整个条件表达式的整个条件表达式的值值。非非非非0000谢丽聪老师C语言课件-5分支结构程序(2)-2009例如条件例如条件语语句:句:if(ab)max=a;elsemax=b;可用条件表达式写可用条件表达式写为为:max=(ab)?a:b;执执行行该语该语句的句的语义语义是:是:如如ab为为真,真,则则把把a赋赋予予max,如如ab为为假假,则则把把b赋赋予予max。谢丽聪老师C语言课件-5分支结构程序(2)-200
19、9使用条件表达式使用条件表达式时时,还应还应注意注意以下几点:以下几点:1)条件运算符的运算)条件运算符的运算优优先先级级低于关系运算符和低于关系运算符和算算术术运算符,但高于运算符,但高于赋值赋值符。符。因此:因此:max=(ab)?a:b可以去掉括号而写可以去掉括号而写为为max=ab?a:b2)条件运算符)条件运算符?和:和:是是一一对对运算符,不能分开运算符,不能分开单单独使用独使用。3)条件运算符的)条件运算符的结结合方向是合方向是自右至左自右至左。例如:例如:ab?a:cd?c:d应应理解理解为为ab?a:(cd?c:d)这这也也就就是是条条件件表表达达式式嵌嵌套套的的情情形形,即
20、即其其中中的的表达式表达式3又是一个条件表达式。又是一个条件表达式。谢丽聪老师C语言课件-5分支结构程序(2)-2009例例6:计算:计算方法一:方法一:voidmain()floatx,y;scanf(”%f”,&x);if(x3)y=x*x+2;elsey=3*x+7*x*x;printf(”y=%fn”,y); x x2 2 +2(x3)+2(x3)y=y=3x+73x+7x x2 2(x3)(x3)表达式,成立值为表达式,成立值为表达式,成立值为表达式,成立值为1 1y=x3?x*x+2:3*x+7*x*x;谢丽聪老师C语言课件-5分支结构程序(2)-2009例例7:从从键键盘盘输输入
21、入任任意意的的两两个个实实数数,按按从从小小到到大大顺顺序序输出这两个数,请编程实现。输出这两个数,请编程实现。voidmain()floata,b;scanf(”%f%f”,&a,&b);if(ab)a=a+b;b=a-b;a=a-b;/*/*实现实现实现实现a a与与与与b b的互换的互换的互换的互换*/*/printf(”%f,%fn”,a,b);可用语句可用语句if(ab)floatt;t=a;a=b;b=t;if(ab)floatt;t=a;a=b;b=t;代替代替复合语句可以定义变量复合语句可以定义变量复合语句可以定义变量复合语句可以定义变量谢丽聪老师C语言课件-5分支结构程序(2
22、)-2009a=a+b;b=a-b;a=a-bt=a;a=b;b=ta a3+13+1b ba-b=3a-b=3a aa-3=1a-3=1a a3 3b b1 1t t3 3b b3 3a a1 1a a3 3b b1 1谢丽聪老师C语言课件-5分支结构程序(2)-2009例例8:P1055.5计算计算方法一:方法一:main()floatx,y;scanf(”%f”,&x);if(x1)y=x;elseif(1=x&1=x&x10)y=2*x-1;elsey=3*x-11;printf(”y=%fn”,y);表达式表达式表达式表达式1 1表达式表达式表达式表达式2 2非非非非0 00 0语句
23、语句语句语句1 1语句语句语句语句2 2语句语句语句语句3 3非非非非0 00 01=x&1=x&可省略吗可省略吗可省略吗可省略吗? ?可以可以可以可以谢丽聪老师C语言课件-5分支结构程序(2)-2009方法二:方法二:voidmain()floatx,y;scanf(”%f”,&x);if(x1)y=x;elseif(x10)y=2*x-1;elsey=3*x-11; printf(”y=%fn”,y); 、 可省略可省略可省略可省略y=x1?x:y=x1?x:( ( x10?2*x-1:3*x-11x10?2*x-1:3*x-11) ); ;等等等等价价价价( (、) )可省略可省略可省略
24、可省略谢丽聪老师C语言课件-5分支结构程序(2)-2009方法三:方法三:if(x10)if(x1)y=x;elsey=2*x-1;elsey=3*x-11; 后不能加后不能加;、 和和 ( (、) )可一起省略可一起省略等等等等价价价价y=x10?(x1?x:2*x-1):3*x-11;y=x10?(x1?x:2*x-1):3*x-11;谢丽聪老师C语言课件-5分支结构程序(2)-2009若上面分段函数改为若上面分段函数改为则程序改为则程序改为voidmain()floatx,y;scanf(”%f”,&x);if(x20)if(x20)printf(”printf(”输入的数据是错误的输入
25、的数据是错误的输入的数据是错误的输入的数据是错误的”);”);elseif(-2x&-2x&x1)y=x;elseif(1=x&1=x&x10)y=2*x-1;elsey=3*x-11;printf(”y=%fn”,y);此语句出错与此语句出错与否都输出否都输出此程序有否缺陷此程序有否缺陷此程序有否缺陷此程序有否缺陷? ?谢丽聪老师C语言课件-5分支结构程序(2)-2009程序应改为程序应改为voidmain()floatx,y;scanf(”%f”,&x);if(x20)if(x20)printf(”printf(”输入的数据是错误的输入的数据是错误的输入的数据是错误的输入的数据是错误的”);”);elseif(-2x&-2x&x1)y=x;printf(”y=%fn”,y); elseif(1=x&x10)y=2*x-1;printf(”y=%fn”,y);elsey=3*x-11;printf(”y=%fn”,y);谢丽聪老师C语言课件-5分支结构程序(2)-2009