《谢丽聪老师C语言分支结构程序.pptx》由会员分享,可在线阅读,更多相关《谢丽聪老师C语言分支结构程序.pptx(34页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、5.1 5.1 关系表达式关系表达式 由关系运算符、圆括号把两个表达式连接起来的式子。表示条件表示条件 若所表示的条件成立、则其值为1(非0)、否则其值为0。关系运算符:关系运算符:、=、=、=、!=!=例:a=2、39、a!=(a=8)、x+(y=3)=k*z、(a!=3)(kbcd 应表示为 ab&bc&cdab&bc&cd不能顺手也写为 abcd 关系运算符都是双目运算符,其结合性均为左左结结合合。关关系系运运算算符符的的优优先先级级低低于算术运算符,高于赋值运算符于算术运算符,高于赋值运算符。在六个关系运算符中,,=,=的的优优先先级级相相同同,高高于于=和和!=!=,=和和!=!=的
2、优先级相同的优先级相同。第2页/共34页5.2 5.2 逻辑表达式:逻辑表达式:由逻辑运算符、圆括号把表达式连接起来的式子 表示条件表示条件若所表示的条件成立、其值为1(非0)、否则其值为0逻辑运算符:逻辑运算符:&(与)、|(或)、!(非)&和|均为双双目目运运算算符符,具有左左结结合合性性。!为单单目运算符目运算符,具有右结合性右结合性。逻辑运算符和其它运算符优先级的关系可表示如下:!(非)(非)&(&(与与)|()|(或或)“&”和和“|”低于关系运算符,低于关系运算符,“!”高于算术运高于算术运算符。算符。第3页/共34页 按照运算符的优先顺序可以得出:ab&cd 等价于 (ab)&(
3、cd)!b=c|da 等价于 (!b)=c)|(dc&x+yc)&(x+y)3&a=8 23&1 1 0&1 1 0 02、x+y&a 2&97 97 1 13、x+(y=3)=k*z|!a 0+3=-1|!a 0|0 0 04、(x!=7)|a 0!=7|97 1|97 1 1 5、!(x+y3&a=8)!(23&1)!(0&1)!0 16、!(k*q)!(-1)0 07、!x!(1)!(0)1第5页/共34页5.3 5.3 逻辑表达式的跳跃逻辑表达式的跳跃作第一个,知道结果,后面不作,如:&非非0 0不算不算0 0要算要算0 0不不 算算非非0 0要要 算算第6页/共34页1、执行 int
4、 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、6a=1a=1停止不算停止不算值为值为 0 0 赋给赋给a a,停止不算停止不算 第7页/共34页3、执行 int a,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第8页/共34页例1:main()char c=k;int i=1,j=2,k=3;float x=3e+5,y=0.85;print
5、f(%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,0 1,0 1,0 0,1 0,1 0 0X X为非为非0 0为非为非0,0,后面不算后面不算为为0,0,后面不算后面不算为为1,1,后面要算后面要算第9页/共34页5.4 5.4 选择结构选择结构(if(if 语句语句)5.4.1 if5.4.1 if语句的三种形式语句的三种形式语句的三种形式语句的三种形式 1、第一种形式为基本形式:if if(表达式)语句 语义:如果表达式的值为真,则执行其后
6、的语句,否则不执行该语句。其过程可表示为下图。表达式可以是任意合法表达式,后面不能加;第10页/共34页例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);输入:输入:23 4623 46 输出:输出:max=46max=46此语句用于提示输入此语句用于提示输入max=23max=23max=46max=46第11页/共34页例3:void main()int a,b,c,t;printf(n input two numbe
7、rs:);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);输入:输入:1 6 21 6 2 输出:输出:6 2 16 2 1实现数的互换功能:输入三个数,按功能:输入三个数,按照从大到小顺序输出照从大到小顺序输出第12页/共34页例例4 4:从从键键盘盘输输入入一一个个字字符符,判判断断它它是是否否小小写写字字母母。若若是是,将将其其转转换换成成大大写写字字母母,否否则则不不进进行行转转换换,作后输出该字母。作后输出该字母。#include#i
8、ncludemain()main()char c,a;char c,a;c=getchar();c=getchar();if(c=if(c=|c=z z )a=c;a=c;/*/*判断非小写字母情况判断非小写字母情况*/if(c=if(c=&c=a a)a=c-32;a=c-32;*判断是否是小写字母情况判断是否是小写字母情况*/printf(%cn,a);printf(%cn,a);main()main()char c;char c;c=getchar();c=getchar();if(c=a)c-=32;if(c=a)c-=32;printf(%cn,c);printf(%cn,c);第1
9、3页/共34页2、第二种形式为:if-else if(表达式)语句1;else 语句2;语义:如果表达式的值为真,则执行语句1,否则执行语句2。后面不能加;第14页/共34页 void main()int a,b;printf(input two numbers:);scanf(%d%d,&a,&b);if(ab)printf(max=%dn,a);else printf(max=%dn,b);输入:输入:23 4623 46 输出:输出:max=46max=46 输入两个整数输入两个整数输出其中大数输出其中大数例2的改写第15页/共34页3、第三种形式为if-else-if形式:if(if(
10、表达式表达式1)1)语句语句1 1;else if(else if(表达式表达式2)2)语句语句2 2;else if(else if(表达式表达式3)3)语句语句3 3;else if(else if(表达式表达式m)m)语句语句mm;else else 语句语句n n;语义:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。如果所有的表达式均为假,则执行语句n。然后继续执行后续程序。后面不能加;第16页/共34页此为真此为真,做语句做语句1 1,其它语句,其它语句都不做都不做第17页/共34页上面的语句为以下三种格式:1、空语句2、一个语句(
11、不引起转移)3、前后加大括号的语句(复合语句),也叫程序段,如:int a;float b;a=3;b=7.0;;允许在复合语句前部定义变量,只能在复合语句允许在复合语句前部定义变量,只能在复合语句中使用中使用int a;int a;a=3;a=3;float b;float b;b=7.0;b=7.0;变量要在最变量要在最前面定义前面定义不能写成第18页/共34页#includestdio.h#includestdio.h voidvoid main()main()输入:输入:A A char char c;c;输输出出:This This is is a a capital capital
12、 letterletter 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;;不能写成复合语句复合语句第22页/共34页5.4.2 条件运算符和条件表达式条件运算符和条件表达式 在条件语句中,只执行单个的赋值语句时,可使用条件表达式来实现。条件运算符为?和:,它是一个三三目目运运算算符符,即有三个参与运算的量。条件表达式的一般形式为:表达式表达式1 1?表达式表达式2 2:表达式表达式3 3 求求值值规规则则为为:如果表达式1的
13、值为真,则以表达式2 的值作为条件表达式的值,否则以表达式2的值作为整个条件表达式的值。非非 0 0 0 0第23页/共34页例如条件语句:if(ab)max=a;else max=b;if(ab)max=a;else max=b;可用条件表达式写为:max=(ab)?a:b;执行该语句的语义是:如ab为真,则把a赋予max,如ab为假,则把b 赋予max。第24页/共34页使用条件表达式时,还应注意注意以下几点:1)条件运算符的运算优先级低于关系运算符和 算术运算符,但高于赋值符。因此:max=(ab)?a:bmax=(ab)?a:b 可以去掉括号而写为 max=ab?a:bmax=ab?a
14、:b2)条件运算符?和:和:是一对运算符,不能分开一对运算符,不能分开 单独使用单独使用。3)条件运算符的结合方向是自右至左自右至左。例如:ab?a:cd?c:dab?a:cd?c:d 应理解为 ab?a:(cd?c:d)ab?a:(cd?c:d)这也就是条件表达式嵌套的情形,即其中的表达式3又是一个条件表达式。第25页/共34页例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);x x2 2 +2 (x3)+2 (x3)y=y=3x+7 3x+7 x x2
15、2 (x3)(x3)表达式,成立值为表达式,成立值为1 1y=x3?x*x+2:3*x+7*x*x;第26页/共34页例7:从键盘输入任意的两个实数,按从小到大顺序输出这两个数,请编程实现。void main()float a,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)float t;t=a;a=b;b=t;if(ab)float t;t=a;a=b;b=t;代替复合语句可以定义变量复合语句可以定义变量第27页/共34页a=a+b;b=
16、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第28页/共34页例8:P105 5.5 计算方法一:main()float x,y;scanf(”%f”,&x);if(x1)y=x;else if(1=x&1=x&x10)y=2*x-1;else y=3*x-11;printf(”y=%fn”,y);表达式表达式1 1表达式表达式2 2非非0 00 0语句语句1 1语句语句2 2语句语句3 3非非0 00 01=x&1=x&可省略吗可省略吗?可以可
17、以第29页/共34页方法二: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);、可省略可省略y=x1?x:y=x1?x:(x10?2*x-1:3*x-11x10?2*x-1:3*x-11);等等价价(、)可省略可省略第30页/共34页方法三: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;y=x10?(x1?x:2*x
18、-1):3*x-11;第31页/共34页若上面分段函数改为则程序改为void main()float x,y;scanf(”%f”,&x);if(x20)if(x20)printf(printf(”输入的数据是错误的输入的数据是错误的”););else if(-2x&-2x&x1)y=x;else if(1=x&1=x&x10)y=2*x-1;else y=3*x-11;printf(”y=%fn”,y);此语句出错与否都输出此程序有否缺陷此程序有否缺陷?第32页/共34页程序应改为void main()float x,y;scanf(”%f”,&x);if(x20)if(x20)printf(printf(”输入的数据是错误的输入的数据是错误的”););else if(-2x&-2x&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);第33页/共34页感谢您的观看!第34页/共34页