教学材料《C语言》-第四章_第1页
教学材料《C语言》-第四章_第2页
教学材料《C语言》-第四章_第3页
教学材料《C语言》-第四章_第4页
教学材料《C语言》-第四章_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

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

文档简介

4.1关系运算符与关系表达式

4.1.1关系运算符关系运算是逻辑运算中比较简单的一种。关系运算也称为“比较运算”,即将两个数据进行比较,判断比较的结果是否符合指定条件:如果符合,则结果为“真”;如果不符合,则结果为“假”。例如,“x>5”是一个关系表达式,大于号(>)是一个关系运算符。如果x的值是6,则满足给定的“x>5”条件,称关系表达式的值为“真”;如果x的值为4,则不满足“x>5”的条件,就称关系表达式的值为“假”。C语言提供6种关系运算符:<(小于)、<=(小于等于)、>(大于)、>=(大于等于)、==(等于)、!=(不等于)。下一页返回4.1关系运算符与关系表达式

关系运算符的优先次序如下:(1)前4种关系运算符(<、<=、>、>=)为同一优先级,后2种(==、!=)为同一优先级,但前者高于后者。(2)关系运算符的优先级低于算术运算符。(3)关系运算符的优先级高于赋值运算符。以上关系如图4.1所示。关系运算符是双目运算符,具有自左至右的结合性。例如:a!=b==5等价于(a!=b)==5a>b+5等价于a>(b+5)a=b>5等价于a=(b>5)a!=b>5等价于a!=(b>5)上一页下一页返回4.1关系运算符与关系表达式

4.1.2关系表达式关系表达式是由关系运算符连接起来的表达式组成的。关系表达式的结果依据两个表达式之间的关系成立或不成立来确定。关系成立时,表达式的结果为真(1);否则,表达式的结果为假(0)。关系表达式一般形式:<表达式>关系运算符<表达式>其中,表达式可以是常量、变量、算术表达式或关系表达式。例如,当a=3,b=2,c=1时,判断下面表达式的值。(a>b)==c关系成立,结果为1。b+c<a关系不成立,结果为0。d=a>b因为a>b值为1,所以d=1。f=a>b>ca>b为1,a>b>c为0,所以f=0。上一页下一页返回4.1关系运算符与关系表达式

【例4-1】观察并输出关系表达式的值。上一页下一页返回4.1关系运算符与关系表达式

程序说明:本例验证关系运算的结果为“真”时,值等于1;结果为“假”时,值等于0。在由于x<y的值为真,值为1,将值赋给z,输出z值为1。将x与y+5进行比较后,关系表达式的值为0,将值赋给z,输出z值为0表达式“'y'!='Y'”的值为1,“5<8”的值为1,“y-x==1”的值为1,因此z=3,输出z值为3。【注意】在C语言中,关系表达式的值可以参加算术运算,非0值即“真(1)”,0即“假(0)”。上一页返回4.2逻辑运算符与逻辑表达式

关系表达式所表示的条件都比较简单,为了表示更复杂的条件,C语言提供了逻辑运算符,把几个只能描述单一条件的关系表达式组合成复杂的条件,即逻辑表达式。下一页返回4.2逻辑运算符与逻辑表达式

4.2.1逻辑运算符逻辑运算符有3种:与(AND),或(OR),非(NOT)。在C语言里不能在程序中直接将AND、OR、NOT作为逻辑运算符,而用其他符号代替:&&(逻辑与)、‖(逻辑或)、!(逻辑非)。其中,逻辑非是单目运算符,只需要求一个运算量,具有右结合性,如!(a>b)。逻辑与和逻辑或是双目运算符,要求有两个运算量(操作数),具有左结合性,如(a>b)&&(x>y)、(a>b)‖(x>y)。假设a、b为两个逻辑量,当a、b的值为不同组合时,各种逻辑运算所得到的真值如表4.1所示。上一页下一页返回4.2逻辑运算符与逻辑表达式

