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

下载本文档

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

文档简介

选择结构设计程序设计选择结构设计程序设计关系运算符和关系表达式逻辑运算符和逻辑表达式

if语句switch语句程序举例第2页,共54页,2024年2月25日,星期天关系运算符和关系表达式第3页,共54页,2024年2月25日,星期天关系运算符关系运算实际上是两个量的比较,比较的结果只有两种可能:真(1)、假(0)。例如:a>3?当a=5时,比较的结果为真;当a=1时,结果为假。

C语言提供6种关系运算符

<(小于)<=(小于或等于)>(大于)

>=(大于或等于)==

(相等)

!=

(不等)选择结构程序设计关系运算符和关系表达式

优先级相同(高)优先级相同(低)等式运算符第4页,共54页,2024年2月25日,星期天选择结构程序设计关系运算符和关系表达式

关系运算符合法的4>=6A+b<=c+dch==‘A’count!=-2x+y==2*z-5不合法的a=<ba=>ba>>ba=ba==b-1(x+y)=!44第5页,共54页,2024年2月25日,星期天关于优先次序<,<=,>,>=为同一级别,==和!=为同一级别。在同一级别中,采取由左至右的结合方向。

算术运算符关系运算符赋值运算符高低[例]c>a+bc>(a+b)a>b!=c(a>b)!=ca==b<ca==(b<c)a=b>ca=(b>c)

等式运算符选择结构程序设计系运算符和关系表达式

第6页,共54页,2024年2月25日,星期天选择结构程序设计关系运算符和关系表达式

关系表达式用关系运算符将或者等式运算符两个表达式连接起来,叫关系表达式。合法的关系表达式:

a>b,a+b>b+c,(a=3)>(b=5),

(a==3)>(b==5),‘a’<‘b’,(a>b)>(b<c)关系表达式的值是一个逻辑值,非真即假.

关系表达式5==3的值为假(在计算机中记为0);

5>=0的值为真(在计算机中记为1)。

第7页,共54页,2024年2月25日,星期天选择结构程序设计关系运算符和关系表达式

关系表达式例:

a=3,b=2,c=1,

则:(1)a>b的值为1(2)(a>b)==c的值为真(即1)

a>b的值为1,c也为1,(a>b)==c相当于1==1,结果为真,即(a>b==c)的值为1。(3)b+c<a的值为0(4)d=a>b中d的值为a>b的值,为1。(5)f=a>b>c中f的值为1>c的值,为0。第8页,共54页,2024年2月25日,星期天课堂练习inti=1,j=2,k=3;doublex=5.5,y=7.7i<j-k-i+5*j>=k+1x-y<=j-k-1x+k+7<y/k第9页,共54页,2024年2月25日,星期天课堂练习答案inti=1,j=2,k=3;doublex=5.5,y=7.7i<j-ki<(j-k)0-i+5*j>=k+1((-i)+(5*j))>=(k+1)1x-y<=j-k-1(x-y)<=((j-k)-1)1x+k+7<y/k((x+k)+7)<(y/k)0第10页,共54页,2024年2月25日,星期天课堂练习inti=1,j=2,k=3i==ji!=ji+j+k==-2*-k第11页,共54页,2024年2月25日,星期天课堂练习答案inti=1,j=2,k=3i==jj==i0i!=jj!=I1i+j+k==-2*-k((i+k)+k)==((-2)*(-k))1第12页,共54页,2024年2月25日,星期天逻辑运算符和逻辑表达式第13页,共54页,2024年2月25日,星期天逻辑运算符逻辑运算:产生真假值的运算。C语言提供的逻辑运算符:①

&&逻辑与②

||

逻辑或③

!逻辑非“&&”和“||”是双目运算符,它要求两个运算量。

如:(a>b)&&(x>y),(a>b)||(x>y)“!”是一元运算符,只要求一个运算量。如:!(a>b)错误的例子a!a!ba&&a||ba&b选择结构程序设计逻辑运算符和逻辑表达式

第14页,共54页,2024年2月25日,星期天逻辑运算符逻辑运算举例如下:

a&&ba,b同时为真,则表达式为真

a||ba,b只要有一个为真,表达式为真

!aa为真,则表达式为假真值表ab!a!ba&&ba||bTTFFTTTFFTFTFTTFFTFFTTFF选择结构程序设计逻辑运算符和逻辑表达式

第15页,共54页,2024年2月25日,星期天逻辑运算符的优先级!&&||逻辑运算符“&&”和“||”低于关系运算符,“!”高于算术运算符

