《选择结构程序设计》PPT课件.ppt_第1页
《选择结构程序设计》PPT课件.ppt_第2页
《选择结构程序设计》PPT课件.ppt_第3页
《选择结构程序设计》PPT课件.ppt_第4页
《选择结构程序设计》PPT课件.ppt_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

,第四章 选择结构程序设计,4.1分支结构中常用运算符,一、关系运算符 所谓“关系运算”实际上就是“比较运算”,即将两个数据进行比较,判定两个数据是否符合给定的关系。 例如, 53 则结果为“真true”,即条件成立; 23 则结果为“假false”,即条件不成立。 1、C语言提供6种关系运算符 (wai table 4.1) (大于), =(大于或等于), =(等于), !=(不等于) 注意:在语言中,“等于”关系运算符是双等号“= =”,而不是单等号“= ”(赋值运算符)。,2优先级 (1)在关系运算符中,前4个优先级相同,后2个也相同,且前4个高于后2个。 (2)与其它种类运算符的优先级关系 关系运算符的优先级,低于算术运算符,但高于赋值运算符。 3、关系表达式 关系表达式的概念 所谓关系表达式是指,用关系运算符将两个表达式连接起来,进行关系运算的式子。 例如,下面的关系表达式都是合法的: ab,a+bc-d,(a=3)=b,(ab)= =(bc) 关系表达式的值逻辑值(非“真”即“假”)true or false。 由于语言没有逻辑型数据,所以用整数“”表示“逻辑真”,用整数“”表示“逻辑假”。,例如,假设num1=3,num2=4,num3=5,则: (1)num1num2的值=。 (2)(num1num2)!=num3的值=。 (3)num1num2num3的值。 思考题:任意改变num1或num2的值,会影响整个表达式的值吗?为什么? (4)(num1num2)+num3的值=,二、逻辑运算符 关系表达式只能描述单一条件,例如“x=0”。如果需要描述“x=0”、同时“x=0) & (x5) ,! (x= =0), (year%4=0)&(year%100!=0)|(year%400=0),(2)运算规则 例如,假定x=5,则(x=0) & (x5)的值为“假”。,2逻辑运算符的运算优先级 (1)逻辑非的优先级最高,逻辑与次之,逻辑或最低,即: !(非) &(与) |(或) (2)与其它种类运算符的优先关系 ! 算术运算 关系运算 & | 赋值运算 2 逻辑表达式 (year%4=0)&(year%100!=0)|(year%400=0) 判断一个年份是否是闰年的逻辑表达式 逻辑表达式的值也是一个逻辑值(非“真”即“假”)。,2逻辑量的真假判定和非 语言用整数“”表示“逻辑真”、用“”表示“逻辑假”。但在判断一个数据的“真”或“假”时,却以和非为根据: 如果为,则判定为“逻辑假”; 如果为非,则判定为“逻辑真”。 例如,假设num=12,则: !num的值= ,num=1 num31的值=1。 3说明 (1)逻辑运算符两侧的操作数,除可以是和非的整数外,也可以是其它任何类型的数据,如实型、字符型等。,(2)在计算逻辑表达式时,只有在必须执行下一个表达式才能求解时,才求解该表达式(即并不是所有的表达式都被求解)。换句话说: 1)对于逻辑与运算,如果第一个操作数被判定为“假”,系统不再判定或求解第二操作数。 2)对于逻辑或运算,如果第一个操作数被判定为“真”,系统不再判定或求解第二操作数。 例如,假设n1、n2、n3、n4、x、y的值分别为1、2、3、4、1、1,则求解表达式“(x=n1n2)&(y=n3n4)”后,x,y的值?,4.2 if_else语句,一、基本格式 if(测试条件) 语句体1 else 语句体2 ,功能: 说明: 若语句体只有一条语句,可省略大括号。 else部分可有可无。,Y,双分支: 例1: int x,y; scanf(“%d”,单分支: 例2: main() int a=30,temp=0,b=28; if (ab) temp=a; a=b; b=temp; printf(“a=%dtb=%dn”,a,b); ,二、if_else的嵌套结构(多分支) 1、if_if结构 if(x400) if(x500) y=0.5*(x-400); else y=x-400; else y=0; 说明: else与同一层最接近它,而又没有其它else语句与之相匹配的if语句配对,例: main() int I=4,k=8; if(Ik”); ,2、else_if嵌套或多路选择 例: if(ab) printf(“ab”); else printf(“error”);,格式: if(测试条件1) 语句体1; else if(测试条件2) 语句体2; else if(测试条件3) 语句体3; ,语句执行流程:,表达式1,语句1,真(非0),假(0),练习一: 输入年份,判断是否闰年。 条件:能被4整出,不能被100整除是闰年。 或能被400整除,是闰年。,Scanf(“%d”, if (year%4=0) if(year%100!=0) printf(“是闰年”); else if (year%400=0) printf(“是闰年”); else printf (“不是闰年”); else printf (“不是闰年”);,练习二: 输入一个字符,如果是数字则输出1;如果是大写字母则输出2;如果是小写字母则输出3;如果是空格则输出4;如果是回车换行符号则输出5;是其他字符则输出6。,Scanf(“%c”,练习三: 输入一个带符号的短整形数,输出该数的位数。,Int x,x1,m; scanf(“%d”,例 求一元二次方程ax2+bx+c=0的解(a0)。 #include “math.h“ main() float a,b,c,disc,x1,x2,p,q; scanf(“%f,%f,%f”, 说明:由于实数在计算机中存储时,经常会有一些微小误差,所以本案例判断disc是否为0的方法是:判断disc的绝对值是否小于一个很小的数(例如10-6)。,练习: 任意输入三个数,判断能否构成三角形?若能构成三角形,是等边三角形、等腰三角形还是其它三角形?,三、条件运算符,?: 三目运算符 expression1?Expression2:expression3,例: result=a0?1:1.5 =1.0 Ab)?a:b)c?max1:c;,4.3 switch语句 多分支选择语句,格式: switch(表达式) case 常量表达式1:语句序列1;break; case 常量表达式2:语句序列2;break; case 常量表达式n:语句序列n;break; default: 语句序列; ,2、语句执行流程:,指语句的最后一条是否为break,简单语句或复合语句,case语句出 现的次序并 不影响执行 结果。,说明: 表达式类型一般是整型或字符型。 若case后面跟break;语句,可迫使switch结束。 若case后面不加break;其后所有的case语句都被执行,除非遇到另一终止switch的语句。 语句序列不管有几条,都不加。 Default是可选项,用于捕捉错误。,例4-4:假设用0、1、26分别表示星期日、星期一星期六。现输入一个数字,输出对应的星期几的英文单词。如果输入3,输出“Wednesday”。,#include “stdio.h“ void main() int n; scanf(“%d“, ,程序运行情况如下: 3 Wednesday Thursday Friday Saturday error,将上面的例4-4修改如下:,#include “stdio.h“ void main() int n; scanf(“%d“, ,程序运行情况如下: 3 Wednesday,3、说明,多个case语句可以共用一组执行语句。,switch(grade) case A: case B: case C:printf(“grade=60n“);break; default:printf(“grade60“); ,各case和default子句的先后顺序可以变动,而不会影响程序执行结果。,default语句可以省略不用。,case和default与其后面的常量表达式间至少有一个空格。,switch语句可以嵌套,break语句只跳出它所在的switch语句。,嵌套switch 5级分制 5+ 5 5- 4+ 4 4- 3 2 1 百分制 100 90 85 80 75 70 60 60 60 将5级分制 转换成百分制输出。,Char c1,c2; Scanf(“%c%c”, case 4: default:printf(”error”),1.main() int x=1,y=0,a=0,b=0; switch(x) case 1: switch(y) case 0: a+;break; case 1:b+;break; case 2: a+;b+;break; case 3:a+;b+; printf(“a=%d,b=%dn”,a,b); ,结果: a=2,b=1,课堂练习,练习1: 某幼儿园招收26岁的小孩,23岁入小班,4岁入中班,56岁入大班。输入年龄,输出应入的班级。,例4-5 企业发放的奖金根据利润提成。从键盘输入当月利润,求应发放奖金总数?,利润x x=10 10x20 20x40 40x60 60x100 100x,(int )x/10,常量 0,1 1,2 2,3,4 4,5,6 6,7,8,9,10 10以上,用这种方法转换后,n出现了在不同区域有重复数字的情况。解决的方法有很多,其中一种是可以采用当x为10的整数倍时,将计算出的n值减1。,使用switch解题的关键,通过分析找到表达式,将问题分成几种情况。,#include “stdio.h“ void main() float x,y; int n; scanf(“%f“, ,程序如下:,案例 已知某公司员工的保底薪水为500,某月所接工程的利润profit(整数)与利润提成的关系如下(计量单位:元): profit1000 没有提成; 1000profit2000 提成10%; 2000profit5000 提成15%; 5000profit10000 提成20%; 10000profit 提成25%。,算法设计要点: 为使用switch语句,必须将利润profit与提成的关系,转换成某些整数与提成的关系。分析本题可知,提成的变化点都是1000的整数倍(1000、2000、5000、),如果将利润profit整除1000,则当: profit1000 对应0、1 1000profit2000 对应1、2 2000profit5000 对应2、3、4、5 5000profit10000 对应5、6、7、8、9、10 10000profit 对应10、11、12、,main() long profit; int grade; float salary=500; printf(“Input profit: “); scanf(“%ld“, ,练习2: 某物品原有价值为p,由于使用使其价值降低。价值的折扣率根据时间t(月数)确定如下: t=21 10%折扣,4.3 选择结构程序设计举例,例 将任意三个整数按从大到小的顺序输出。,#include “stdio.h“ void main() int x,y,z,t; scanf(“%d,%d,%d“, ,例 给一个不多于4位的正整数,求出它是几位数,逆序打印出各位数字。,#include “stdio.h“ void main() int x,a,b,c,d; /*a,b,c,d代表千位、百位、十位、个位*/ scanf(“%d“, ,例 任意输入三个数,判断能否构成三角形?若能构成三角形,是等边三角形、等腰三角形还是其它三角形?,#include “stdio.h

温馨提示

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

评论

0/150

提交评论