在C语言中,计算逻辑表达式的过程分别如下:对于任意的逻辑表达式a&&b,计算过程为:先计算a的值,若a的值非0,则计算b的值,并且依据b的值来决定a&&b的结果值(若b的值非0,则结果为1;否则,结果为0);若a的值为0,则不计算b的值,而是直接得到a&&b的结果值为0(有一个条件为0时,结果为0)。对于任意的逻辑表达式a‖b,则计算过程为:先计算a的值,若a的值为0,则计算b的值,并且依据b的值来决定a‖b的结果值(若b的值非0,则结果为1;否则,结果为0);若a的值非0,则不计算b的值,而是直接得到a‖b的结果值为1(有一个条件为1时,结果为1)。对于任意的逻辑表达式!a,则计算过程为:计算a的值,若a的值为0,则!a的值为1;若a的值非0,则!a的结果值为0。上一页下一页返回4.2逻辑运算符与逻辑表达式

在一个逻辑表达式中,如果包含多个逻辑运算符(如!a&&b‖x>y&&c),则按以下的优先次序进行计算(图4.2):(1)!(非)→&&(与)→‖(或),即“!”在三者中优先级最高。(2)逻辑运算符中的“&&”和“‖”低于关系运算符,“!”高于算术运算符。例如:(x1>x2)&&(y1>y2)可写成x1>x2&&y1>y2(a==b)‖(x==y)可写成a==b‖x==y(!x)‖(x>y)可写成!x‖x>y上一页下一页返回4.2逻辑运算符与逻辑表达式

4.2.2逻辑表达式逻辑表达式是由逻辑运算符(&&,‖,!)将关系表达式或逻辑表达式连接起来的式子,其结果仍为逻辑值真(1)、逻辑值假(0)。逻辑表达式的一般形式为:<表达式>逻辑运算符<表达式>其中,表达式可以是常量、变量、关系表达式或其他表达式。上一页下一页返回4.2逻辑运算符与逻辑表达式

【例4-2】观察并输出逻辑表达式的值。上一页下一页返回4.2逻辑运算符与逻辑表达式

通过此例题可以看出,逻辑运算的结果不是0就是1,不可能是其他数值。在逻辑运算中,非0值参加逻辑运算时,被看成1处理。在C语言中,&&和‖是短路运算符号。在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只有在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。(1)在一个或多个&&连接的表达式中,只要有一个操作数为零,就不做后面的&&运算,整个表达式的结果为零。例如,对于表达式“a&&b&&c”,只有a=1(真)时,才需要判别b的值,只有a=1(真),b=1(真)时,才需要判别c的值;只要a=0(假),就不必判别b和c(此时整个表达式已确定为假);当a=1(真),b=0(假),则不需要判别c。上一页下一页返回4.2逻辑运算符与逻辑表达式

(2)在一个或多个‖连接而成的表达式中,只要碰到第一个不为零的操作数,就不再进行后继运算,整个表达式的值不为零。例如,对于表达式“a‖b‖c”,只要a=1(真),就不必判断b和c(此时整个表达式已确定为真);只有a=0(假),才需要判别b;当a=0(假),b=0(假)时,才需要判别c。假设a=1,b=2,c=3,d=4,m和n的原值是1,则执行表达式“(m=a>b)&&(n=c>d)”执行后,由于a>b的值为0,因此m=0,于是“n=c>d”不被执行,因此n的值不是0而是保持原值1。上一页返回4.3

if语句

前面章节所介绍的程序都是顺序执行的,即程序中的每条语句都被执行一次,并且按照语句在程序中的排列顺序来执行。但在实际生活中,总是需要根据不同条件来选择执行不同的语句,这时就需要使用if语句。if语句是非常重要的程序控制语句,程序通过判定所给条件是否满足,并根据条件的真/假来执行不同的语句(操作)。C语言提供了三种形式的if条件判断语句:if语句(单分支);if…else…语句(双分支);if…elseif语句(多分支)。下一页返回4.3

if语句

4.3.1

