谢丽聪老师C语言课件-5分支结构程序(2)-2009

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第五章分支结构程序设计5.1关系运算符和表达式5.2逻辑运算符和表达式5.3逻辑表达式的跳跃5.4if语句5.5switch语句5.1关系表达式由关系运算符、圆括号把两个表达式连接起来的式子。——表示条件若所表示的条件成立、则其值为1(非0)、否则其值为0。关系运算符:、=、、=、==、!=例:a=2、39、’a’!=(a=8)、x+(y=3)==k*z、(a!=3)(kl)978表达式值为1优先成立为1不成立为0非=注意:数学中多个条件,例abcd应表示为ab&&bc&&cd不能顺手也写为abcd关系运算符都是双目运算符,其结合性均为左结合。关系运算符的优先级低于算术运算符,高于赋值运算符。在六个关系运算符中,,=,,=的优先级相同,高于==和!=,==和!=的优先级相同。5.2逻辑表达式:由逻辑运算符、圆括号把表达式连接起来的式子——表示条件若所表示的条件成立、其值为1(非0)、否则其值为0逻辑运算符:&&(与)、||(或)、!(非)&&和||均为双目运算符,具有左结合性。!为单目运算符,具有右结合性。逻辑运算符和其它运算符优先级的关系可表示如下:!(非)→&&(与)→||(或)“&&”和“||”低于关系运算符,“!”高于算术运算符。按照运算符的优先顺序可以得出:ab&&cd等价于(ab)&&(cd)!b==c||da等价于((!b)==c)||(da)a+bc&&x+yb等价于((a+b)c)&&((x+y)b)例:设x=0,y=2,a=8,k=-1,q=1,z=1,则1、x+y3&&a==8→23&&1→0&&1→02、x+y&&’a’→2&&97→13、x+(y=3)==k*z||!a→0+3==-1||!a→0||0→04、(x!=7)||’a’→0!=7||97→1||97→15、!(x+y3&&a==8)→!(23&&1)→!(0&&1)→!0→16、!(k*q)→!(-1)→07、!!!x→!!(1)→!(0)→15.3逻辑表达式的跳跃作第一个,知道结果,后面不作,如:∥∥&&&&非0不算0要算0不算非0要算1、执行inta,b,c;a=b=c=0;++a||++b&&++c;后a、b、c值分别为1、0、02、执行inta=5,b=6,x=1,y=2;(a=xy)&&(b=xy);后a、b值分别为0、6a=1停止不算值为0赋给a,停止不算3、执行inta,b,c;a=b=c=-1;++a&&++b||++c;后a、b、c值分别为0、-1、01a=02不算,值为03c=04整体为0例1:main(){charc='k';inti=1,j=2,k=3;floatx=3e+5,y=0.85;printf(%d,%d\n,!x*!y,!!!x);printf(%d,%d\n,x||i&&j-3,ij&&xy);printf(%d,%d\n,i==5&&c&&(j=8),x+y||i+j+k);}运行结果:0,01,00,10X为非0为非0,后面不算为0,后面不算为1,后面要算5.4选择结构(if语句)5.4.1if语句的三种形式1、第一种形式为基本形式:ifif(表达式)语句语义:如果表达式的值为真,则执行其后的语句,否则不执行该语句。其过程可表示为下图。表达式可以是任意合法表达式,后面不能加;例2:voidmain(){inta,b,max;printf(\ninputtwonumbers:);scanf(%d%d,&a,&b);max=a;if(maxb)max=b;printf(max=%d,max);}输入:2346输出:max=46此语句用于提示输入max=23max=46例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%d\n,a,b,c);}输入:162↙输出:621实现数的互换功能:输入三个数,按照从大到小顺序输出例4:从键盘输入一个字符,判断它是否小写字母。若是,将其转换成大写字母,否则不进行转换,作后输出该字母。#includestdio.hmain(){charc,a;c=getchar();if(c=‘a’||c=‘z’)a=c;/*判断非小写字母情况*/if(c=‘z’&&c=‘a’)a=c-32;*判断是否是小写字母情况*/printf(%c\n,a);}main(){charc;c=getchar();if(c=‘z’&&c=‘a’)c-=32;printf(%c\n,c);}2、第二种形式为:if-elseif(表达式)语句1;else语句2;语义:如果表达式的值为真,则执行语句1,否则执行语句2。后面不能加;voidmain(){inta,b;printf(inputtwonumbers:);scanf(%d%d,&a,&b);if(ab)printf(max=%d\n,a);elseprintf(max=%d\n,b);}输入:2346输出:max=46输入两个整数输出其中大数例2的改写3、第三种形式为if-else-if形式:if(表达式1)语句1;elseif(表达式2)语句2;elseif(表达式3)语句3;…elseif(表达式m)语句m;else语句n;语义:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。如果所有的表达式均为假,则执行语句n。然后继续执行后续程序。后面不能加;此为真,做语句1,其它语句都不做上面的语句为以下三种格式:1、空语句2、一个语句(不引起转移)3、前后加大括号的语句(复合语句),也叫程序段,如:{inta;floatb;a=3;b=7.0;};允许在复合语句前部定义变量,只能在复合语句中使用{inta;a=3;floatb;b=7.0;}变量要在最前面定义不能写成#includestdio.hvoidmain(){输入:Acharc;输出:Thisisacapitalletterc=getchar();if(c32)printf(Thisisacontrolcharacter\n);elseif(c='0'&&c='9')printf(Thisisadigit\n);elseif(c='A'&&c='Z')printf(Thisisacapitalletter\n);elseif(c='a'&&c='z')printf(Thisisasmallletter\n);elseprintf(Thisisanothercharacter\n);}一个语句例54、在使用if语句中应注意以下问题:1)在三种形式的if语句中,在if之后均为表达式。该表达式通常是逻辑表达式或关系表达式,但也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量。例如:if(a=5)语句;if(b)语句;都是允许的。只要表达式的值为非0,即为“真”。如在:if(a=5)…;中表达式的值永远为非0,所以其后的语句总是要执行的,当然这种情况在程序中不一定会出现,但在语法上是合法的。又如,有程序段:if(a=b)printf(%d,a);elseprintf(a=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条件运算符和条件表达式在条件语句中,只执行单个的赋值语句时,可使用条件表达式来实现。条件运算符为?和:,它是一个三目运算符,即有三个参与运算的量。条件表达式的一般形式为:表达式1?表达式2:表达式3求值规则为:如果表达式1的值为真,则以表达式2的值作为条件表达式的值,否则以表达式2的值作为整个条件表达式的值。非00例如条件语句:if(ab)max=a;elsemax=b;可用条件表达式写为:max=(ab)?a:b;执行该语句的语义是:如ab为真,则把a赋予max,如ab为假,则把b赋予max。使用条件表达式时,还应注意以下几点:1)条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符。因此:max=(ab)?a:b可以去掉括号而写为max=ab?a:b2)条件运算符?和:是一对运算符,不能分开单独使用。3)条件运算符的结合方向是自右至左。例如:ab?a:cd?c:d应理解为ab?a:(cd?c:d)这也就是条件表达式嵌套的情形,即其中的表达式3又是一个条件表达式。例6:计算方法一:voidmain(){floatx,y;scanf(”%f”,&x);if(x3)y=x*x+2;elsey=3*x+7*x*x;printf(”y=%f\n”,y);}x2+2(x3)y=3x+7x2(x≤3)表达式,成立值为1y=x3?x*x+2:3*x+7*x*x;例7:从键盘输入任意的两个实数,按从小到大顺序输出这两个数,请编程实现。voidmain(){floata,b;scanf(”%f%f”,&a,&b);if(ab){a=a+b;b=a-b;a=a-b;}/*实现a与b的互换*/printf(”%f,%f\n”,a,b);}可用语句if(ab){floatt;t=a;a=b;b=t;}代替复合语句可以定义变量a=a+b;b=a-b;a=a-bt=a;a=b;b=ta3+1ba-b=3aa-3=1a3b1t3b3a1a3b1例8:P1055.5计算方法一:main(){floatx,y;scanf(”%f”,&x);if(x1)y=x;elseif(1=x&&x10)y=2*x-1;elsey=3*x-11;printf(”y=%f\n”,y);})10(113)101(12)1(xxxxxxy表达式1表达式2非00语句1语句2语句3非001=x&&可省略吗?可以方法二:voidmain(){floatx,y;scanf(”%f”,&x);if(x1)y=x;else{if(x10)y=2*x-1;elsey=3*x-11;}printf(”y=%f\n”,y);})10(113)101(12)1(xxxxxxy{、}可省略y=x1?x:(x10?2*x-1:3*x-11);等价(、)可省略方法三:if(x10){if(x1)y=x;elsey=2*x-1;}elsey=3*x-11;}后不能加;{、}和(、)可一起省略等价y=x10?(x1?x:2*x-1):3*x-11;若上面分段函数改为则程序改为voidmain(){floatx,y;scanf(”%f”,&x);if(x=-2||x20)printf(”输入的数据是错误的”);elseif(-2x&&x1)y=x;elseif(1=x&&x10)y=2*x-1;elsey=3*x-11;printf(”y=%f\n”,y);})2010(113)101(12)12(xxxxxxy此语句出错与否都输出此程序有否缺陷?程序应改为voidmain(){floatx,y;scanf(”%f”,&x);if(x=-2||x20)printf(”输入的数据是错误的”

1 / 34
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功