资源描述
第五章 分支结构程序设计 由关系运算符、圆括号把两个表达式连接起由关系运算符、圆括号把两个表达式连接起来的式子。来的式子。 若所表示的条件成立、则其值为若所表示的条件成立、则其值为1(非(非0)、)、否则其值为否则其值为0。、例:例: a=2 、39 、a != ( a=8 ) 、 x+(y=3)=k*z 、(a!=3)(kbcd 应表示为应表示为 不能顺手也写为不能顺手也写为 abcd 关系运算符都是双目运算符,其结合性均关系运算符都是双目运算符,其结合性均为为。 在六个关系运算符中,在六个关系运算符中,。由逻辑运算符、圆括号把表达式连接起来的式子由逻辑运算符、圆括号把表达式连接起来的式子若所表示的条件成立、其值为若所表示的条件成立、其值为1(非非0)、否则其值为、否则其值为0& (与)(与) 、| (或)、!(非)(或)、!(非)和和均为均为,具有具有。 为为,具有,具有。逻辑运算符和其它运算符优先级的关系可表示如下:逻辑运算符和其它运算符优先级的关系可表示如下: 按照运算符的优先顺序可以得出:按照运算符的优先顺序可以得出: ab & cd 等价于等价于 (ab)&(cd) !b=c|da 等价于等价于 (!b)=c)|(dc&x+yc)&(x+y)3 a=8 23 0 2、x+y a 2 3、x+(y=3)=k*z !a 0+3=-1 !a 0|0 4、(x!=7) a 0!=7|971|97 5、 ( x+y3 a=8 ) !(231)!(01)!016、 ( k*q ) !(-1)7、!x !(1) !(0) 1作第一个,知道结果,后面不作,如:作第一个,知道结果,后面不作,如: & &1、执行、执行 int a,b,c; a=b=c=0; + +a|+ +b&+ +c; 后后a、b、c值分别为值分别为1、0、02、执行、执行 int a=5,b=6,x=1,y=2; (a=xy)&(b= xy); 后后a、b值分别为值分别为0、63、执行、执行 int a,b,c;a=b=c= - 1; + +a & + +b | + +c; 后后a、b、c值分别为值分别为0、-1、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&j-3,ij&xy); printf(%d,%dn,i=5&c&(j=8),x+y|i+j+k); 1、第一种形式为基本形式、第一种形式为基本形式: if if(表达式表达式) 语句语句 语义:如果表达式的值为真,则执行其后的语句,语义:如果表达式的值为真,则执行其后的语句,否则不执行该语句。其过程可表示为下图。否则不执行该语句。其过程可表示为下图。 表 达 式 可表 达 式 可以 是 任 意以 是 任 意合 法 表 达合 法 表 达式 , 后 面式 , 后 面不能加;不能加;例例2:void main() int a,b,max; printf(n input two numbers: ); scanf(%d %d,&a,&b); max=a; if (maxb) max=b; printf(max=%d,max); 例例3:void main() int a,b,c,t; printf(n input two numbers: ); scanf(%d %d %d ,&a,&b,&c); if (ab) t=a;a=b;b=t; if (ac) t=a;a=c;c=t; if (bb) printf(max=%dn,a); else printf(max=%dn,b); 3、第三种形式为、第三种形式为if-else-if形式:形式:语义:语义: 依次判断表达式的依次判断表达式的值,当出现某个值为值,当出现某个值为真时,则执行其对应真时,则执行其对应的语句。然后跳到整的语句。然后跳到整个个if语句之外继续执行语句之外继续执行程序。程序。 如果所有的表如果所有的表达式均为假,则执行达式均为假,则执行语句语句n。然后继续执行。然后继续执行后续程序。后续程序。后面不能后面不能加;加;上面的语句为以下三种格式:上面的语句为以下三种格式:1、空语句、空语句2、一个语句(不引起转移)、一个语句(不引起转移)3、前后加大括号的语句(复合语句),、前后加大括号的语句(复合语句),也叫程序段,如:也叫程序段,如:int a; float b; a=3; b=7.0; 不能写成不能写成 #includestdio.h#includestdio.h voidvoid main() main() char c; char c; c=getchar c=getchar();(); if(c32) if(c=0&c=0&c=A&c=A&c=a&c=a&cb) a+;b+; else a=0;b=10; if(ab) a+;b+;; else a=0;b=10;;不能写成不能写成 在条件语句中,只执行单个的赋值语句时,可使用在条件语句中,只执行单个的赋值语句时,可使用条件表达式来实现。条件表达式来实现。 条件运算符为条件运算符为和和,它是一个,它是一个,即有,即有三个参与运算的量。三个参与运算的量。条件表达式的一般形式为:条件表达式的一般形式为: 如果表达式如果表达式1的值为真,则以表达式的值为真,则以表达式2 的值作为条件表达式的值,否则以表达式的值作为条件表达式的值,否则以表达式2的值作的值作为整个条件表达式的值。为整个条件表达式的值。例如条件语句:例如条件语句: 可用条件表达式写为可用条件表达式写为: 执行该语句的语义是:执行该语句的语义是:如如ab为真,则把为真,则把a赋予赋予max,如如ab为为假假,则把,则把b 赋予赋予max。使用条件表达式时,还应使用条件表达式时,还应以下几点:以下几点:1)条件运算符的运算优先级低于关系运算符和)条件运算符的运算优先级低于关系运算符和 算术运算符,但高于赋值符。算术运算符,但高于赋值符。 因此:因此: 可以去掉括号而写为可以去掉括号而写为 2)条件运算符)条件运算符是是。3)条件运算符的结合方向是)条件运算符的结合方向是。 例如:例如: 应理解为应理解为 这也就是条件表达式嵌套的情形,即其中的这也就是条件表达式嵌套的情形,即其中的表达式表达式3又是一个条件表达式。又是一个条件表达式。例例6:计算:计算方法一:方法一:void main( ) float x,y; scanf (”%f ”,&x); if (x3) y=x*x+2; else y=3*x+7*x*x; printf(”y=%fn”,y);例例7:从键盘输入任意的两个实数,按从小到大顺序:从键盘输入任意的两个实数,按从小到大顺序输出这两个数,请编程实现。输出这两个数,请编程实现。void main( ) float a,b; scanf (”%f%f ”,&a,&b); if (ab) a=a+b;b=a-b;a=a-b; printf(”%f,%fn”,a,b);可用语句可用语句代替代替a=a+b;b=a-b;a=a-bt=a;a=b;b=t例例8:P105 5.5 计算计算方法一:方法一:main( ) float x,y; scanf (”%f ”,&x); if (x1) y=x; else if ( x10 ) y=2*x-1; else y=3*x-11; printf(”y=%fn”,y);)10(113)101 (12) 1(xxxxxxy方法二:方法二:void main( ) float x,y; scanf (”%f ”,&x); if (x1) y=x; else if ( x10 ) y=2*x-1; else y=3*x-11; printf(”y=%fn”,y);)10(113)101 (12) 1(xxxxxxy 、方法三:方法三:if (x10) if x1 y=x; else y=2*x-1; else y=3*x-11; 后不能加后不能加 和和 可一起省略可一起省略 若上面分段函数改为若上面分段函数改为则程序改为则程序改为void main( ) float x,y; scanf (”%f ”,&x); else if ( x1) y=x; else if ( x10 ) y=2*x-1; else y=3*x-11; printf(”y=%fn”,y);)2010(113)101 (12) 12(xxxxxxy程序应改为程序应改为void main( ) float x,y; scanf (”%f ”,&x); else if ( x1) y=x; printf(”y=%fn”,y); else if (1=x & x10 ) y=2*x-1; printf(”y=%fn”,y); else y=3*x-11; printf(”y=%fn”,y);
展开阅读全文