if语句(单分支)当条件满足时,执行规定的语句;条件不满足时,就什么也不用做。if语句单分支的语法格式为if(表达式)语句;其中,if是C语言的关键字,在编译时,系统知道这是一个条件语句。if语句的执行过程如图4.3所示。执行这种形式的if语句时,先判断“表达式”:如果表达式的计算结果为“真”,则执行其后的“语句”;如果表达式的计算结果为“假”,则跳过其后的“语句”,执行if语句的下一条语句。上一页下一页返回4.3

if语句

【例4-3】计算一个整数的绝对值。分析:输入一个数,判断此数是正数还是负数,正数的绝对值是其本身,负数的绝对值是它的相反数。程序流程图如图4.4所示。上一页下一页返回4.3

if语句

【注意】(1)“表达式”结果的真假取决于该表达式当前逻辑运算或关系运算的结果,与以前运行的输入和状态无关,而是随着表达式中变量值的变化而变化,每次的结果可能不相同,可能是“真”,也可能是“假”。(2)if语句单分支结构中的语句可以是单个语句,也可以是复合语句。上一页下一页返回4.3

if语句

4.3.2

if…else…语句(双分支)if语句的单分支结构只允许在条件为真时指定要执行的语句,当程序必须根据条件的结果在两组操作中选择一个时,可以使用if语句的第二种形式,即if…else…语句。if…else…语句是双分支结构,不但允许在条件为真时指定要执行的语句,还允许在条件为假时指定要执行的语句。if…else…语句的语法格式:if(表达式)语句A;else语句B;其中,表达式用于表示条件。语句是当表达式的值为真(或为假)时执行的语句,可以是一条语句或一组语句,如果是一组语句,则应采用复合语句形式,用{}将这组语句括起来。if…else…语句的执行过程如图4.5所示。上一页下一页返回4.3

if语句

计算表达式的结果,当表达式的结果为真时,执行语句A,放弃语句B的执行;当表达式的结果为假时,执行语句B,放弃语句A的执行。无论如何,对于一次条件判断,语句A和语句B只能有一个被执行,不能同时被执行。例如:if(x>y)

printf("%d",x);elseprintf("%d",y);当x>y结果为真时,输出x的值;否则,输出y的值。而且,该语句只能输出x和y中的一个值。上一页下一页返回4.3

if语句

【例4-4】求分段函数值:分析:首先确定if…else…语句中的表达式应为x>1,然后通过输入的x值来判断x>1的结果是否为真。如果结果为真,则y=x;如果结果为假,则y=0。程序的流程图如图4.6所示。上一页下一页返回4.3

if语句

程序代码:上一页下一页返回4.3

if语句

4.3.3

if…elseif语句(多分支)在现实生活中,常常会面对许多的选择,往往一个问题不仅有两种可能的结果,需要从多方面进行判断,有多种可能的情况进行处理时,将使用if语句的第三种形式:if…elseif语句又称多分支结构。if…elseif语句的格式:if(表达式1)语句1;

elseif(表达式2)语句2;

elseif(表达式3)语句3;

elseif(表达式n)语句n;

else语句n+1;if…elseif语句的执行过程如图4.7所示。上一页下一页返回4.3

if语句

首先计算表达式1的结果值,如果为真,执行语句1,否则,计算表达式2的结果值,如果为真,执行语句2,否则,计算表达式3的结果值,如果为真,执行语句3,…,依次类推,直至计算表达式n,如果为真,执行语句n,否则如果有语句n+1,则执行语句n+1,如没有语句n+1,则执行if…elseif语句的下一条语句。无论如何,对于一次选择判断,语句1,2,3,…,n和n+1只能选择一个被执行,不能同时被执行。上一页下一页返回4.3

if语句

【例4-5】求分段函数值:分析:编写此程序,首先应确定选用什么结构去实现。显然,这是一个多分支选择的问题,可以选用if…elseif语句来实现。由于在C语言中不允许使用上标和根式,所以x2、x3

应分别写成x∗x、x∗x∗x的形式。程序的流程图如图4.8所示。上一页下一页返回4.3

if语句

上一页下一页返回4.3

if语句

4.3.4

if语句的嵌套若if语句包含一个或多个if语句,称为if语句的嵌套。嵌套既可以出现在if语句块,也可以出现在else语句块。嵌套形式有以下4种:上一页下一页返回4.3

