第4章条件语句_第1页
第4章条件语句_第2页
第4章条件语句_第3页
第4章条件语句_第4页
第4章条件语句_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

1、第四章 逻辑运算和判断选取控制1. 关系运算符和关系表达式关系运算符用于两个数值之间的比较运算。语言提供6种关系运算符,它们是:、=、=、!=优先级相同优先级相同高到低关系运算符、算术运算符和赋值运算符的优先级为:算术运算符关系运算符赋值运算符低高 例如: ca+b 等效于 c(a+b) ab!=c 等效于 (ab)!=c a=bc 等效于 a=(bc 等效于 a=(bc)关系表达式:用关系运算符将两个表达式连接起来的式子。关系表达式运算结果为:“真”或“假”值。语言用1代表“真”值,用0代表“假”值。同时系统在运算时以非0为“真”值,以0为“假”值。例如:若 a=3,b=2,c=1 f=ab

2、c 则f的值为0。. 逻辑运算符和逻辑表达式语言提供3种逻辑运算符:逻辑运算符 结合性 优先级& 与 自左至右 中 | 或 自左至右 低 ! 非 自右至左 高逻辑表达式:用逻辑运算符将关系表达式或逻辑量连接起来的式子。运算结果为:“真”或“假”值。系统在运算时以非0为“真”值,以0为“假”值。逻辑运算:ab&00010011ab|0111001101a!a例如: 4&0|2 的值为1 5&!0 的值为1与运算或运算非运算 运算符 优先级 逻辑非! 高算术运算符 关系运算符 &和| 赋值运算符 低逻辑、关系、算术和赋值运算符的优先级为:例如:(ab)&am

3、p;(xy) 可以写成ab&xy (a=b)|(x=y) 可以写成 a=b|x=y (!a)|(ab) 可以写成 !a|ab 53&2|8b)&n=c4) 设 a=1,b=2,c=3,m=1,n=1。 则 m为0 , n 为 1。abc000非0非010abc非00001非0非0&运算|运算求年份是否闰年的表达式 3. if 语句 作用:判定给定的条件,决定执行不同段的程序。if语句的格式: (a)if (表达式) 语句1 else 语句2 表达式语句1语句2真(非0)假(0)只能用一个语句,若有多个语句可用复合语句。执行过程:括号“()”不能缺省例:if (x

4、y) z=x; else z=y;例:if (xy) printf(%d,%d,x,y); else printf(%d,%d,y,x);(b) if 语句可以省略else部分,变为如下格式:if (表达式) 语句执行过程:表达式结果为真,执行表达式后面的语句,否则不执行该语句,而执行if语句下面的语句。 例 1 输入两个实数,按代数值由小到大次序输出这两个数。main() float a,b,t; scanf(%f,%f,&a,&b); if (ab) t=a; a=b; b=t; printf(%5.2f,%5.2f,a,b); abt tab例:if (x%2=0) pr

5、intf(“It is an even numbern”); else printf(“It is an odd numbern”);例2 输入三个实数,按代数值由小到大次序输出这三个数。main() float a,b,c,t; scanf(%f,%f,%f,&a,&b,&c); if (ab) t=a;a=b;b=t; if (ac) t=a;a=c;c=t; if (bc) t=b;b=c;c=t; printf(%5.2f,%5.2f,%5.2f,a,b,c); abcabc小大(c) if语句实现多分支选择结构的格式: if (表达式1) 语句1 else i

6、f (表达式2) 语句2 else if (表达式m) 语句m else 语句n表达式1语句1语句2真(非0)假(0)执行过程:表达式2真(非0)表达式3语句3真(非0)表达式4语句4语句5假(0)假(0)假(0)真(非0) if (score=90) l=A; else if (score=80) l=B; else if (score=70) l=C; else if (score=60) l=D; else l=E; Exampleif语句的嵌套:在if语句的语句1或语句2部分,若使用if语句,称为if语句 的嵌套。如: if (表达式1) if (表达式2) 语句1 else 语句2

7、else if (表达式3) 语句3 else 语句4内嵌if语句例 3 有一函数如下,编一程序,输入一个x值,输出y值。 -1 (x0)main() int x,y; scanf(%d,&x); if (x0) y=1; printf(x=%d,y=%dn,x,y);main()int x,y; scanf(%d,&x); if (x=0) if (x0) y=1; else y=0; else y=-1;注意:If语句嵌套使用时,if与else是以最近匹配规则来匹配。例: y=-1; if (x!=0) if(x0) y=1; else y=0;例 : y=0; if (x

8、=0) if(x0) y=1; else y=-1;请分析它们的运行结果?例: y=-1; if (x0) y=1; if (x=0) y=0;例: y=0; if (x!=0) if(x0) y=1; else y=-1;.多分支选择结构亦可用switch语句实现:A1A2AiAnKk=k1k=k2k=kik=knKBswitch 语句 格式:switch(表达式) case 常量常量表达式表达式1:语句序列1 case 常量常量表达式表达式2:语句序列2 case 常量常量表达式表达式3:语句序列3 case 常量常量表达式表达式n:语句序列n default: 语句序列n+1 执行过程为

