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

下载本文档

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

文档简介

第四章

为择给胸程序设计

河南化工取业学院

本章要点

■关系表达式

・逻辑表达式

.选择结构程序设计

河南化工取业学院

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

河南化工取业学院2011-11-15

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

“关系运算”实际上是“比较运算”,其中操作

数可以是变量、常量或表达式。

关系表达式的

计算结果=逻辑值(真或假)

在C语言中,用“0”表示“假”,用“1”表示

河南化工取业学院2011-11-15

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

例如:假设num1=3,num2=4,num3=4,则:

(1)num1>num2的值

(2)(num1>num2)!=num3的值

(3)numlvnum2vnum3的值

思考:任意改变num1或num2的值,会影响整个

表达式的值吗?

(4)(num1<num2)+num3

河南化工取业学院2011-11-15

4.2逻辑运算符和逻辑表达式

•逻辑运算符用于连接一个或多个条件,判

断这些条件是否成立

■逻辑运算符有:

I运算运算符表达式

逻辑“与”&&操作数1&&操作数2

逻辑“或”II操作数1||操作数2

逻辑“非”1■!操作数

河南化工取业学院2011-11-15

逻辑表达式

在实际问题上,对于一些复杂的条件,还需要用几个关系表

达式组合起来才能表示。例如,条件2VXV9就需要用2Vx和

XV9这两个关系式来表示。将多个关系式用逻辑运算符连接起来

的式子称为逻辑表达式

逻辑运算符有:

Not(非):取操作数相反的值。即当操作数为False时,

结果为True;当操作数为True时,结果为False;

And(与):当两个操作数都为True时,结果才为True;

Or(或):当两个操作数都为False时,结果才为False。

河南化工取业学院2011-11-15

4.2逻辑运算符和逻辑表达式

般的搦则

&&:当且仅当两个运算量的值都为“真”时,运算结果

“真”,否则为“假”。

II:当且仅当两个运算量的值都为“假”时,运算结果

“假「否则为“真”。

I_坐二L笛县的/古小“吉”口.运算结果为“假”;当

」例如:假定x=4,贝I」~~~~

(x>=0)&&(XV10)的值

吉果为“真”。

(XV」)||(x>4)的值

河南化工取业学院2011-11-15

4.2逻辑运算符和逻辑表达式

逻辑运算符的优先级

•逻辑非的优先级最高,逻辑与次之,逻辑或最低即:

!(非)一&&(与)—II(或)

­与其它种类运算符的优先关系

!一算术运算符一关系运算符一&&一||一赋值运算符

河南化工取业学院2011-11-15

请你判断下列表达式的值:

(1)not(3>7)

(2)(3<8)and(5<10)

(3)(0<5)or(3<1)

(4)not(1>4)or(2<1)and(1<2)

逻辑表达式的运算顺序

(1)当条件中只有逻辑运算符时,运算的顺序为not、and、or。

(2)当条件中既有算术运算符,又有关系到运算符和逻辑运算符

时,运算顺序是:

算术运算一〉关系运算”〉逻辑运算

请你判断下列表达式的运算顺序:

a+b>c+dandw-ornotc0ord0

河南化工取业学院2011-11-15

4.2逻辑运算符和逻辑表达式

邃辑表达式的值

-c语言中,运算量:1r0表示“假",、

\非。表示“真”,:

运算结果:[0表示“假”,-、

、1表示“真”,,

例如:14&&2.8!146a5&&6b9!0

例如,假设num=12,则:

num>=l&&mjmv=31的值1

num||mjm>31的值1。

河南化工取业学院2011-11-15

4.2逻辑运算符和逻辑表达式

说明

在计算逻辑表达式时,并不是所有的表达式都

被求解,只有在必须执行下一个逻辑运算符才

能求出表达式的解时,才执行该运算符。

河南化工取业学院2011-11-15

4.2逻辑运算符和逻辑表达式

例:要判断某一年year是否是闰年。闰年的条件是

符合二者之一:①能被4整除,但不能被100整

除。②能被4整除,又能被400整除。

(year%4==0)&&(year%100!=0)||(year%400==0)

例:判断某一个字符ch是否是字母,而不是数字或

其他的符号。

(ch>=5aJ&&ch<=5zJ)||(ch>=5A5&&ch<=5z5)

河南化工取业学院2011-11-15

选择结构一IF语句

星期六班委会准备组织全班同学春游,

如果下雨,活动就推迟到下一周,如果天

气好就如期进行,这时出现两种选择。

这种需要某个前提成立与否而做出选

择的问题需要通过选择结构来解决

河南化工取业学院2011-11-15

商场为了对苹果进行促销,根据顾客购买的数量调整苹果销

售的价格。如顾客一次购买5斤以下按原价3元出售,一次5斤以

上(含5斤)时则可以在原价的基础上打8折。

(1)分析问题:

weight表示苹果重量,amount表示应付金额;

5斤以下:amount=weight*3;5斤以上:amount=weight*3*0.8

(2)设计算法

①输入苹果重量weight的值;

②判断weight>=5的值是true还是Hase

③计算应付金额amount,如果weight>=5的值是true,贝ij

amount=weight*3*0.8;否贝ij为amount=weight*3

④输出应付金额amount

(3)编写程序

根据设计好的算法,可以写出此问题的代码如下:

河南化工取业学院2011-11-15

CoBBandl▼]Click

PrivateSubCommandl_C1ick()

DimweightjamountAsSingle

weight=InputBox”请输入聿果的重量、"买苹果")

Ifweight>=5Then

amount=weight*3*0.8

Else^

amount=weight*3

EndIf

Print"应付金额是:";amount;"元"

EndSub

河南化工取业学院2011-11-15

4.3if语句(三种形式)

用if语句可以构成分支结构。它对给定的条件进行判断,

根据判断的结果(真或假)来决定执行某个分支程序段。

•1.单分支(基本形式):其语义是:

如果表达式的值为真,则执行其后的语

句,否则不执行该语句。

♦:♦格式:if(表达式)

语句

♦:♦执行过程:

例:if(x>y)printf(“%d”,x);

河南化工取业学院2011-11-15

例4」:输入两个实数,按由大到小的咽序独出。

----------------------------------------------------------------------------------------------------------------------------------------------------1内存

#include<stdio.h>

main()

floata,b,t;

scanf(H%f,%f",&a,&b);

if(a<b)

{t=a;

a=b;

b=t;}

printf("%4.2f,%4.2f\n",a,b);

)

河南化工取业学院2011-11-15

・2.双分支(if©se形式):

其语义是:如果表达式的值为真,则

执行语句1,否则执行语句2。

♦:♦格式:if(表达式)

语句1

else

语句2

♦:♦执行过程:

例:if(x>y)printf(n%dn,x);

elseprintf(n%dn,y);

河南化工取业学院2011-11-15

修改上例

#include<stdio.h>

main()

(

inta,b;

scanf(H%d%dH,&a,&b);

if(a>b)

pnntfC%d,%d\nu,a,b);

else

printf("%d,%d\n\b,a);

}河南化工取业学院

2011-11-15

•main()

(

inta,b;

printf("inputtwonumbers:");

scanf("%d%d",&a,&b);

if(a>b)

printf("max=%d\n",a);

else

printf("max=%d\n",b);

}

输入两个整数,输出其中的大数。改用if・else语句

判别a,b的大小,若a夫,则输出a,否则输由b。

河南化工取业学院2011-11-15

•3.if©se・if形式:要处理多重条件判断的情

况,需要使用多重条件结构多重if结构是if©se

的另一种形式,这种形式也称为阶梯式if-else-if

河南化工取业学院2011-11-15

•前二种形式的if语句一般都用于两个分支的情况。当有多

个分支选择时,可采用if・else・if语句,其语义是:依次判断

表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳

到整个if语句之外继续执行程序。如果所有的表达式均为假,则执行

语句n。然后继续执行后续程序。其一般形式为:

if(超现二)

/吾句1;