if语句

其中,e1、e2、e3是条件表达式,s1、s2、s3、s4、s5是语句。在运用if语句的三种结构中,最容易出现的错误就是if与else的配对错误。嵌套中的if与else的配对关系非常重要。在C语言中,if与else的配对原则为:从最内层开始,else总是与它前面最近的同一复合语句内的不带else的if配对。如果if和else的数目不一致,可以加{}来明确配对关系。例如:上一页返回4.4条件运算符与条件表达式

在C语言中,除了可以采用if…else…语句来实现双分支结构外,还可以通过条件表达式来实现双分支结构。条件表达式的一般形式:表达式1?表达式2:表达式3其中,“?:”是条件运算符,也称三目运算符,要求有三个操作对象。条件表达式的执行过程如图4.9所示。先判表达式1,若为非0(真),则条件表达式值为表达式2的值,否则,为表达式3的值。例如:max=a>b?a:b;当a>b时,将a赋值给max;否则,将b赋值给max。下一页返回4.4条件运算符与条件表达式

【说明】(1)条件运算符优先于赋值运算符。(2)条件运算符低于关系运算符和算术运算符。例如:a>b?a:b+1;相当于a>b?a:(b+1);而不相当于(a>b?a:b)+1;(3)条件运算符的结合性为从右至左。例如:a>b?a:c>d?c:d;相当于a>b?a:(c>d?c:d);如果a=1、b=2、c=3、d=4,则该条件表达式的值等于4。上一页下一页返回4.4条件运算符与条件表达式

(4)条件表达式不能取代一般的if语句,只有当if语句的两个分支为给同一变量赋值时,才可替代。例如,下面的if语句就无法用一个条件表达式代替。if(a>b)printf("%d",a);elseprintf("%d",b);但可以用下面的语句代替:printf("%d",a>b?a:b);即将条件表达式的值输出。(5)在条件表达式中,表达式1必须是整型数、浮点数或指针型数,通常是关系表达式或逻辑表达式,表达式2和表达式3的类型可以不同,但条件表达式的值的类型是二者中较高的类型。例如,对于表达式“x>y?1:1.5;”,如果x≤y,则该条件表达式的值为1.5;若x>y,则该条件表达式的值应为1。由于1.5是实型,比整型高,因此将1转换成实型1.0。上一页返回4.5

switch语句

当一个程序在逻辑上要求根据特定条件做出真假判断并执行相应操作时,if语句的三种结构是理想的解决方案。采用if…elseif语句格式实现一些复杂的判断结构,就是将问题细化多个层次,并对每个层次内嵌单、双分支结构,但是当嵌套的层次过多时,容易造成编程、阅读、测试的困难。有时,用switch语句(开关语句)来代替if…elseif语句实现一系列平行选择,以便解决多分支选择结构问题。下一页返回4.5

switch语句

switch语句的一般形式如下:上一页下一页返回4.5

switch语句

【说明】(1)表达式是可以控制程序的执行过程,表达式的结果必须是整数、字符或枚举量值。(2)case后面的常量表达式类型应与表达式的数据类型相同,常量表达式的值不能重复,但是不同的常量值可以共用同一个语句序列。(3)语句序列是switch语句的执行部分。根据case后常量表达式的值不同,语句序列执行的内容有所不同,每个语句序列可以由一条语句或多条语句组成,这里的多条语句不需要按复合语句处理,若某一语句序列为空,则对应的break语句可以省略。(4)break语句是中断跳转语句,表示执行完指定的case后的操作语句后,不继续执行switch语句的剩余部分,而是直接跳出switch语句以外,执行其后的第一条语句。break语句是可选的,如果句子中没有break语句,程序将在执行完所选case语句后,继续执行紧接其后的case语句。上一页下一页返回4.5

switch语句

(5)在switch语句中,default语句是可选项,用于处理switch结构的非法操作,当任何case语句都未匹配成功时,则执行default语句;如果没有default语句,当任何case语句都未匹配成功时,就不做任何操作,直接执行switch语句之后的语句。switch语句的执行过程:先计算switch语句后圆括号内表达式的值,如果表达式的值等于某个case后常量表达式的值,则执行该case后的语句,如果表达式的值不等于任何case后常量表达式的值,则执行default后的语句,若没有default部分,则直接执行switch语句后面的语句。上一页下一页返回4.5