a>b&&x>y相当于:(a>b)&&(x>y)a==b||x==y相当于:(a==b)||(x==y)!a||a>b相当于:(!a)||(a>b)!算术关系逻辑赋值选择结构程序设计逻辑运算符和逻辑表达式

第16页,共54页,2024年2月25日,星期天逻辑表达式用逻辑运算符将关系表达式或逻辑量连接起来就是逻辑表达式。在C语言中,当判断一个量的真假时,一切非0数均被当成‘真’来处理。

例如:若a=4,则!a的值为0若a=4,b=5,则a&&b的值为1

a||b的值为1

!a||b的值为1

4&&0||2的值为1选择结构程序设计逻辑运算符和逻辑表达式

第17页,共54页,2024年2月25日,星期天逻辑表达式逻辑运算的结果非0即1,参加逻辑运算的量可以是0和非0数。区分下面的表达式中算术运算量,关系运算量和逻辑运算量:5>3&&2||8<4-!0结果为1

5>3是两个数值间的比较,结果为1

1&&2是两个非0值(逻辑量)间的运算,结果为1

1||8<4-!0,根据优先级,先计算!0,结果为1

1||8<4-1-->1||8<3-->1||0结果为1你是否对逻辑量有概念了?对于一个变量,做算术运算时,关心的是它的实际数值;做逻辑判断时,关心的是0还是非0。选择结构程序设计逻辑运算符和逻辑表达式

第18页,共54页,2024年2月25日,星期天!(a&&b)等价于!a||!b!(a||b)等价于!a&&!b写出下列式子的等价逻辑表达式!(a>b)!(a<=b&&c<=d)!(a+1==b+1)!(a<1||b<2&&c<3)ab!(a&&b)!a||!b!(a||b)!a&&!bTTFFFFTFTTFFFTTTFFFFTTTT选择结构程序设计逻辑运算符和逻辑表达式

第19页,共54页,2024年2月25日,星期天课堂练习inti=3,j=3,k=3;doublex=0.0,y=2.3;i&&j&&kx||i&&j-3i<j&&x<yi<j||x<y-1||0inta=1,b=2,c=3;doublex=1.0;a>b&&c>ba<!b||!!aa+b<!c+ca-x||b*c&&b/a第20页,共54页,2024年2月25日,星期天课堂练习答案inti=3,j=3,k=3;doublex=0.0,y=2.3;i&&j&&k(i&&j)&&k1x||i&&j-3x||(i&&(j-3))0i<j&&x<y(i<j)&&(x<y)0i<j||x<y(i<j)||(x<y)1-1||01inta=1,b=2,c=3;doublex=1.0;a>b&&c>b0a<!b||!!a1a+b<!c+c0a-x||b*c&&b/a1第21页,共54页,2024年2月25日,星期天短路求值计算含有&&和||的运算数的表达式时,只要得到了结果的真或者假,求值的过程就停止,这样的计算的过程就停止,这样的计算过程是短路求值(short-circleevaluation)对于exp1&&exp2求值的时候当exp1的值是0的时候,不论exp2为何值,整个表达式为0,计算机不会也没有必要去计算exp2对于exp1||exp2求值的时候当exp1的值是1的时候,不论exp2为何值,整个表达式为1,计算机不会也没有必要去计算exp2

第22页,共54页,2024年2月25日,星期天短路求值例子#include<stdio.h>main(){inti,j;i=2&&(j=2);printf("%d%d\n",i,j);(i=0)&&(j=3);printf("%d%d\n",i,j);i=0||(j=4);printf("%d%d\n",i,j);(i=2)||(j=5);printf("%d%d\n",i,j);}第23页,共54页,2024年2月25日,星期天课堂练习当程序执行下面代码时会显示什么?仔细分析结果#include<stdio.h>main(){inta=1,b=2,c=3;floatx=3.3,y=5.5;printf("%d%d\n",!a+b/c,!a+b/c);printf("%d%d\n",a==-b+c,a*b>c==a);printf("%d%d\n",!!x<a+b+c,!!x+!!!y);printf("%d%d\n",a||b==x&&y,!(x||!y));}00101110第24页,共54页,2024年2月25日,星期天[例]判断某一年是否是闰年。条件是:能被4整除,但不能被100整除;能被4整除,又能被400整除。

用year表示年份,判断闰年的逻辑表达式为:

(year%4==0&&year%100!=0)||(year%400==0)如果给year输入一个值,使上面的表达式的值为1时,则year所代表的年份就是闰年。变换一下角度,如何判断year不是闰年?

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

!