elseif(类乒可、

,吾句子,

elseif(程亘)

4句3;

else

语句n;

河南化工取业学院2011-11-15

4.3if语句

__iW

——p-

河南化工取业学院2011-11-15

■[例44]输入两个实数,按代数值由小到

.大输出这两个数。

main()

{floata,b,t;

scanf(H%f,%fH,&a,&b);

if(a>b)

{t=a;a=b;b=t;}

printf(H%5.2f,%5.2fn,a,b);

)

•运行示例、

3.6,-3.2/-323.6

河南化工取业学院2011-11-15

■[例4.2]输入三个数,按由大到小输出。

main()

{floata,b,c,t;

scanf(“%f,%f,%f',&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(”%5・2f,%5.2f,%5.2f'ab,c);

)

河南化工取业学院2011-11-15

★在使用if语句中还应注意以下问题

•♦《)在三种形式的if语句中,在if关键字之后均为表达式。该表达式通常

是谡辑表达式或关系表达式,但也可以是其它表达式,如赋值表达式等,

甚至也可以是一个变量。(if后面的表达式类型任意)

例如:if(a=5)语句;if(b)语句;都是允许的。只要表达式的值为非0,

即为“真”。如在if(a=5)…;中表达式的值永远为非0,所以其后的语句

总是要执行的,当然这神情况在程序中不一定会出现,但在语法上是合

的°

文如,有程序段:if(a=b)

