已阅读5页,还剩60页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章分支结构程序设计,5.1关系运算符和表达式5.2逻辑运算符和表达式5.3逻辑表达式的跳跃5.4if语句5.5switch语句,5.1关系表达式,由关系运算符、圆括号把两个表达式连接起来的式子。表示条件若所表示的条件成立、则其值为1(非0)、否则其值为0。关系运算符:、=、=、!=例:a=2、39、a!=(a=8)、x+(y=3)=k*z、(a!=3)(kbcd应表示为aba=b=c=0;+a|+b后a、b值分别为0、6,a=1停止不算,值为0赋给a,停止不算,3、执行inta,b,c;a=b=c=-1;+a后a、b、c值分别为0、-1、0,1,a=0,2,不算,值为0,3,c=0,4,整体为0,例1:,main()charc=k;inti=1,j=2,k=3;floatx=3e+5,y=0.85;printf(%d,%dn,!x*!y,!x);printf(%d,%dn,x|i运行结果:0,01,00,1,0,X为非0,为非0,后面不算,为0,后面不算,5.4选择结构(if语句),5.4.1if语句的三种形式1、第一种形式为基本形式:ifif(表达式)语句语义:如果表达式的值为真,则执行其后的语句,否则不执行该语句。其过程可表示为下图。,表达式可以是任意合法表达式,后面不能加;,例2:voidmain()inta,b,max;printf(ninputtwonumbers:);scanf(%d%d,输入:2346输出:max=46,此语句用于提示输入,max=23,max=46,例3:voidmain()inta,b,c,t;printf(ninputtwonumbers:);scanf(%d%d%d,输入:1,6,2输出:621,实现数的互换,功能:输入三个数,按照从大到小顺序输出,例4:从键盘输入一个字符,判断它是否小写字母。若是,将其转换成大写字母,否则不进行转换,作后输出该字母。#includemain()charc,a;c=getchar();if(cz)a=c;/*判断非小写字母情况*/if(c=a)a=c-32;*判断是否是小写字母情况*/printf(%cn,a);,main()charc;c=getchar();if(c=a)a-=32;printf(%cn,a-32);,2、第二种形式为:if-elseif(表达式)语句1;else语句2;语义:如果表达式的值为真,则执行语句1,否则执行语句2。,后面不能加;,voidmain()inta,b;printf(inputtwonumbers:);scanf(%d%d,输入:2346输出:max=46,输入两个整数,输出其中大数,例2的改写,3、第三种形式为if-else-if形式:if(表达式1)语句1;elseif(表达式2)语句2;elseif(表达式3)语句3;elseif(表达式m)语句m;else语句n;,语义:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。如果所有的表达式均为假,则执行语句n。然后继续执行后续程序。,后面不能加;,此为真,做语句1,其它语句都不做,上面的语句为以下三种格式:1、空语句2、一个语句(不引起转移)3、前后加大括号的语句(复合语句),也叫程序段,如:inta;floatb;a=3;b=7.0;,;,允许在复合语句前部定义变量,只能在复合语句中使用,inta;a=3;floatb;b=7.0;,变量要在最前面定义,不能写成,#includestdio.hvoidmain()输入:Acharc;输出:Thisisacapitalletterc=getchar();if(c=0,例5,4、在使用if语句中应注意以下问题:1)在三种形式的if语句中,在if之后均为表达式。该表达式通常是逻辑表达式或关系表达式,但也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量。例如:if(a=5)语句;if(b)语句;都是允许的。只要表达式的值为非0,即为“真”。如在:if(a=5);中表达式的值永远为非0,所以其后的语句总是要执行的,当然这种情况在程序中不一定会出现,但在语法上是合法的。,又如,有程序段:if(a=b)printf(%d,a);elseprintf(a=0);本语句的语义是,把b值赋予a,如为非0则输出该值,否则输出“a=0”字符串。这种用法在程序中是经常出现的。,=为赋值运算符,比较运算符为=,2)在if语句中,条件判断表达式必须用括号括起来,在语句之后必须加分号。3)在if语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用括起来组成一个复合语句。但要注意的是在之后不能再加分号。例如:if(ab)a+;b+;elsea=0;b=10;,if(ab)a+;b+;;elsea=0;b=10;;,不能写成,5.4.2条件运算符和条件表达式,在条件语句中,只执行单个的赋值语句时,可使用条件表达式来实现。条件运算符为?和:,它是一个三目运算符,即有三个参与运算的量。条件表达式的一般形式为:表达式1?表达式2:表达式3求值规则为:如果表达式1的值为真,则以表达式2的值作为条件表达式的值,否则以表达式2的值作为整个条件表达式的值。,非0,0,例如条件语句:if(ab)max=a;elsemax=b;可用条件表达式写为:max=(ab)?a:b;执行该语句的语义是:如ab为真,则把a赋予max,如ab为假,则把b赋予max。,使用条件表达式时,还应注意以下几点:1)条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符。因此:max=(ab)?a:b可以去掉括号而写为max=ab?a:b2)条件运算符?和:是一对运算符,不能分开单独使用。3)条件运算符的结合方向是自右至左。例如:ab?a:cd?c:d应理解为ab?a:(cd?c:d)这也就是条件表达式嵌套的情形,即其中的表达式3又是一个条件表达式。,例6:计算,方法一:voidmain()floatx,y;scanf(”%f”,表达式,成立值为1,y=x3?x*x+2:3*x+7*x*x;,例7:从键盘输入任意的两个实数,按从小到大顺序输出这两个数,请编程实现。voidmain()floata,b;scanf(”%f%f”,代替,复合语句可以定义变量,a=a+b;b=a-b;a=a-bt=a;a=b;b=t,例8:P1055.5计算,方法一:main()floatx,y;scanf(”%f”,1=xscanf(”%f”,、可省略,y=x1?x:(x10?2*x-1:3*x-11);,(、)可省略,方法三:,if(x10)if(x1)y=x;elsey=2*x-1;elsey=3*x-11;,后不能加;,、和(、)可一起省略,y=x10?(x1?x:2*x-1):3*x-11;,若上面分段函数改为则程序改为voidmain()floatx,y;scanf(”%f”,此语句出错与否都输出,此程序有否缺陷?,程序应改为voidmain()floatx,y;scanf(”%f”,5.4.3if语句的嵌套,当if语句中的执行语句又是if语句时,则构成了if语句嵌套的情形。其一般形式可表示如下:if(表达式)或if(表达式)if语句;if语句;elseif语句;在嵌套内的if语句可能又是if-else型的,这将会出现多个if和多个else重叠的情况,这时要特别注意if和else的配对问题。,加;,如:,if(表达式1)if(表达式2)语句1;else语句2;其中的else究竟是与哪一个if配对呢?是if(表达式1)还是if(表达式1)if(表达式2)if(表达式2)语句1;语句1;elseelse语句2;语句2;注意:if与else的配对关系else总是与它前面最近的if配对,因此对上述例子应按前一种情况理解。,例10:写出下面两程序的输出结果,1voidmain()intx=2,y=-1,z=2;if(xy)if(y0)z=0;elsez=1;printf(”%dn”,z);结果:,一个语句,2,voidmain()inta=1,b=3,c=5,d=4;if(ab)if(cd)x=1;elseif(ac)if(bd)x=2;elsex=3;elsex=6;elsex=7;printf(”%dn”,x);结果:,2,为了使逻辑关系清晰:(1)按下面所示书写程序:,voidmain()inta=1,b=3,c=5,d=4;if(ab)if(cd)x=1;elseif(a=0)if(x0)y=1;printf(”x0,y=%dn”,y);elsey=-1;printf(”xBn);elseprintf(ABn);elseprintf(A=Bn);,2346,AB,例12:输入一年份,判别是否闰年。,year被4整除,真,真,真,真,假,假,假,假,year被100整除,leap=0,leap=1,leap=1,leap=0,leap,year被400整除,输出闰年,输出非闰年,voidmain()intyear,leap;scanf(“%d”,根据leap输出结果,5.5switch语句(另一种分支语句),5.5.1格式:switch(任意类型表达式)case常量表达式1:语句1;case常量表达式2:语句2;case常量表达式n:语句n;default:语句n+1;注:常量表达式中运算对象只能为常量或符号常量(整型或字符型),各个值必须互不相同default允许出现在前面或中间switch(任意类型表达式)后不带分号,不要忘记空格,不带;,5.5.2功能:若switch后面表达式值的整数(字符常量)部分与某个case后面表达式值相等,则就执行该case后面的语句,否则就执行default后面的语句,例13:,voidmain()inta;printf(inputintegernumber:);scanf(%d,输入:3,输出:WednesdaThursdayFridaySaturdaySundayerror,“case常量表达式”相当于一个语句标号,表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch语句,所以出现了继续执行所有后面case语句的情况。,5.5.3break语句:专用于跳出switch语句,在每一case语句之后增加break语句,使每一次执行之后均可跳出switch语句,从而避免输出不应有的结果。voidmain()switch(a)case1:printf(Mondayn);break;case2:printf(Tuesdayn);break;case3:printf(Wednesdayn);break;case4:printf(Thursdayn);break;case5:printf(Fridayn);break;case6:printf(Saturdayn);break;case7:printf(Sundayn);break;default:printf(errorn);,Switch语句常用形式:,switch(任意类型表达式)case整型或字符型常量表达式1:语句1;break;case整型或字符型常量表达式2:语句2;break;case整型或字符型常量表达式n:语句n;break;default:语句n+1;,default后面不加break,在使用switch语句时还应注意以下几点:,1)case后的各常量表达式的值不能相同,否则会出现错误。2)case后,允许有多个语句,可以不用括起来。3)case和default子句的先后顺序可以变动,而不会影响程序执行结果。4)default子句可以省略不用。,例14:若有宏定义:#definek2和定义:floatw;inta=2,b;则合法的switch语句是Aswitch(w)Bswitch(a+b)case1.0:printf(”*n”);case1printf(”*n”);case2.0:printf(”*n”);caseaprintf(”*n”):Cswitch(w+1.76)Dswitch(a);casek-1:printf(”*n”);case1:printf(”*n”);default:printf(”n”);case2:printf(”*n”);case1+2:printf(”*n”);default:printf(”n”);,C,不能为实型,不能为变量,少;,不能加分号,例15:P105,先接收从键盘输入的一个等级制成绩,然后输出对应的百分制成绩。转换规则如下:A:85100B:7084C:6069D60,voidmain()chargrade;scanf(“%c”,例16:先接收从键盘输入的一个百分制成绩,然后输出对应的五分制成绩。转换规则如下:90100A8089B7079C6069D60E,voidmain()intcj;printf(”Inputaintegernumber(0-100)n”);scanf(“%d”,90100A8089B7079C6069D0,有解,题目改为:求二次方程ax2+bx+c=0的两个根,a!=0,一定有解要认真分析题目,达到题目要求,voidmain()doublea,b,c,x1,x2,disc,p,q;scanf(”%lf,%lf,%lf”,例19:输入某年某月某日,判断这一天是这一年的第几天,需考虑闰年的情形。注:符合以下条件之一是闰年:能被4整除,但不能被100整除;能被400整除。算法分析:以5月4日为例,先把14月份的天数加起来,然后再加上本月的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年离婚财产分割及孩子抚养协议书
- 施工劳务承包合同协议书样本
- 产业孵化基地入住协议
- 使用授权协议书要点解析
- 房屋互换合同格式
- 员工实习期劳务协议
- 中外专有技术转让协议
- 标准版委托检验检测协议书
- 5.2 凝聚价值追求 (大单元教学设计) 2024-2025学年统编版道德与法治九年级上册
- 建筑项目施工合同书范本
- 浮动码头施工方案
- Poka-Yoke防错技术(完整版)
- 保安交接班记录表(2)
- 神明—EZflame火焰检测系统
- 个人简历求职简历课件.ppt
- 2018年江苏高考满分作文:在母语的屋檐下
- 新青岛版五四制2021-2022四年级科学上册实验指导
- 小学四年级音乐课程标准
- 民用机场竣工验收质量评定标准
- 双向细目表和单元测试卷及组卷说明
- 离子色谱法测定空气中二氧化硫
评论
0/150
提交评论