9、:当表达式的值等于常量表达式i的值,则则从语句序列从语句序列i开始执行到语句序列开始执行到语句序列n+1为止为止 。若表达式的值不等于任何一个常量表达式的值,则只执行default后面的语句。 一般在每个语句序列之后加一个break语句,这样在执行语句序列i之后,使流程跳出switch结构,实现多分支选择结构。一般为整型或字符型表达式可以是一个语句,也可以是几个语句。Ls4_2.c例4:编写一个能进行两个操作数加减乘除四则运算的计数器模拟程序。main()char op; float x,y; printf(“Please input an arithmetic expression:); s

10、canf(%f%c%f,&x,&op,&y); switch (op) case + : printf(=%fn,x+y); break; case - : printf(=%fn,x-y); break; case * : printf(=%fn,x*y); break; case / : if ( y!=0.0) printf(=%fn,x/y); else printf(Divisor is zeron); break; default: printf(Illegal operatorn); 输入:两个操作数和运算符计算:根据运算符确定运算输出:运算结果+进行加运

11、算。-进行减运算。*进行乘运算。/进行除运算。例:分析下列程序的输出结果。(ls4_.c) main() int i=1,j=0,m=1,n=2; switch(i+) case 1: m+;n+; case 2: switch(+j) case 1: m+; case 2: n+; case 3: m+;n+;break; case 4: m+;n+; printf(m=%d,n=%dn,m,n); 执行结果为:m=4,n=5switch语句的嵌套程序举例 写程序,判某一年是否闰年。输入:年(year)计算:判断是否闰年输出:闰年或非闰年(leap)能被4整除,但不能被100整除。能被4整除

12、,又能被400整除。main()int year, leap; scanf(“%d”,&year); if (year%4=0) if (year%100=0) if (year%400=0) leap=1; else leap=0; else leap=1; else leap=0; if (leap) printf(“%d is”,year); else printf(“%d is not”,year); printf(“ a leap yearn”); Lx4_1.cIf (leap) if(leap=1) if(leap=1)?main()int x; scanf(“%d”,&

13、amp;x); if (x0) x=-x; if (x10) printf(“x=%d y=1n”,x); else if (x100) printf(“x=%d y=2n”,x); else if (x1000) printf(“x=%d y=3n”,x); else if (x0,有两个不等实根。b2-4ac0,有两个共轭复根。#include math.hmain()float a,b,c,disc,x1,x2,realpart,imagpart; scanf(%f,%f,%f,&a,&b,&c); printf(The equation ); if (fabs(

14、a)=1e-6) printf(is not quadratic); else disc=b*b-4*a*c; if (fabs(disc)1e-6) x1=(-b+sqrt(disc)/(2*a); x2=(-b-sqrt(disc)/(2*a); printf( has distinct real roots:%8.4fand%8.4fn,x1,x2); else realpart=-b/(2*a); imagpart=sqrt(-disc)/(2*a); printf(has complex roots:n); printf(%8.4f+%8.4fin,realpart,imagpart

15、); printf(%8.4f-%8.4fin,realpart,imagpart); Lx4_2.c请问该程序有无问题?给出一百分制成绩,要求输出成绩等级A、B、。90分以上为A ,8089分为B ,7079分为 ,6069分为 ,60分以下为 。main()int x; scanf(%d,&x); if (x100|x0) printf(“input errorn); else x=x/10; switch (x) case 10: case 9: printf(An);break; case 8: printf(Bn);break; case 7: printf(Cn);brea

16、k; case 6: printf(Dn);break; default: printf(En); Lx4_3.c 运输公司对用户计算运费,距离越远,每公里的费用越低。标准如下:main()int s;float p,w,d,f; scanf(“%f,%f,%d”,&p,&w,&s); if (s250 ) d=0; else if (s500) d=2; else if (s1000) d=5; else if (s2000) d=8; else if (s3000) d=10; else d=15; f=p*w*s*(1-d/100.0); printf(“frei

17、ght=%f”,f); S250 没有折扣 250s500 2%折扣 500s1000 5%折扣 1000s2000 8%折扣 2000s3000 10%折扣3000s 15 %折扣运费f=每吨每公里运价p*重量w*距离s*(1-折扣d/100)S250 S/250=0没有折扣250s500 S/250=12%折扣500s1000 S/250=2,35%折扣1000s2000 /250=4,5,6,78%折扣2000s=3000) c=12;else c=s/250;switch(c)case 0:d=0;break; case 1:d=2;break; case 2: case 3:d=5;

18、break; case 4:case 5:case 6:case 7: d=8;break;case 8:case 9:case 10:case 11:d=10;break;case 12:d=15;break;f=p*w*s*(1-d/100.0);printf(“%f”,f);将第一栏的条件转换为第二栏的常量,才可用switch 语句注意 输入一个日期(含年、月、日),输出该日是该年的第几天。main() int year,month,day,d=0,flag=1; printf(“nplease input year,month,day:”); scanf(“%d%d%d”,&year,&month,&

温馨提示

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

评论

0/150

提交评论