printf("%d',,a);

else

printf(”a=0");本语句的语义是,把b值赋予a,如为非0则输出该值,否

则输出“a=0”字符串。这种用法在程序中是经常出现的。

如:if(a==b&&x==y)printfV'a=b,x=y'');

intx=3,y;if(x=4)y=3;

if(3)printf("OK”);

iffa9)printf(“%d",'a');

河南化工取业学院2011-11-15

♦(2)在if语句中,条件判断表达式必须用括号括起来,注意语句应以分

号结束。例:

if(x>0)print。%f”,x);elseprintf("%f\"x);

♦(3)在if语句的三种形式中,所有的语句应为单个语句,如果要想在满足

条件时执行一组(多个)语句,则必须把这一组语句用{}括起来组成一个复

合语句。例:

if(a+b>c&&b+c>a&&c+a>b){s=0.5*(a+b+c);area=sqrt(s*(s-

a)*(s-b)*(s-c));printf("area=%6.2f",area);}elseprintf("itisnota

trilateral");

★注意:大括号{}本身是一个完整的复合语句,不需要分号。即在}之后

不能再加分号。例如:

if(a>b){

a++;

b++;

)

else{a=0;

b=10;

)

♦(4)else不能作为语句单独,它必须与if配对使用

河南化工取业学院2011-11-15

4.3if语句

#include<stdio.h>

main()

floatgrade;

printf("\n请输入期末考试成绩:”)

scanf("%f,&grade);

if(grade>=90)A

printf("\n优)

elseif(grade>=80)-

printf("\n良)

elseif(grade>=60)■

printf("\n中,');

else

请输入期末考试成绩:

printf("\n•');49

printf("\n");■

}15

4.4if语句的嵌套

在if语句中又包含一个或多个if语句o

一般形式:

if(表达式1)

if(表达式2)语句1

else语句2

else

if(表达式3)语句3

else语句4

河南化工取业学院2011-11-15

if(x>0)

{if(y>1)

z=1;}。

else/*这个else部分属于哪个if?*1]

z=2;

C语言规定,每个else部分总属于前面最近的那

个缺少对应的else部分的if语句。从最内层开始,

else总是与它上面最接近的(未曾配对的)if配对。

避免if与else配对错位的最佳办法是加大括号,同时,为了便于阅

读,使用适当的缩进,(只有大括号能保证H和else不错位配对,缩

进仅便于阅读)

提倡使用大括号括起来以避免看起来有二义性。

河南化工取业学院2011-11-15

一般格式如下:

if()

if()语句11if()

else语句2J内队”if()语句1

elseelse

,^内嵌ifif()语句2,氐

else语句3,内歌比

else语句,

或if()

»耳)语句1}(内嵌if)

else

_______________________________语句2_____________

else与if的匹配原则是:一个else应与其之前距

离最近且没有与其它else配对的if配对。

河南化工取业学院2011-11-15

例如:

f—1x<0

已知编一个程序—输入

1x>0

X的值,输出y值。

程序为:

main()

{intx,y;

scanf(“%d\&x);

if(x<0)y=-l;

elseif(x==0)y=0;

elsey=l;

printf("x=%d,y=%d\n”,x,y);

河南化工取业学院2011-11-15

或者

if(x>=0)

if(x>0)y=1;

内嵌

elsey=0;if

elsey=-1;

-if(X>=0)

若程序写成:「或者

y=-l

if(x!=O)if(x>=0)

if(x>0)y=l;if(x>0)y=1;

else产0;

正确吗?如何修改?elsey=-1;

正确吗?如何修改?

2011-11-15

#include<stdio.h>if(x>=0)

main()if(x>0)y=1;

{intx,y;elsey=0;

,i,i

scanf(%dJ&x);elsey=-1;

if(x<0)

y=-1;

elsey=-1;

if(x==O)y=0;if(x!=O)

elsey=1;{if(x>0)y=1;}

printf(l,y=%d\ni,,y);elsey=0;

)

河南化工取业学院2011-11-15

例求一个数的绝对值

/*ch4_Lc*/

#include<stdio.h>

main()

{intx,y;

printf(nEnteraninteger:n);

scanf(n%df\&x);

y=x;

if(y<o)

y=-y;

printf(n\ninteger:%d—>absolutevalue:%d\n11,x,y);

运彳丁:Enteraninteger:-12J

integer:-12->absolutevalue:12

2011-11-15

例输入两个数并判断两数相等否

/*ch4_2.c*/

#include<stdio.h>

main()

{inta,b;右彳丁:Enterintegera:12J

printf(nEnterintegera:nEnterintegerb:12J

scanf(n%d!\&a);a==b

prmtf(uEnterintegerb:n

nn贬彳丁:Enterintegera:12」

scanf(%d5&b);

if(a==b)Enterintegerb:9J

printf(na==b\nn);a!=b

else

printf(na!=b\nn);

河南化工取业学院2011-11-15

例判断输入字符种类

/*ch4_3.c*/

#include<stdio.h>

main()

{charc;

printff'Enteracharacter:");

c=getchar();

if(c<0x20)printf(nThecharacterisacontrolcharacter\nn);

elseif(c>-01&&c<-91)printff'Thecharacterisadigit\nn);

elseif(c>='A'&&cv='Z')printf(nThecharacterisacapitalletter\nn);

elseif(c>='a'&&cv='z')printf(nThecharacterisalowerletter\nn);

elseprintf(nThecharacterisothercharacter\nn);

:::运行:Enteracharacter:FlJ

Thecharacterisothercharacter'

IIIIU

河南化工取业学院2011-11-15

例输入两数并判断其大小关系

/*ch4_4.c*/

#include<stdio.h>

main()

{intx,y;运行1:Enterintegerx,y:12,23J

printf(uEnterintegerx,y:fX<Y

scanf(n%d,%d!\&x,&y);Enterintegerx,y:12,6J

X>Y

if(x!=y)Enterintegerx,y:12,12J

nH

if(x>y)printf(X>Y\n)X==Y

elseprintf(uX<Y\nH);

else

printf(nX==Y\nn);

}

河南化工取业学院2011-11-15

例if(a==b)

x^4f(b==c)

(printf("a==b==c^);

else

printf("a!=b”);

修改:if(a==b)

{if(b==c)

printf(^a==b==c^);

}

else

printf(“a!=b”);

if〜else酉己对原贝U:缺省{}时,else总是和它上面离

它最近的未配对的ifi已对

实现if〜else等罪需兹鲁加{}

2011-11-15

例考虑下面程序输出结果:

main()

{intx=1009a=105b=20;

intvl=5,v2=0;

if(a<b)

if(b!=15)

结果:

if(!vl)-1

x=l;

else

if(v2)x=10;

x=-l;

printf(“%d”,x);

河南化工取业学院2011-11-15

条件运算符

河南化工取业学院2011-11-15

条件运算符

value=tn,;

)

河南化工取业学院2011-11-15

条件运算符

•优先级:13

•条件运算符可嵌套

如x>0?1:(x<0?-1:0)

•结合方向:自右向左

如a>b?a:c>d?c:d<=>a>b?a:(c>d?c:d)

•各表达式类型可以不同

例x?七Tb,〃x*0,表达式值为表达式值为7b]

x>y?1:1.4//x>y,值为1.0;x<y,值为1・4

a>b?(a+=b):(b=200)

河南化工取业学院2011-11-15

条件运算符示例

例:

温馨提示

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

评论

0/150

提交评论