(year%4==0&&year%100!=0)&&!(year%400==0)(year%4!=0)||(year%100==0&&year%400!=0)当year的值使表达式的值为1时,则year所代表的就不是闰年。选择结构程序设计逻辑运算符和逻辑表达式

第25页,共54页,2024年2月25日,星期天[课堂练习]1.判断一个点是否落入圆形中。

2.判断一个点是否落入阴影部分。

(小圆的半径为1。)1010-10-10-222-2x*x+y*y<=100(sqr(x-2)+sqr(y-2)<=1)||(sqr(x-2)+sqr(y+2)<=1)||(sqr(x+2)+sqr(y-2)<=1)||(sqr(x+2)+sqr(y+2)<=1)选择结构程序设计逻辑运算符和逻辑表达式

第26页,共54页,2024年2月25日,星期天if语句第27页,共54页,2024年2月25日,星期天选择结构程序设计

if语句if语句的三种形式if用来判断给定的条件的真假,并决定执行哪一种操作。1.if<表达式>语句条件满足时执行表达式后面的语句,然后继续执行以下的语句。条件不满足时,越过if表达式后面的语句,往下执行。表达式语句真(非0)假(0)例如:如果输入的是正数,则打印出来。if(x>0)printf("%d",x);错误:ifb==aarea=a*a;第28页,共54页,2024年2月25日,星期天合并if(j<k)min=j;if(j<k)printf("jissmallerthank");if(j<k){min=j;printf("jissmallerthank");}第29页,共54页,2024年2月25日,星期天选择结构程序设计

if语句if语句的三种形式2.if<表达式>语句1else语句2条件满足时执行语句1,然后继续执行if以下的语句。条件不满足时,执行语句2,然后继续执行if以下的语句。表达式语句1语句2真假例如:输出两个数中较大的一个。if(x>y)printf("%d",x)elseprintf("%d",y);第30页,共54页,2024年2月25日,星期天

注意的问题if(a!=b){a+=1;b+=2;};//errorelsec+=3;第31页,共54页,2024年2月25日,星期天选择结构程序设计

if语句if语句的第三种形式if<表达式1>语句1;

elseif<表达式2>语句2;elseif<表达式3>语句3;elseif<表达式4>语句4;else语句5

表达式1表达式2表达式3表达式4语句1语句2语句3语句4语句5假假假假真真真真第32页,共54页,2024年2月25日,星期天选择结构程序设计

if语句if语句的三种形式例如:商场促销,购物500元以上,8折;购物300元以上,85折;购物100元以上,9折;购物50元以上,95折;购物50元以下,不打折。根据消费量,计算优惠率。

设:消费量为money;折扣为cost;实际花费priceif(money>500)cost=0.2;elseif(money>300)cost=0.15;elseif(money>100)cost=0.1;elseif(money>50)cost=0.05;elsecost=0;price=money-(money*cost);第33页,共54页,2024年2月25日,星期天选择结构程序设计

