计算机二级C语言-第4章选择结构_第1页
计算机二级C语言-第4章选择结构_第2页
计算机二级C语言-第4章选择结构_第3页
计算机二级C语言-第4章选择结构_第4页
计算机二级C语言-第4章选择结构_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

第四章选择结构4.1.1关系运算符C语言有6种关系运算符:

<、<=、>、>=、==、!=关系成立:关系运算的值为1(表示逻辑真);关系不成立:关系运算的值为0(表示逻辑假)。例如:

5>3值为1 5<=3 值为05==3 值为0 5!=3 值为1例如:1.0/3.0*3.0==1.0?

由于1.0/3.0得到的值用有限位保存,是近似值,所以1.0/3.0*3.0≠1.0。注意:浮点数是用近似值表示的。“==”用于两个浮点数的判断时,由于存储误差,会得出错误的结果。4.1.2关系表达式1、关系表达式的构成关系表达式是用关系运算符将两个表达式连接起来,进行关系运算的式子。例如:

a+b>b+c 比较两个算术表达式的值

a<=2*b 比较变量的值和算术表达式的值

′a′<′b′ 比较两个字符ASCII码值关系表达式2、

关系运算符的优先级(1)<、<=、>和>=为同一级,==和!=为同一级。前者优先级高于后者。(2)关系运算符优先级低于算术运算符。例如:

a+b>b+c等效于(a+b)>(b+c)。

(2+a)==(b-a)等效于2+a==b-a。3、关系运算符的结合律

C语言规定关系表达式采取左结合律。表达式中出现优先级别为同一级别的运算符时,按从左到右结合方向处理。例如:

inta=2,b=3,c=1a>b<c先计算a>b,结果是0,再计算0<c,关系表达式的值为:16>3<2先计算6>3,结果是1,再计算1<2,关系表达式的值为:1关系表达式4.1.3逻辑运算符C语言没有逻辑类型数据,进行逻辑判断时:数据的值为非0,则认作逻辑真,数据的值为0,则认作逻辑假;而逻辑表达式的值为真,则用整形数1表示。逻辑表达式的值为假,则用整形数0表示。

逻辑运算符有3个:!、&&

、||表示逻辑非、逻辑与、逻辑或运算。

注:由于C语言依据判断数据是否为非0或0来判断逻辑真和逻辑假,所以逻辑运算的操作数类型可以是字符型、整型或浮点型。

1、逻辑非!逻辑非是单目运算符(也就是说参加运算的操作数只有一个)。若操作数本身的值为0,逻辑非运算后的结果为1(逻辑真)当操作数值为非0时,逻辑非运算的结果为0。例如:

inta=5,b=3; !a 结果为0,即a为非0。

!(a<b)结果为1。因为a<b的值为0,即取a<b的非。2、逻辑与

&&逻辑与是双目运算(也就是说参加运算的操作数有两个),当参加逻辑与运算的两个操作数值均为非0(逻辑真)时,结果才为真;否则为0(逻辑假)。

例如:inta=5,b=3;a&&b 结果为l,即a与b均不为0。(a<b)&&(a>0) 结果为0,因为a<b的值为0。3、逻辑或||

逻辑或也是双目运算,参加或运算的两个操作数中,只要有一个操作数值为非0(逻辑真),结果就为l(逻辑真);否则为0(逻辑假)。例如:inta=5,b=3;a||b 结果为l。(a<b)||(a>0) 结果为l,因为a>0的值为l。在谈到逻辑运算时,我们常用一个真值表来表示,如下:ab!a!ba&&ba||b真真假假真真真假假真假真假真真假假真假假真真假假为理解与、或、非的含义,引入三个电路,如图所示。在上图中,我们给出三个指示灯的控制电路,根据串、并联电路的工作原理,我们可以得出:①在图(a)中,只有当两个常开按钮同时按下时,指示灯才会亮;与②在图(b)中,只要两个常开按钮中任何一个按下,指示灯都会亮;或③在图(c)中,没有按按钮时,电路是接通的,所以指示灯亮,按下按钮时,指示灯反而不亮。非逻辑表达式1、逻辑运算表达式的构成用逻辑运算符将表达式连接起来就构成了逻辑表达式。例如,!(a>b) 对关系表达式的值取非(a>b)&&(b>c) 对两个关系表达式进行逻辑与运算(a>b)&&(b>c)||(b==0)2、逻辑运算符优先级C语言逻辑运算符的优先级规定如下:①优先级顺序为!→&&→||。

②!高于算术运算符,

&&,||低于关系运算符。

3、逻辑运算符的结合律

C语言逻辑运算符采用左结合律。表达式中出现优先级别为同一级别的运算符时,按从左到右的结合方向处理。例如:a&&b&&c计算顺序为从左自右,即:(a&&b)&&c。4、C语言逻辑表达式的特性

①在多个&&运算符相连的表达式中,计算从左至右进行时,若遇到运算符左边的操作数为0(逻辑假),则停止运算。因为此时已经可以断定逻辑表达式结果为假。②在多个||运算符相连的表达式中,计算从左至右进行时,若遇到运算符左边的操作数为l(逻辑真),则停止运算,因为已经可以断定逻辑表达式结果为真。

4.2if条件语句择条件语句ifif语句的说明条件运算符4.2选择型程序设计if语句的三种形式形式一:格式:if(表达式)

语句1

语句2执行过程:例:if(x>y)printf(“%d”,x);x=y;形式二:格式:if(表达式)

语句1else

语句2

