第四章 选择结构程序设计_第1页
第四章 选择结构程序设计_第2页
第四章 选择结构程序设计_第3页
第四章 选择结构程序设计_第4页
第四章 选择结构程序设计_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章选择结构程序设计4.1关系表达式和逻辑表达式4.1.1关系表达式1.关系运算符关系运算符是比较两个操作数大小的符号。两个操作数一般为数值型数据。TurboC的关系运算符及其优先级、结合律如表所示:运算符功能优先级(值小的优先级高)结合律>>=<<=大于大于等于小于小于等于6从左向右==!=等于不等于71第4章选择结构程序设计4.1关系表达式和逻辑表达式4.1.1关系表达式1.关系运算符2.关系表达式由关系运算符将两个表达式连接起来的有意义的式子称为关系表达式。例如:x>=60a+b<ca>b==cb+4>c-6关系表达式的值是一个逻辑值,即“真”或“假”。C语言中,用1表示“真”,用0表示“假”。2第4章选择结构程序设计4.1关系表达式和逻辑表达式4.1.2逻辑表达式1.逻辑运算符逻辑运算符是确定两个操作数逻辑关系的符号。两个操作数一般为逻辑型数据。TurboC的逻辑运算符及其优先级、结合律如表所示:运算符功能优先级(值小的优先级高)结合律!逻辑非2从右向左&&逻辑与11从左向右||逻辑或123注意,各逻辑运算符的运算规则是:!:真变假,假变真;&&:全真为真,见假为假;||:全假为假,见真为真;特别强调:C语言中非0表真,0表假;且用1表真,0表假。其他逻辑公式:

!(!a)==a

a&&a==aa||a==aa&&0==0a||1==1a&&1==aa||0==a!(a&&b)==!a||!b!(a||b)==!a&&!b

4第4章选择结构程序设计4.1关系表达式和逻辑表达式4.1.2逻辑表达式1.逻辑运算符各逻辑运算符的运算规则如表所示:数据a数据ba&&ba||b!a!b1111001001010101100000115第4章选择结构程序设计4.1关系表达式和逻辑表达式4.1.2逻辑表达式1.逻辑运算符2.逻辑表达式由逻辑运算符将两个表达式连接起来的有意义的式子称为逻辑表达式。例如:!a+b&&ca||b==ca>0||b<5a++&&b--逻辑表达式的值也是一个逻辑值。如果逻辑运算的对象是一个数值型数据,则该数值型数据应被看作逻辑值,C语言中,非零值看作“真”,零值看作“假”。6第4章选择结构程序设计4.1关系表达式和逻辑表达式4.1.2逻辑表达式1.逻辑运算符2.逻辑表达式注意:由逻辑运算符&&和||构成的逻辑表达式,在特殊情况下会产生“短路”现象。(1)由逻辑运算符&&构成的逻辑表达式,在已经确定一个运算对象的值为0时,其逻辑表达式的值即为0,此时不再处理另一个运算对象。例如:执行:a=-1;b=5;m=++a&&b--;结果为:a=0b=57第4章选择结构程序设计4.1关系表达式和逻辑表达式4.1.2逻辑表达式1.逻辑运算符2.逻辑表达式注意:由逻辑运算符&&和||构成的逻辑表达式,在特殊情况下会产生“短路”现象。(2)同样,由逻辑运算符||构成的逻辑表达式,在已经确定一个运算对象的值为1时,其逻辑表达式的值即为1,此时不再处理另一个运算对象。例如:执行:a=0;b=5;++a||b--;

结果为:a=1b=58第4章选择结构程序设计4.2if语句4.2.1简单if语句简单if语句的一般形式为:if(表达式)语句1;else语句2;功能:如果表达式的值为真,则执行语句1,执行完语句1后从语句2后开始继续向下执行;如果表达式的值为假,则跳过语句1而执行语句2。用流程图表示:真表达式假语句2语句19第4章选择结构程序设计4.2if语句4.2.1简单if语句注意:(1)表达式是判断的条件,一般是关系表达式或逻辑表达式,也可以是其他表达式。(2)条件执行语句中“else语句2;”部分是选择项,可以缺省,此时条件语句变成:if(表达式)语句1;其功能是:若表达式的值为真,则执行语句1,否则跳过语句1继续执行。用流程图表示:真假语句1表达式10第4章选择结构程序设计4.2if语句4.2.1简单if语句注意:(3)如果语句1或语句2有多于一条语句要执行时,必须使用“{“和”}”把这些语句包括在其中,构成一个复合语句,此时条件语句形式为:

if(表达式){语句组1;}else{语句组2;}11例4.1输出两个数中的较大者。程序1:main(){inta,b,max;scanf("%d,%d",&a,&b);if(a>b)max=a;elsemax=b;printf("max=%d\n",max);}程序2:main(){inta,b,max;scanf("%d,%d",&a,&b);max=a;if(max<b)max=b;printf("max=%d\n",max);}12第4章选择结构程序设计4.2if语句4.2.2嵌套if语句在if语句中又包含一个或多个if语句,称为嵌套if语句。一般形式如下:if(表达式1)if(表达式2)语句1else语句2elseif(表达式3)语句3else语句413第4章选择结构程序设计4.2if语句4.2.2嵌套if语句说明:(1)if与else的配对关系从最内层开始,else总是与离它最近的未曾配对的if配对。(2)if与else的个数最好相同,从内层到外层一一对应,以避免出错。(3)如果if与else的个数不相同,可以用花括号来确定配对关系。例如:if(表达式1){if(表达式2)语句1}else语句2这时花括号限定了内嵌if语句的范围,因此else与第一个if配对。14例4.2

对任意x,根据以下函数关系求对应y的值。 -1 (x<0)y=0 (x=0) 1 (x>0)程序:main(){intx,y;scanf("%d",&x);if(x<0)y=-1;elseif(x==0)y=0;elsey=1;printf("x=%d,y=%d\n",x,y);}输入:-3结果:x=-3,y=-1输入:4结果:x=4,y=14.2.3多选一结构一般形式为:if(表达式1)语句1;elseif(表达式2)语句2;elseif(表达式3)语句3;…………elseif(表达式m)语句m;else语句n;15第4章选择结构程序设计4.3条件表达式条件运算符“?”和“:”两个符号组成。由条件运算符构成的条件表达式的一般形式是:

<表达式1>?<表达式2>:<表达式3>;条件运算符的含义是:先求表达式1的值,如果为真,则求表达式2的值并把它作为整个表达式的值;如果表达式1的值为假,则求表达式3的值并把它作为整个表达式的值。16第4章选择结构程序设计4.3条件表达式例4.3用条件表达式改写例4.1(输出两个数中的较大者)。程序:main(){inta,b,max;scanf("%d,%d",&a,&b);max=(a>b)?a:b;printf("max=%d\n",max);}17第4章选择结构程序设计4.4复合语句与空语句4.4.1复合语句复合语句是由左右花括号括起来的多条语句,一个复合语句在语法上等同于一个语句。复合语句的一般形式如下:{说明部分;语句部分;}在程序中,凡是单个语句能够出现的地方,都可以出现复合语句。一个复合语句又可以出现在其他复合语句内部。18第4章选择结构程序设计4.4.2空语句空语句是只有一个分号的语句,其一般形式为:;空语句在语法上占据一个语句的位置,但不做任何操作。4.4复合语句与空语句19第4章选择结构程序设计4.5开关语句开关语句的一般形式如下:switch(表达式){case常量表达式1:语句1;case常量表达式2:语句2;…case常量表达式n:语句n;default:语句n+1;}开关语句的功能是:首先计算switch后面圆括号内表达式的值,若此值等于某个case后面的常量表达式的值,则转向该case后面的语句去执行;若表达式的值不等于任何case后面的常量表达式的值,则转向default后面的语句去执行,如果没有default部分,则将不执行switch语句中的任何语句,而直接转到switch语句后面的语句去执行。20第4章选择结构程序设计4.5开关语句说明:(1)switch后面圆括号内的表达式的值和case后面的常量表达式的值都必须是整型或字符型,不允许是浮点型。(2)同一个switch语句中的所有case后面的常量表达式的值都必须互不相同。(3)switch语句中的case和default的出现次序是任意的,也就是说default也可以位于case的前面,且case的次序也不要求按常量表达式的大小顺序排列。(4)每个case或default后的语句可以是多条语句,但可以不需要使用“{“和”}”括起来。21第4章选择结构程序设计4.5开关语句说明:(5)由于switch语句中的“case常量表达式”部分只起标号的作用,而不进行条件判断,所以在执行完某个case后的语句后,将自动转到该语句后面的语句去执行,直到遇到switch语句的右花括号或break语句为止,而不再进行条件判断。如果在执行完一个case分支后,要跳出switch语句转到下一条语句执行,可在一个case结束后、下一个case开始前插入一个break语句。程序一旦执行到braek语句,将立即跳出switch语句。22switch(n){case1:x=1;case2:x=2;}当n=1时,将连续执行下面两个语句:x=1;x=2;例如:switch(n){case1:x=1;braek;case2:x=2;braek;}当n=1时,将只执行一个语句:x=1;23第4章选择结构程序设计4.5开关语句说明:(6)多个case可以共用一组执行语句。例如:switch(n){case1:case2:case3:x=3;}24第4章选择结构程序设计4.5开关语句注意:(1)switch的表达式后不能有“;”。(2)case与其后面的常量表达式间至少有一个空格。(3)switch语句可以嵌套,break语句只跳出它所在的switch语句。(4)default语句可以省略。25例4.4给变量a,b,c输入整数,根据a的值确定对b、c的运算:当a=1时:计算b+c的值。当a=2时:计算b-c的值。当a=3时:计算b*c的值。当a=4时:计算b/c的值。其他值时:不做任何操作。main(){inta,b,c;scanf("%d,%d,%d",&a,&b,&c);switch(a){case1:printf("%d+%d=%d\n",b,c,b+c);break;case2:printf("%d-%d=%d\n",b,c,b-c);break;case3:printf("%d*%d=%d\n",b,c,b*c);break;case4:printf("%d/%d=%d\n",b,c,b/c);}}程序:26第4章选择结构程序设计4.6应用举例例4.5输入三个数,按由小到大的顺序输出。分析:已知:输入的三个数(分别用a,b,c来存放)。求:由小到大的顺序输出的三个数。处理:(1)a,b中的小者存入a,大者存入b。(2)a,c中的小者存入a,大者存入c。(3)b,c中的小者存入b,大者存入c。流程图:开始结束输入a,b,c输出a,b,ca>b交换a,bNYa>c交换a,cNYb>c交换b,cNY27第4章选择结构程序设计4.6应用举例例4.5输入三个数,按由小到大的顺序输出。开始结束输入a,b,c输出a,b,ca>b交换a,bNYa>c交换a,cNYb>c交换b,cNY程序:main(){inta,b,c,t;printf("a,b,c=?");scanf("%d,%d,%d",&a,&b,&c);if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}printf("%d,%d,%d",a,b,c);}28第4章选择结构程序设计4.6应用举例例4.6输入一个不多于4位的正整数,求出它是几位数,逆序打印出各位数字分析:已知:一个不多于4位的正整数(用x来存放)。求:该正整数是几位数,该正整数的各位数字(分别用a、b、c、d来存放千位、百位、十位、个位上的数字,由a、b、c、d的值确定该正整数是几位数)。处理:用算术运算符到低位判断各位上的数字是否不为零,据此确定该正整数是几位数。29流程图:取组成x的各位上的数字(a、b、c、d)开始结束输入xNY输出4位数及数字NY输出3位数及数字NYc!=0输出2位数及数字d!=0输出1位数及数字a!=0b!=030程序:main(){intx,a,b,c,d;scanf("%d",&x);a=x/1000;b=x%1000/100;c=x%100/10;d=x%10;if(a!=0)printf("4:%d%d%d%d\n",d,c,b,a);elseif(b!=0)printf("3:%d%d%d\n",d,c,b);elseif(c!=0)printf("2:%d%d\n",d,c);elseif(d!=0)printf("1:%d\n",d);}取组成x的各位上的数字(a、b、c、d)开始结束输入xNY输出4位数及数字NY输出3位数及数字NYc!=0输出2位数及数字d!=0输出1位数及数字a!=0b!=031第4章选择结构程序设计4.6应用举例例4.7输入一个数字,输出对应的星期几的英文单词。分析:已知:一个数字(1~7,用n来存放)。求:对应的星期几的英文单词(直接输出)。处理:由于一个星期有7天,对输入的数字进行判断,有8种情况(包括出错),用开关语句进行处理。32开始输出Sun输出Mon输出Tues输出Wednes输出Thurs输出Fri输出Satur输出Error结束n其他=6=5=4=3=2=1=0流程图:33程序:main(){intn;scanf("%d",&n);switch(n){case0:printf("Sunday\n");break;case1:printf("Monday\n");break;case2:printf("Tuesday\n");break;case3:printf("Wednesday\n");break;case4:printf("Thursday\n");break;case5:printf("Friday\n");break;case6:printf("Saturday\n");break;default:printf("Error");}}34第4章选择结构程序设计4.7本章考点关系运算符和关系表达式。逻辑运算符和逻辑表达式。条件运算符和条件表达式。简单if语句的格式与功能。嵌套if语句的格式与功能。switch语句的格式与功能。35第4章选择结构程序设计4.8典型试题详解1.以下程序运行后的输出结果是________。main(){intp=30;printf("%d\n",(p/3>0?p/10:p%3));}正确答案:3(知识点:条件运算符和条件表达式)试题分析:表达式p/3的值为10,大于0,所以条件表达式(p/3>0?p/10:p%3)的值取p/10的值3。36第4章选择结构程序设计4.8典型试题详解2.有以下程序:main(){inti=1,j=1,k=2;if((j++||k++)&&i++)printf("%d,%d,%d\n",i,j,k);}执行后输出结果是________。A)1,1,2 B)2,2,1 C)2,2,2 D)2,2,3正确答案:C(知识点:逻辑运算符和逻辑表达式)试题分析:根据运算规则,对逻辑表达式(j++||k++)&&i++应先计算表达式j++的值,其结果是表达式j++的值为1,j的值为2,再将表达式j++的值1与k++进行||运算,由逻辑运算符||构成的逻辑表达式在已经确定一个运算对象的值为1时,其逻辑表达式的值即为1,此时不再处理其另一个运算对象,因此,不再计算k++,k的值仍为2。逻辑表达式(j++||k++)的值为1,再与i++进行&&运算,需要计算表达式i++的值,表达式i++为1,i的值为2,逻辑表达式(j++||k++)&&i++的值1,执行printf("%d,%d,%d\n",i,j,k);语句,其结果为2,2,2。37第4章选择结构程序设计4.8典型试题详解3.以下程序输出的结果是________。main(){inta=5,b=4c=3,d;d=(a>b>c);printf("%d\n",d);}正确答案:0(知识点:关系运算符和关系表达式)试题分析:根据运算规则,对表达式(a>b>c)应先计算表达式a>b的值,其结果为1,再计算1>c的值,其结果为0,故d的值为0。38第4章选择结构程序设计4.8典型试题详解4.有定义语句:inta=1,b=2,c=3,x;,则以下选项中各程序段执行后,x的值不等于3的是________。A)if(c<a)x=1; B)if(a<3)x=3;elseif(b<a)x=2; elseif(a<2)x=2;elsex=3; elsex=1;C)if(a<3)x=3; D)if(a<b)x=b;if(a<2)x=2; if(b<c)x=c;if(a<1)x=1; if(c<a)x=a;正确答案:C(知识点:简单if语句和嵌套if语句的格式与功能)试题分析:根据嵌套if语句的功能,对各程序段执行后,A)的结果是x=3,B)的结果是x=3,C)的结果是x=2,D)的结果是x=3。在这类题目中,一定要注意其逻辑关系。39第4章选择结构程序设计4.8典型试题详解5.以下程序运行后的结果是________。main(){inta=1,b=3,c=5;if(c=a+b)printf("yes\n");elseprintf("no\n");}正确答案:yes(知识点:简单if语句的格式与功能、运算符=和==)试题分析:if语句后判断的条件是c=a+b,即将a+b的值赋给c,再判断c的值是否为真,而不是判断c是否等于a+b。运算符=和==是不同的。40第4章选择结构程序设计4.8典型试题详解6.若有以下程序:main(){inta=4,b=3,c=5,t=0;if(a<b)t=a;a=b;b=t;if(a<c)t=a;a=c;c=t;printf("%d%d%d",a,b,c);}执行后的输出结果为________。正确答案:503(知识点:简单if语句的格式与功能\运算符=和==)试题分析:根据a<b的值0,程序执行a=b;b=t;,则a=3,b=0,再根据a<c的值1,程序执行t=a;,再执行a=c;c=t;,则a=5,c=3。注意,第一个if语句在其后的t=a;后已经结束,其后的a=b;b=t;是第一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论