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

下载本文档

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

文档简介

会计学1C语言程序设计选择结构程序设计关系运算符<小于<=小于或等于 > 大于 优先级高(6)>=大于或等于==等于 优先级低(7)!=不等于 第1页/共34页关系表达式比较两个运算数,表达式成立则值为

1(true),否则值为0(false): x>y //未知

x+5>x //1(true) x+5<x //0(false) x+5==x //0(false) x+5>=x //1(true)第2页/共34页关系运算符与算术运算符算术运算符的优先级是3(乘除余)和4(加减)以下两个表达式的值是多少?

10+(20<25),(7>10)*100以下四个表达式,如果要加括号,并且不能改变原来的优先次序,应该怎么加?

10+20<25, x*y>z

z==x>y,z!=x<y第3页/共34页关系运算符的结合方向关系运算符的结合方向是自左至右设x、y、z的值分别是5、3、1,那么关系表达式x>y>z的值是多少?如果它们的值分别是1、3、5呢?数学书上x>y>z的意思是x大于y,y大于z,这个意思用C语言来表达,应该是:

x>y&&y>z第4页/共34页关系运算符和赋值运算符重温:赋值运算符的优先级低(14)x=y>z等价于下面哪个表达式?

(x=y)>z x=(y>z)若x,y,z的初值分别是5,3,1,下面表达式的值是多少?

x=y>z 第5页/共34页逻辑值表

第一行是标题。以第二行为例,读法是: 若a真b真,则非a和非b均假,a&&b为真,a||b亦为真。 逻辑表达式求值是自左至右的,一旦发现已经可以根据一个运算数求值,就不会再对第二个运算数求值。例如,在a&&b中,如果已知a假,则整个逻辑表达式为假,不必再考虑b的值第6页/共34页逻辑运算符的优先级和结合方向逻辑反的结合方向是自右至左,其他逻辑运算符的结合方向均为自左至右逻辑非!,优先级2算术运算符,优先级3和4关系运算符,优先级6和7逻辑与&&,优先级11逻辑或||,优先级12赋值运算符,优先级14第7页/共34页表达式求值

假定以下变量a,b,c,d的值分别是0,1,2,3,变量x和y的值未知,请对下列表达式求值:x<=y&&10<12x>=y&&x!=xa>b||3>1a<b||x>x-1a&&b||c&&da&&(b||c)&&d第8页/共34页表达式求值

假定a,b,c的值分别是3,4,5a+b>c&&b==c((a+b)>c)&&(b==c)a||b+c&&b–c!(a>b)&&!c||1!(x=a)&&(y=b)&&0!(a+b)+c–1&&b+c/2第9页/共34页练习写一些表达式判断是否“及格”(60分及格)判断是否“英文字母”判断是否“小写英文字母或阿拉伯数字”判断是否“能被4整除”判断是否“能被4整除但不能被100整除”判断是否“闰年”第10页/共34页形式1:if(e)s;是否执行s,取决于e的值sample:输入’g’,‘0’,两个printf语句的执行情况如何?

#include<ctype.h> if(isletter(ch))/*判断ch是否字母*/ printf(“%cisaletter\n”,ch); printf(“thankyou.\n”);第11页/共34页形式2:if(e)s1;elses2;e的值非0,执行s1,否则执行s2sample:输入’g’,‘0’,两个printf语句的执行情况如何?

if(isletter(ch)) printf(“%cisaletter\n”,ch); else printf(“%cisnotaletter\n”,ch);第12页/共34页s可以是一个复合语句sample:三个变量的排序(升序)

if(a>b){tmp=a;a=b;b=tmp;} if(a>c){tmp=a;a=c;c=tmp;} if(b>c){tmp=b;b=c;c=tmp;}第13页/共34页形式3:多分枝的if语句注意下面语句的逻辑关系:

if(n>500)cost=0.15; elseif(n>300)cost=0.10; elseif(n>100)cost=0.075; elseif(n>50)cost=0.05; elseconst=0.0;例如,第二行相当于说:

if(n<=500&&n>300)cost=0.10;如果按n值从小到大的顺序来写多分枝的if语句,应该怎么写?第14页/共34页形式4:嵌套的if语句if(e)s1;elses2中,s1或s2本身又是一个if语句形式3也是嵌套的if语句,但它总是在s2中嵌套

if(e) if(e1)s1; elses2; else if(e2)s3; elses4;第15页/共34页写法1if(x<0)y=-1;if(x==0)y=0;if(x>0)y=1;

语法、逻辑都没有错,运行也正确,但效率低第16页/共34页写法2和写法3if(x<0)y=-1;else if(x==0)y=0; elsey=1;if(x>=0) if(x>0)y=1; elsey=0;elsey=-1;第17页/共34页if与else的匹配原则就近匹配: 嵌套的if语句中,else总是跟离它最近的上一个尚无匹配的if匹配,不管缩进形式是怎样的:if(e) if(e1)s1;elses2;/*跟②匹配*/else /*跟①匹配*/if(e2)s3;elses4;/*跟⑤匹配*/第18页/共34页写法4和写法5y=-1;if(x!=0) if(x>0)y=1;elsey=0;y=0;if(x>=0) if(x>0)y=1;elsey=-1;第19页/共34页条件表达式e1?e2:e3其中,?:是一个条件运算符,三目的,优先级为13(高于赋值运算符),结合方向是自右至左条件表达式的值是这样计算的:先对e1求值如果e1的值非0,则条件表达式的值为e2否则,条件表达式的值为e3第20页/共34页条件表达式的应用用于二分枝的选择结构,例如:

if(ch<128)return0; elsereturn1;

可写成以条件表达式为宾语的返回语句:

returnch<128?0:1;下面这个if语句如何改写为以条件表达式为右值的赋值语句?

if(score>=60)grade=‘Y’; elsegrade=‘N’;第21页/共34页条件表达式的应用条件运算符是自右至左结合的,例如:

y=x==0?0:x>0?1:-1相当于 y=x==0?0:(x>0?1:-1)因此,条件表达式也可以用于多分枝选择不过,为了容易理解,一般应该用if语句来表达第22页/共34页switch语句多分枝选择:

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”); }第23页/共34页switch语句与多分枝if语句的关系一般来说,能用switch语句的也能用多分枝if语句来表达,例如:

if(grade==‘A’)printf(“85~100”\n”); elseif(grade==‘B’)printf(“70~84\n”); elseif(grade==‘C’)printf(“60~69”\n”); elseif(grade==‘D’)printf(“<60\n”); elseprintf(“error\n”);第24页/共34页switch语句的语法每个标号语句都是一个入口依次检查每个case语句,看是否有合适的入口;若每个case语句都不合适,则从default语句进入;若无default语句,则无法进入一旦找到了合适的入口,便执行此后的所有语句,除非遇到return语句或break语句因此,break语句很重要,应在每个case后都加break,除非有理由不加第25页/共34页几个case共享一个动作如果几个case的动作相同,可以只写一次,例如:

switch(month){//求一个月有几天

case2:if(is_leap_year(year))days=29;elsedays=28; break; case4: case6: case9: case11:days=30;break; default:days=31; }第26页/共34页例5.5判断某一年是否闰年输入:年份数字(大于0)输出:打印“是闰年”或“不是闰年” 教材提供了三种写法,请比较优劣:嵌套的if语句多分枝的if语句二分枝的if语句第27页/共34页求三个数中的最大者if(a>b)if(a>c)returna;elsereturnc;elseif(b>c)returnb;elsereturnc;intm=a;if(b>m)m=b;if(c>m)m=c;returnm;

你喜欢哪种写法?第28页/共34页例5.6求一元二次方程的根输入:系数a,b,c过程和输出:a==0:不是一元二次方程disc=b*b–4*a*c;if(disc绝对值近乎0)打印两个相等实根if(disc绝对值大于0)打印两个不等实根else打印两个共轭复根第29

温馨提示

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

评论

0/150

提交评论