语句3执行过程:例:if(x>y)max=x;elsemax=y;x=y;表达式语句1非0=0语句2表达式语句1语句2非0=0语句3形式三:格式:if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3…...[else语句]表达式1语句1非0=0表达式2表达式3语句n语句3语句2非0非0=0=0执行过程:

例:if(x>1000)y=0.4;elseif(x>800)y=0.3;elseif(x>600)y=0.2;elseif(x>400)y=0.1;elsey=0;如:if(a==b&&x==y)printf(“a=b,x=y”);if(3)printf(“OK”);if(‘a’)printf(“%d”,’a’);说明1:if后面的表达式类型任意if(x)if(x!=0)if(!x)if(x==0)语句可以是复合语句例考虑下面程序的输出结果:

#include<stdio.h>main(){intx,y;scanf(“%d,%d”,&x,&y);if(x>y)

x=y;y=x;elsex++;y++;printf(“%d,%d\n”,x,y);}错误!在if语句和else语句中若有多个操作语句,则应用花括号{}将它们括起成为一个复合语句。补足程序段--1

输入两个整数,按从小到大的顺序输出它们。t=a;a=b;b=t;#include<stdio.h>main(){inta,b,t;scanf("%d,%d",&a,&b);if(a>b){

}printf("%d,%d",a,b);}条件语句举例--2

输入三个整数,按从小到大的顺序输出它们。#include<stdio.h>main(){inta,b,c,t;scanf("%d,%d,%d",&a,&b,&c);if(a>b){

}if(a>c){

}if(b>c){

}printf("%d,%d,%d",a,b,c);}t=a;a=b;b=t;t=a;a=c;c=t;t=b;b=c;c=t;4.3条件运算符和条件表达式

C语言提供了一个可以代替某些if-else语句的简便易用的操作符“?”和“:”,该操作符是三目运算符,其一般形式是:

表达式1?表达式2:表达式3

操作符?的作用:在计算表达式1之后,如果数值为true(真),则计算表达式2,并将结果作为整个表达式的数值;如果表达式1的值为false(假),则计算表达式3的值,并以它的结果作为整个表达式的值。例:

x=10;if(x>9)y=100;elsey=200;可以用下面的条件运算符来处理:

x=10;y=(x>9)?100:200;注意:①条件运算符要求有3个操作对象。②条件运算符的优先级别比关系运算符和算术运算符都低。因此

y=(x>9)?100:200括号可以不要,可写成

y=x>9?100:200

如果有a>b?a:b+1相当于a>b?a:(b+1),而不相当于(a>b?a:b)+1③条件运算符的结合方向为“自右向左”。如:a>b?a:c>d?c:d相当于:a>b?a:(c>d?c:d)如果a=1,b=2,c=3,d=4,则条件表达式的值等于4。Switch语句 switch语句是一种分支控制语句。特点:是可以根据一个表达式的多种值,选择多个分支,因而也称为分情况语句和开关语句。实际问题中常常需要用到多分支结构,例如,学生成绩分档次(85分以上为“A”等,70~84分为“B”等,60~69分为“C”等……)。Switch语句执行过程:switch(表达式){case常量1:语句1;case常量2:语句2;……case常量n:语句n;default:语句n+1;}当“表达式”=“常量表达式1”时,从“语句1”开始执行;当“表达式”=“常量表达式2”时,从“语句2”开始执行;当“表达式”=其它值时,从“语句n+1”开始执行;Switch语句中使用break语句:switch(表达式){case常量1:语句系列1;break;case常量2:语句系列2;break;

……case常量m:语句系列m;break;default:语句系列m+1;}执行过程:switch表达式语句组1语句组2语句组n语句组…...常量1defaultcase常量2常量nmain(){chars;scanf(“%c”,&s);switch(s){case‘A’:printf(“85~100\n”);case‘B’:printf(“70~84\n”);case‘C’:printf(“60~69\n”);case‘D’:printf(“<60\n”);default:printf(“错误输入\n”);}}输入“C”,求输出结果。

结果:

60~69<60

错误输入

?!main(){chars;scanf(“%c”,&s);switch(s){case‘A’:printf(“85~100\n”);case‘B’:printf(“70~84\n”);case‘C’:printf(“60~69\n”);case‘D’:printf(“<60\n”);default:printf(“错误输入\n”);}}我的成绩应该是60~69!什么!“<60”?“错误输入”?怎么会这样?!不好意思,我属于C级!

运行结果:

60~69<60

错误输入

解决方法——break语句:main(){chars;scanf(“%c”,&s);switch(s){case‘A’:printf(“85~100\n”);break;case‘B’:printf(“70~84\n”);break;case‘C’:printf(“60~69\n”);break;case‘D’:printf(“<60\n”);break;default:printf(“错误输入\n”);}}这才差不多!break!

运行结果:

60~69main(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}printf(“a=%d,b=%d\n”,a,b);}说明1、每个case常量表达式的值必须互不相同,否则会出现互相矛盾的结果。2、允许多个case共用一个执行语句。

求程序运行结果。结果:a=2,b=1。如果x=2?

结果:a=1,b=1

如果x=3?结果:a=1,b=1

Switch语句常量1,常量2,…常量n是常量表达式,且值必须互不相同case后可包含多个可执行语句,且不必加{}switch可嵌套多个case可共用一组执行语句当每一个case语句后均有break语句时,case出现的次序不影响执行结果。(default总是放在最后,这时,deafult后不需要break语句)。说明:X0≤X<102X+110≤X<20Y=4120≤X<3071-X30≤X<400X<0或X≥40#include<stdio.h>main(){intxscanf("%d",&x);switch( ){cas

温馨提示

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

评论

0/150

提交评论