switch语句

【例4-6】键盘输入1~7,输出对应星期一至星期天的英文单词。分析:如果输入的值为1~7,则通过case语句将翻译成英文单词,如果输入的数据不在此范围,则通过default语句报告错误。上一页下一页返回4.5

switch语句

程序代码:上一页返回4.6选择结构程序设计举例

【例4-7】输入两个实数,按数值由小到大的次序输出这两个数。程序的流程图如图4.10所示。下一页返回4.6选择结构程序设计举例

【例4-8】输入一个字符,判别它是否为大写字母,如果是,就将它转换成小写字母;如果不是,就不转换。然后输出最后得到的字符。程序的流程图如图4.11所示。上一页下一页返回4.6选择结构程序设计举例

【例4-9】编写一个程序,完成两个数的四则运算(数与运算符由键盘输入)。分析:(1)调用输入函数输入操作数和运算符。(2)四则运算规则。上一页下一页返回4.6选择结构程序设计举例

上一页下一页返回4.6选择结构程序设计举例

程序说明:(1)本程序中输入函数scanf的格式控制字符串是“%f%c%f”,因此在输入数据时应按紧凑格式输入,即3个数据之间无任何分隔符,因为中间格式符是%c。如果输入错误,将影响结果。(2)编写程序时,应尽量考虑周详,且所编写的程序应具有容错能力。上一页下一页返回4.6选择结构程序设计举例

【例4-10】求一元二次方程ax2+bx+c=0的解(a≠0)。分析:由于假定a≠0,因此有以下几种可能:(1)b2-4ac=0,有两个相等的实根。(2)b2-4ac>0,有两个不相等的实根。(3)b2-4ac<0,有两个共轭复根。上一页下一页返回4.6选择结构程序设计举例

上一页下一页返回4.6选择结构程序设计举例

上一页下一页返回4.6选择结构程序设计举例

两次运行结果:第一次:程序说明:由于实数在计算机中存储时,经常会有一些微小误差,所以本例判断disc是否为0的方法是:判断disc的绝对值是否小于一个很小的数(如10-6)。上一页下一页返回4.6选择结构程序设计举例

【思考】若将系数a、b、c定义成整数,能否直接判断disc是否等于0?若没有条件a≠0,那么对此程序做怎样的修改就可以实现?上一页下一页返回4.6选择结构程序设计举例

【例4-11】判断某年份x是否是闰年。分析:根据历法,闰年规则如下:(1)如果x不能被4整除,则x不是闰年;(2)如果x能被100整除但不能被400整除,则x不是闰年;(3)如果x能被4整除但不能被100整除,则x是闰年;(4)如果x能被400整除,则x是闰年。综上所述,可以将闰年规则归纳为:如果某年份x能被4整除但不能被100整除或者能被400整除,则x是闰年;否则,不是闰年。程序的N-S图如图4.12所示。上一页下一页返回4.6选择结构程序设计举例

上一页下一页返回4.6选择结构程序设计举例

上一页下一页返回4.6选择结构程序设计举例

上一页下一页返回4.6选择结构程序设计举例

【例4-12】4人中有一人做了好事,有下面一段对话,已知有3个人说了真话,判断是谁做了好事。A:“不是我。”B:“是C。”C:“是D。”D:“他胡说。”分析:在未得到答案之前,这4个人都有可能。假设做好事的人是thisman,变量thisman的取值是字符'A'~'D',用'A'~'D'这4个字符分别试探他们的对话,把真话数累加,如果为3,则thisman的值即为所求。上一页下一页返回4.6选择结构程序设计举例

题目的4句话可以分别表述成:thisman!='A'thisman=='C'thisman=='D'thisman!='D'由于每个关系运算符的结果为1或0,因此根据题意应该有(thisman!='A')+(thisman=='C')+(

温馨提示

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

评论

0/150

提交评论