if语句if语句的说明If后面的"表达式"一般为关系表达式或逻辑表达式,但也可以是其它类型的数值;在每个else前面有一分号,整个语句结束处有一分号;3.if和else后面的语句可以是简单的也可以是复合语句(用{}扩起来的语句)。例:if((a+b>c)&&(b+a>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("itisnotatrilateral");第34页,共54页,2024年2月25日,星期天[例]输入两个数,按数值大小次序排列输出.main(){floata,b,t;scanf("%f,%f",&a,&b);if(a>b){t=a;a=b;b=t;}printf("%5.2f,%5.2f",a,b);}

选择结构程序设计

if语句输入为3.6,-3.2输出为-3.20,3.60第35页,共54页,2024年2月25日,星期天选择结构程序设计

if语句If语句的嵌套嵌套的定义:在if语句中又包含一个或多个if语句。嵌套的一般形式:If()if()语句1else语句2Elseif()语句3else语句4(注意!!If与else的配对关系。)第36页,共54页,2024年2月25日,星期天嵌套注意的问题

if(a==1)if(b==2)printf("*****");if(a==1)if(b==2)printf("*****");elseprintf("####");else属于离它最近的并且能够匹配的if

第37页,共54页,2024年2月25日,星期天[例]输入三个数,按由小到大次序排列并输出。main(){flaota,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",a,b,c);}选择结构程序设计

if语句输入为:3,7,1输出为:1.00,3.00,7.00输入a,b,ca>b?YNswapa,b

a>c?YNswapa,cb>c?YNswapb,c输出a,b,c第38页,共54页,2024年2月25日,星期天选择结构程序设计

if语句main(){intx,y;scarf("%d",&x);if(x==0)y=0;elseif(x>0)y=1;elsey=-1;print("x=%d,y=%d\n",x,y);}[例]

-1(x<0)

y=0(x=0)1(x>0)开始输出Y结束输入XX<0X=0Y=-1Y=0Y=1YNYN输入为:4输出为:x=4,y=1第39页,共54页,2024年2月25日,星期天选择结构程序设计

if语句条件运算符max=(a>b)?a:b;条件表达式当(a>b)为真时,表达式取a的值当(a>b)为假时,表达式取b的值条件运算符是三目运算符

表达式1?表达式2:表达式3条件运算符的结合方向为"从右向左"

例如:a>b?a:c>d?c:d相当于a>b?a:(c>d?c:d)如果a=1,b=2,c=3,d=4,则条件表达式的值为4。第40页,共54页,2024年2月25日,星期天[例]输入一个字符,判断大小写,如是大写,则转换成小写,输出。main(){charchi;scarf("%c",&ch);ch=(ch>='A'&&ch<='Z')?(ch+32):ch;printf("%c",ch)}选择结构程序设计

if语句if(ch>='A'&&ch<='Z')ch=ch+32;elsech=ch;第41页,共54页,2024年2月25日,星期天switch语句第42页,共54页,2024年2月25日,星期天选择结构程序设计

switch语句Switch语句是多分支选择语句,也叫开关语句或者选择语句。一般形式:

switch(表达式){case常量表达式1:语句1;[Break;]case常量表达式2:语句2;[Break;]case常量表达式n:语句n;[Break;]default:语句n+1;}switch语句1语句2语句n语句n+1表达式常量1常量2常量ndefault︰(执行过程)第43页,共54页,2024年2月25日,星期天选择结构程序设计

switch语句[例]根据成绩等级打出成绩范围.main(){chargrade;printf("Enteryourgrade\n");scanf("%c",&grade);switch(grade);{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("error\n");}}输入为B输出为70~84第44页,共54页,2024年2月25日,星期天选择结构程序设计

switch语句grade流程图如下:'A''B''C''D'default输出"85~100"输出"70~84"输出"60~69"输出"error"输出"<60"第45页,共54页,2024年2月25日,星期天选择结构程序设计

switch语句switch语句的说明条件表达式的类型和常量表达式的类型必须一致;

switch后面的表达式一般情况下应该是有序型的量,目前学到的有序型是整数、字符。当表达式的值与某一个case后面的常量表达式的值相等时,就执行此case

后面的语句,若所有的

case

中的常量表达式的值都没有与表达式的值匹配,则执行default

后面的语句。每一个case

的常量表达式的值必须互不相同。多个case和default的出现次序不影响执行结果。case常量表达式只起语句标号作用;必须用break语句终止多个case连续执行,否则只要有一个case满足后,以下的语句全部无条件执行。多个case可共用一组执行语句。第46页,共54页,2024年2月25日,星期天选择结构程序设计

switch语句[课堂练习]给出百分制成绩,要求输出等级'A','B','C','D','E'。90分以上为'A',80—89分为'B',70—79分为'C',60—69分为'D',60分以下为'E'。思路:不能写成case'80--89':…...,因为case不能表示范围,成绩不能表示成常数表达式;

将以上范围分别用常量表示:90--99--->9,80--89-->8,….;

设分数为score,则score/10将范围变常量。第47页,共54页,2024年2月25日,星期天选择结构程序设计

switch语句main(){intscore,num;chargrade;scanf("%d",&score);num=score/10;switch(num){case10:grade='A';

break;case9:grade='A';break;case8:grade='B':break;case7:grade='C';break;case6:grade='D';break;default:grade='E';}printf("%d%c",score,grade);}输入为76输出为C第48页,共54页,2024年2月25日,星期天程序举例第49页,共54页,2024年2月25日,星期天选择结构程序设计

程序举例[例]写一程序判断某一年是否是闰年.main(){intyear,leap;printf("输入年份:");scanf("%d",&year);if(year%4==0){if(year%100!=0)leap=1;elseif(year%400==0)leap=1;elseleap=0}elseleap=0;if(leap)printf("%disleapyear\n",year);elseprintf("%disnotleapyear\n",year);}输入年份:2004输出为:2004isleapyear

第50页,共54页,2024年2月25日,星期天选择结构程序设计

程序举例year%4==0?year%100!=0?输出"闰年"输出"非闰年"leap=0输入yearnyynleap=0leap=1year%400=0?leap=1ynleap=1?yn第51页,共54页,2024年2月25日,星期天选择

温馨提示

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

评论

0/150

提交评论