C04分支结构.ppt
江汉大学数学与计算机科学学院江汉大学数学与计算机科学学院韩韩 海海分支结构分支结构1江汉大学数学与计算机科学学院江汉大学数学与计算机科学学院 韩海韩海 1397118981013971189810江汉大学数学与计算机科学学院江汉大学数学与计算机科学学院 韩海韩海 1397118981013971189810u什么是逻辑型数据什么是逻辑型数据如何表示某一判断是否正确(不存在如何表示某一判断是否正确(不存在“半对半对”)自然语言用自然语言用“是是”和和“否否”、“对对”和和“错错”、“Yes”Yes”和和“No”No”等等PASCALPASCAL语言用语言用“TRUE”TRUE”和和“FALSE”FALSE”标准标准C C语言用整数语言用整数1 1和和0 0,没有设置专用的,没有设置专用的“逻辑类型逻辑类型”VCVC有类型有类型boolbool和两个常量和两个常量truetrue和和falsefalse,可以直接使用,可以直接使用u大小比较大小比较比较是一种特殊的计算:比较是一种特殊的计算:a b比较的结果是比较的结果是“对对”或或“错错”,即逻辑型数据,即逻辑型数据计算机可以存放某次比较的结果:计算机可以存放某次比较的结果:x=(a b);把把“ab”ab”的比较结果送到的比较结果送到x x之后,改变之后,改变a a、b b的值不影响的值不影响x x的值,的值,x x记载记载“在那一时刻在那一时刻a ab b是否正确是否正确”逻辑值与大小比较2江汉大学数学与计算机科学学院江汉大学数学与计算机科学学院 韩海韩海 1397118981013971189810江汉大学数学与计算机科学学院江汉大学数学与计算机科学学院 韩海韩海 1397118981013971189810u六个关系运算符六个关系运算符 =!=都是二元运算符都是二元运算符注意写法,尤其是后两个注意写法,尤其是后两个u关系表达式关系表达式由关系运算符连接两个操作数构成的计算式,由关系运算符连接两个操作数构成的计算式,计算结果计算结果是整数是整数0 0或者整数或者整数1 1;u“逻辑值逻辑值”参与数值计算参与数值计算例:例:int a,b,c,x,y;x=(a b);y=(a+b c)+(a+c b)+(b+c bYNc=b;格式格式:if(if(逻辑表达式逻辑表达式)操作操作1 1;elseelse操作操作2 2;a b c =a;c =b;#include main()int a,b,c;printf(Input 2 integers:);scanf(%d%d,&a,&b);if(a b)c=a;elsec=b;printf(%d is bigger.n,c);程序是交给计算程序是交给计算机的执行计划机的执行计划7江汉大学数学与计算机科学学院江汉大学数学与计算机科学学院 韩海韩海 1397118981013971189810江汉大学数学与计算机科学学院江汉大学数学与计算机科学学院 韩海韩海 1397118981013971189810Q:一元一元二次方程求根程序二次方程求根程序,增加无实数解时的处理增加无实数解时的处理if语句中的复杂分支求解求解=0YN显示无解显示无解d=b*b 4*a*c;if(逻辑表达式逻辑表达式)求解;求解;else显示无解;显示无解;d=0 x1=(-b+sqrt(d)/2/a;x2=(-b-sqrt(d)/2/a;printf(%f,%f,x1,x2);printf(无无解解n);8江汉大学数学与计算机科学学院江汉大学数学与计算机科学学院 韩海韩海 1397118981013971189810江汉大学数学与计算机科学学院江汉大学数学与计算机科学学院 韩海韩海 1397118981013971189810没有else的if语句交换交换a bYN无操作无操作if(逻辑表达式逻辑表达式)交换交换a、b的值;的值;else无操作;无操作;a bYNm=b;n=m;m cYNn=c;#include main()int a,b,c,m,n;输入输入a、b、c 把把a、b中大的一个放到中大的一个放到m 把把m、c中大的一个放到中大的一个放到n 显示显示n的值的值scanf(%d%d%d,&a,&b,&c);printf(max=%dn,n);if(a b)m=a;elsem=b;if(m c)n=m;elsen=c;10江汉大学数学与计算机科学学院江汉大学数学与计算机科学学院 韩海韩海 1397118981013971189810江汉大学数学与计算机科学学院江汉大学数学与计算机科学学院 韩海韩海 1397118981013971189810Q:键盘输入三个整数,找出其中最大的一个。键盘输入三个整数,找出其中最大的一个。用没有else的if语句解决三数求大#include main()int a,b,c,m;printf(Input 3 integers:);scanf(%d%d%d,&a,&b,&c);m=a;if(m b)m=b;if(m c)m=c;printf(max=%dn,m);11江汉大学数学与计算机科学学院江汉大学数学与计算机科学学院 韩海韩海 1397118981013971189810江汉大学数学与计算机科学学院江汉大学数学与计算机科学学院 韩海韩海 1397118981013971189810if语句嵌套不是不是y%4!=0YN进一步判断进一步判断Q:闰年判断问题闰年判断问题y%100!=0进一步判断进一步判断是是YNy%400!=0是是不是不是YN12江汉大学数学与计算机科学学院江汉大学数学与计算机科学学院 韩海韩海 1397118981013971189810江汉大学数学与计算机科学学院江汉大学数学与计算机科学学院 韩海韩海 1397118981013971189810判断闰年的程序#include main()int y;scanf(%d,&y);if(y%4!=0)printf(%d年不是闰年年不是闰年n,y);else进一步判断进一步判断if(y%100!=0)printf(%d年是闰年年是闰年n,y);else再进一步判断再进一步判断if(y%400!=0)printf(%d年不是闰年年不是闰年n,y);else printf(%d年是闰年年是闰年n,y);13江汉大学数学与计算机科学学院江汉大学数学与计算机科学学院 韩海韩海 1397118981013971189810江汉大学数学与计算机科学学院江汉大学数学与计算机科学学院 韩海韩海 1397118981013971189810逻辑值的扩展“非0即真”现象现象:t=a b;if(a b)if(t)k=a;k=a;elseelsek=b;k=b;问题:问题:在右边的程序段中,如果隐去在右边的程序段中,如果隐去“t=a c&a+c b&b+c a!(a+b c|a+c b|b+c a)18江汉大学数学与计算机科学学院江汉大学数学与计算机科学学院 韩海韩海 1397118981013971189810江汉大学数学与计算机科学学院江汉大学数学与计算机科学学院 韩海韩海 1397118981013971189810逻辑运算示例2Q:设设t中存放某次测量的血压低压值,判断是否正常?中存放某次测量的血压低压值,判断是否正常?if(t在在限定区间内限定区间内)printf(正常正常n);elseprintf(不正常不正常n);其中其中“t在限定区间内在限定区间内”的写法:的写法:数学写法:数学写法:60 t 80语言写法:语言写法:60 t&t 80如果把如果把if语句的条件写成语句的条件写成“60 t b?a:b;Q:其中是否需要加括号?其中是否需要加括号?(2)(2)把变量把变量a a、b b中较小的一个加中较小的一个加1 1后放回原变量中后放回原变量中a b?a+:b+;Q:比较两例的差别比较两例的差别条件表达式格式:逻辑表达式?表达式逻辑表达式?表达式1 1:表达式:表达式2 222江汉大学数学与计算机科学学院江汉大学数学与计算机科学学院 韩海韩海 1397118981013971189810江汉大学数学与计算机科学学院江汉大学数学与计算机科学学院 韩海韩海 1397118981013971189810多路分支预想的流程分支条件分支条件操作操作1 1操作操作2 2操作操作3 3操作操作n n情况情况1 1情况情况2 2情况情况3 3情况情况n n23江汉大学数学与计算机科学学院江汉大学数学与计算机科学学院 韩海韩海 1397118981013971189810江汉大学数学与计算机科学学院江汉大学数学与计算机科学学院 韩海韩海 1397118981013971189810用if语句实现多路分支Q:输入成绩值,显示对应的分类输入成绩值,显示对应的分类(A(A、B B、C C、D D、E)E)改错:改错:scanf(%d,&m);if(0=m60)k=E;if(60=m70)k=D;if(70=m80)k=C;if(80=m90)k=B;else k=A;printf(等级:等级:,k);k=*;if(0=m&m60)k=E;if(60=m&m70)k=D;if(70=m&m80)k=C;if(80=m&m90)k=B;if(90=m&m=100)k=A;24江汉大学数学与计算机科学学院江汉大学数学与计算机科学学院 韩海韩海 1397118981013971189810江汉大学数学与计算机科学学院江汉大学数学与计算机科学学院 韩海韩海 1397118981013971189810switch语句1 1、语法规定及流程说明、语法规定及流程说明2 2、与、与“预期的多路分支预期的多路分支”有怎样的不同?如何解决有怎样的不同?如何解决?格式:switch(表达式表达式)case 常量常量1:操作:操作1;case 常量常量2:操作:操作2;case 常量常量n:操作操作n;default:操作操作n+1;25江汉大学数学与计算机科学学院江汉大学数学与计算机科学学院 韩海韩海 1397118981013971189810江汉大学数学与计算机科学学院江汉大学数学与计算机科学学院 韩海韩海 1397118981013971189810break语句1 1、功能、用法说明、功能、用法说明2 2、switchswitch结构的通常用法:结构的通常用法:switch(表达式表达式)case 常量常量1:操作:操作1;break;case 常量常量2:操作:操作2;break;case 常量常量n:操作操作n;break;default:操作操作n+1;格式:break;26江汉大学数学与计算机科学学院江汉大学数学与计算机科学学院 韩海韩海 1397118981013971189810江汉大学数学与计算机科学学院江汉大学数学与计算机科学学院 韩海韩海 1397118981013971189810switch语句应用示例1Q:输入一个五分成绩值输入一个五分成绩值(A(A、B B、C C、D D、E)E),显示显示其对应的分数段。其对应的分数段。scanf(%c,&m);switch(m)case A:printf(90100n);break;case B:printf(8089n);break;case C:printf(7079n);break;case D:printf(6069n);break;case E:printf(059n);如果去掉所有的如果去掉所有的breakbreak,当,当输入是输入是B B时,显示如何?时,显示如何?27江汉大学数学与计算机科学学院江汉大学数学与计算机科学学院 韩海韩海 1397118981013971189810江汉大学数学与计算机科学学院江汉大学数学与计算机科学学院 韩海韩海 1397118981013971189810switch语句应用示例2-问题Q:输入年、月、日,该日期是该年的第几天?输入年、月、日,该日期是该年的第几天?分析:(暂不考虑闰年问题)分析:(暂不考虑闰年问题)如果是如果是1 1月月日,则是该年的第日,则是该年的第天;天;如果是如果是2 2月月日,则是该年的第日,则是该年的第(31+(31+)天;天;如果是如果是3 3月月日,则是该年的第日,则是该年的第(31+28+(31+28+)天;天;如果是如果是1212月月日,则是该年的第日,则是该年的第(31+28+(31+28+)天天根据月份值不同,共分为根据月份值不同,共分为1212种情况。种情况。28江汉大学数学与计算机科学学院江汉大学数学与计算机科学学院 韩海韩海 1397118981013971189810江汉大学数学与计算机科学学院江汉大学数学与计算机科学学院 韩海韩海 1397118981013971189810switch语句应用示例2-解答scanf(%d%d%d,&y,&m,&d);k=d;switch(m)case 12:k+=30;case 11:k+=31;case 10:k+=30;case 9:k+=31;case 8:k+=31;case 7:k+=30;case 6:k+=31;case 5:k+=30;case 4:k+=31;case 3:k+=28;case 2:k+=31;29