已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,2,4.1关系运算及其表达式,所谓“关系运算”实际上就是“比较运算”,即将两个数据进行比较,判定两个数据是否符合给定的关系。关系操作数可以是数值类型数据和字符型数据。一、关系运算符及其优先次序1关系运算符C语言提供6种关系运算符:=!=注意:在语言中,“等于”关系运算符是双等号“=”,而不是单等号“=”(赋值运算符)。2优先级(1)在关系运算符中,前4个优先级相同,后2个也相同,且前4个高于后2个。(=)(=!=)(2)与其它种类运算符的优先级关系关系运算符的优先级,低于算术运算符,但高于赋值运算符。a+bb+c等效于(a+b)(b+c)。(2+a)=(b-a)等效于2+a=b-a。,3,3.结合性:自左至右;例如:inta=2,b=3,c=1;abb,值是0,再计算033,值是1,再计算1b,a+bc-d,(a=3)=b,(ab)=(bc)2关系表达式的值:若为真,则结果为1;若为假,则结果为0。由于语言没有逻辑型数据,所以用整数“”表示“逻辑真”,用整数“”表示“逻辑假”。,4,例如,假设num1=3,num2=4,num3=5,则:(1)num1num2的值=0。(2)(num1num2)!=num3的值=1。(3)num1num2num3的值=1。思考题:任意改变num1或num2的值,会影响整个表达式的值吗?为什么?(4)(num1=0”、同时“x=0)b=1;c=a+结果:a为0,b为0,c为0,d为1。(3)逻辑表达式一般用于控制语句中的条件:例如:(1)n是小于m的偶数:nb?a:bmax及赋值表达式的值均为5;ab?a:b+1条件表达式的值为4。,第2章C语言的基本数据类型与表达式,12,在C语言中,简单的分支选择可以用条件语句实现。分段函数:用条件语句实现:y=x0?3-x:2*x;此式求值取决于x的值(1)若x赋值又如:-a=b+?a+:b+(a=a-1;)4=3(b=b+1;)?a+:b+a为4b为404(b=b+1;)表达式值为4,b为5a值为4,b值为5,条件表达式的值为4。结合性:自右至左;y=x10?x/10:x10?x/10:(xmax)max=num2;这种优化形式的基本思想是:首先取一个数预置为max(最大值),然后再用max依次与其余的数逐个比较,如果发现有比max大的,就用它给max重新赋值,比较完所有的数后,max中的数就是最大值。这种方法,对从3个或3个以上的数中找最大值的处理,非常有效。请读者仔细体会。,18,3阶梯式if-else-if语句一般形式:if(表达式1)语句1elseif(表达式2)语句2else(表达式3)语句3,19,案例4.3从键盘上输入一个百分制成绩score,按下列原则输出其等级:score90,等级为A;80score90,等级为B;70score80,等级为C;60score70,等级为D;scorenum2)max=num1;elsemax=num2;语句:if行后面的赋值语句“max=num1;”分号不能省略。但不要误认为if和else是2个独立的语句,它们都属于if语句中的一部分,else是if语句的子句。,23,(3)else子句(可选)是if语句的一部分,必须与if配对使用,不能单独使用。(4)if语句允许嵌套,但嵌套的层数不宜太多。在实际编程时,应适当控制嵌套层数(23层)。(5)if语句嵌套时,else子句与if的匹配原则:与在它上面、距它最近、且尚未匹配的if配对。为明确匹配关系,避免匹配错误,强烈建议:将内嵌的if语句,一律用花括号括起来。,24,案例4.5写一程序,从键盘上输入1年份year(4位十进制数),判断其是否闰年。闰年的条件是:能被4整除、但不能被100整除,或者能被400整除。算法设计要点:(1)如果能被整除,则余数为,即如果的值等于,则表示能被整除!(2)首先将是否闰年的标志leap预置为0(非闰年),这样仅当year为闰年时将leap置为1即可。这种处理两种状态值的方法,对优化算法和提高程序可读性非常有效,请读者仔细体会。参考程序如下:main()intyear,leap=0;/*leap=0:预置为非闰年*/printf(Pleaseinputtheyear:);scanf(%d,25,if(year%4=0),26,4.4switch语句,C语言提供了switch语句直接处理多分支选择。switch语句是多分支选择结构,它与break语句配合使用可以构成多分支开关结构。switch(表达式)case常量表达式1:语句组1case常量表达式2:语句组2case常量表达式n:语句组ndefault:语句组n+1,27,流程如图,28,如果在每个case分支的语句组之后加上一条break语句,则就得到了多分支开关结构的switch语句,即:switch(表达式)case常量表达式1:语句组1break;case常量表达式2:语句组2break;case常量表达式n:语句组nbreak;default:语句组n+1,29,控制流程图,30,执行过程(1)当switch后面“表达式”的值,与某个case后面的“常量表达式”的值相同时,就执行该case后面的语句(组);当执行到break语句时,跳出switch语句,转向执行switch语句的下一条。(2)如果没有任何一个case后面的“常量表达式”的值,与“表达式”的值匹配,则执行default后面的语句(组)。然后,再执行switch语句的下一条。,31,switch(i)case1:printf(An);case2:printf(Bn);case3:printf(Cn);case4:printf(Dn);default:printf(En);,看下面的例子:,假设i=3时,则会从i=3时做起的语句。,如果给每条语句加上break;,break;break;break;break;,这样就只执行一条语句,当表达式的值与某一个常量相等时,就执行后面的语句;若无break语句,执行该语句后,流程控制转移到下一个分支:继续执行这一个分支的语句,一至到最后下个语句执行完。,运行结果为:C,32,案例4.6从键盘上输入一个百分制成绩score,按下列原则输出其等级:score90,等级为A;80score90,等级为B;70score80,等级为C;60score70,等级为D;score60,等级为E。main()intscore,grade;printf(“Inputascore(0100):”);scanf(“%d”,case5:case4:,33,case3:case2:case1:case0:printf(“grade=En”);break;default:printf(“Thescoreisoutofrange!n”);程序运行情况如下:Inputascore(0100):85grade=B3说明(1)switch后面的“表达式”,可以是int、char和枚举型中的一种。(2)每个case后面“常量表达式”的值,必须各不相同,否则会出现相互矛盾的现象(即对表达式的同一值,有两种或两种以上的执行方案)。,34,(3)case后面的常量表达式仅起语句标号作用,并不进行条件判断。系统一旦找到入口标号,就从此标号开始执行,不再进行标号判断,所以必须加上break语句,以便结束switch语句。思考题:如果去掉案例4.6程序中的所有break语句,且输入的成绩为75,输出会如何?(4)各case及default子句的先后次序,不影响程序执行结果。(5)多个case子句,可共用同一语句(组)。例如,在案例4.6中的“case10:”和“case9:”共用语句“printf(grade=An);break;”,“case5:”“case0:”共用语句“printf(grade=En);break;”。(6)用switch语句实现的多分支结构程序,完全可以用if语句或if语句的嵌套来实现。,35,4.5选择结构程序设计举例,案例4.7求一元二次方程ax2+bx+c=0的解(a0)。#includemath.hmain()floata,b,c,disc,x1,x2,p,q;scanf(“%f,%f,%f”,36,elsep=-b/(2*a);/*求出两个共轭复根*/q=sqrt(fabs(disc)/(2*a);printf(“x1=%7.2f+%7.2fin“,p,q);/*输出两个共轭复根*/printf(”x2=%7.2f-%7.2fin“,p,q);说明:由于实数在计算机中存储时,经常会有一些微小误差,所以本案例判断disc是否为0的方法是:判断disc的绝对值是否小于一个很小的数(例如10-6)。,37,案例4.8已知某公司员工的保底薪水为500,某月所接工程的利润profit(整数)与利润提成的关系如下(计量单位:元):profit1000没有提成;1000profit2000提成10%;2000profit5000提成15%;5000profit10000提成20%;10000profit提成25%。算法设计要点:为使用switch语句,必须将利润profit与提成的关系,转换成某些整数与提成的关系。分析本题可知,提成的变化点都是1000的整数倍(1000、2000、5000、),如果将利润profit整除1000,则当:profit1000对应0、11000profit2000对应1、22000profit5000对应2、3、4、55000profit10000对应5、6、7、8、9、1010000profit对应10、11、12、,38,为解决相邻两个区间的重叠问题,最简单的方法就是:利润profit先减1(最小增量),然后再整除1000即可:profit1000对应01000profit2000对应12000profit5000对应2、3、45000profit10000对应5、6、7、8、910000profit对应10、11、12、main()longprofit;intgrade;floatsalary=500;printf(Inputprofit:);scanf(%ld,/*将利润-1、再整除1000,转化成switch语句中的case标号*/,39,switch(grade)case0:break;/*profit1000*/case1:salary+=profit*0.1;bre
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 48000.1-2025标准数字化第1部分:通用指南
- 公司电脑运输合同范本
- 冰粉摊位出售合同范本
- 农村换工雇工合同范本
- 养老农庄出租合同范本
- 劳动合同转签工龄协议
- 新能源开发项目计划
- 合同回扣协议模板模板
- 农田抽水灌溉合同范本
- 农村厂房租聘合同范本
- 艺人独家经纪合同(标准版)
- 福建省银行业专业人员初级职业资格考试(银行业法律法规与综合能力)试题及答案(2025年)
- 商业银行统一报表平台:设计理念、技术实现与实践成效
- 《守望成长法治护航》法制教育主题班会
- (正式版)DB1501∕T 0021-2021 《园林绿地分级养护技术规程》
- 乌鲁木齐市既有建筑改造消防设计与审查指南
- 2025小红书S+级项目《宝藏目的地》招商方案
- IMPA船舶物料指南(电子版)
- 2025年国庆节(庆祝新中国成立76周年)全文课件
- 光伏冬季防火安全培训课件
- 甘肃跟踪审计管理办法
评论
0/150
提交评论