新编C语言程序设计第5章选择结构程序设计课件.ppt
第5章 选择结构程序设计 第第5章章 选择结构程序设计选择结构程序设计 5.1 if语句语句 5.2 switch语句语句 5.3 goto语句语句 5.4 程序设计举例程序设计举例 第5章 选择结构程序设计 5.1 if语句语句5.1.1 单分支单分支if语句语句 格式:if(条件表达式)语句 功能:先计算条件表达式的值,如果条件表达式的值为真(非0),执行语句(选择体),否则执行if语句的下一条语句。NS图:见图5-1 之(a)。第5章 选择结构程序设计 图 5-1 第5章 选择结构程序设计 例如例如:(1)如果x0,输出x。if(x0)printf(x=%f,x);(2)如果a等于b,输出a=b。if(a=b)printf(%s,a=b);第5章 选择结构程序设计 第5章 选择结构程序设计 例如例如:如果x0,求x的平方根。(1)将结果放入变量y 中;(2)输出x的平方根。if(x0)y=sqrt(x);printf(平方根=%f,y);(3)不管选择体多么复杂,包含多少条语句,if语句逻辑上是一条语句,后面的双分支if语句、多分支if语句、switch语句、循环语句均是逻辑上的一条语句。第5章 选择结构程序设计 例例 5 1 计算y,。提示:x等于1函数无定义。程序如下:/*程序5-1,求函数值*/main()float x;float y;printf(请输入x:);scanf(%f,&x);if(x!=1)y=(x+1)/(x-1);printf(x=%6.2f,y=%6.2fn,x,y);输入数据:1.2运行结果:x=1.20,y=11.00 第5章 选择结构程序设计 5.1.2 双分支双分支if语句语句 格式:if(条件表达式)语句1 else 语句2 功能:先计算条件表达式的值,如果条件表达式的值为真(非0),执行语句1(选择体1),否则执行语句2(选择体2),if语句执行完后执行if 语句的下条语句。NS图:见图5-1之(b)。第5章 选择结构程序设计 第5章 选择结构程序设计(3)求两个数x、y的最大值max。if(xy)max=x;else max=y;(4)判断整数i 的奇偶性。if(i%2=0)printf(偶数n);else printf(奇数n);第5章 选择结构程序设计 (1)双分支if语句形式上相当于单分支if语句扩展else分支而来,else分支称为else子句,else子句不能单独存在。(2)在其它高级语言中特别强调else子句前不能有分号,C语言中else子句前必有分号。(3)选择体如为多条语句同样必须采用复合语句。(4)可采用条件运算等价实现,从而以表达式的形式参与运算。例如,上例中三个双分支if语句用条件运算描述:(x0)?printf(x大于0):printf(x小于等于0)(a=b)?printf(a等于b):printf(a不等于b)(xy)?max=x:max=y 第5章 选择结构程序设计 第5章 选择结构程序设计 例例 5 2 计算/*程序 5-2,求函数值*/main()float x;float y;printf(请输入x:);scanf(%f,&x);if(x1)y=x+1;elsey=x-1;printf(x=%6.2f,y=%6.2fn,x,y);输入数据:1.2运行结果:x=1.20,y=2.00 第5章 选择结构程序设计 第5章 选择结构程序设计/*程序 5-3,求两个数的最大值、最小值*/main()float x,y;float max,min;printf(请输入两个数x,y:);scanf(%f,%f,&x,&y);if(xy)max=x;min=y;else max=y;min=x;printf(max=%6.2f,min=%6.2fn,max,min);输入数据:1.2,2.54运行结果:max=2.54,min=1.20 第5章 选择结构程序设计 5.1.3 多分支多分支if语句语句 一般形式:if(条件表达式1)if (条件表达式2)语句1 else 语句2else if (条件表达式3)语句3 else 语句4 第5章 选择结构程序设计 第5章 选择结构程序设计 例例 5 4 计算y,/*程序 5-4,求函数值*/main()float x;float y;printf(请输入x:);scanf(%f,&x);if(x=90)ch=A;else if (cj=80)ch=B;else if (cj=70)ch=C;else if (cj=60)ch=D;else ch=E;第5章 选择结构程序设计 说明:()多分支if语句中,else子句总是与最近的if 配套。(2)通过加花括号、加注释来明确 else与if的配套关系。(3)多分支if语句可用多条单分支、双分支if 语句等价实现。第5章 选择结构程序设计 例如:例 5 4 用单分支if语句处理:if (x0)y=1;例 5 5 用单分支if语句处理:if (cj=90)ch=A;if (cj=80&cj=70&cj=60&cj70)ch=D;if (cj60)ch=E;第5章 选择结构程序设计 5.2 switch语句语句 switch语句称为开关语句,用于多分支选择的一种特殊情况的处理,即每个分支、每种情况通过一个表达式取不同的值(选择常量、情况常量)来描述,相当于PASCAL语言中的CASE语句。格式:switch(选择表达式)case 常量1:语句1case 常量2:语句2case 常量n:语句ndefault:语句n+1 第5章 选择结构程序设计 第5章 选择结构程序设计 NS图:见图 5 3。图 5 3第5章 选择结构程序设计 例例 5 6 根据输入的字符,输出相应的字符串。t-Turbo C b-Borland C m-Microsoft C v-Visual C 第5章 选择结构程序设计/*程序5 6,根据输入的字符,输出相应的字符串*/main()char ch;scanf(%c,&ch);switch(ch)case t:printf(Turbo Cn);break;case b:printf(Borland Cn);break;casem:printf(Microsoft Cn);break;case v:printf(Visual Cn);break;default:printf(error Cn);第5章 选择结构程序设计 第5章 选择结构程序设计 说明:(1)选择表达式可以是任何表达式,一般为整型、字符型、枚举型表达式。(2)选择表达式必须用小括号括起。(3)case后可以是常量表达式,每一个case后的值必须互不相同,否则会出现二义性。(4)一种情况处理完后,一般应使程序的执行流程跳出switch结构,终止switch语句的执行,这可借助break语句完成。第5章 选择结构程序设计 break语句形式为:break;一般使用的switch语句形式为:switch(选择表达式)case 常量1:语句1break;case 常量2:语句2break;case 常量n:语句nbreak;default:语句n+1 第5章 选择结构程序设计 第5章 选择结构程序设计 5.3 goto语句语句 格式格式:goto 语句标号;功功能能:将程序的执行流程无条件转移至语句标号所标识的位置语句处执行。说明说明:(1)C语言的语句标号用标识符表示,它仅仅表示goto语句转移的目标地址。(2)带有标号的语句称为标号语句,标号与语句之间用冒号分隔。标号语句仅对goto语句有意义。(3)goto语句往往与if 语句配套使用构成一种远距离的转移。第5章 选择结构程序设计 (4)if语句加goto语句还可构成循环。例如:x=0;flag:if(xy)&(xz)max=x;if (yx)&(yz)max=y;if (zx)&(zy)max=z;printf(x=%5.2f,y=%5.2f,z=%5.2f,max=%5.2fn,x,y,z,max);第5章 选择结构程序设计 程序二程序二:/*程序5 7 2,求三个数的最大值*/main()float x,y,z;float max;clrscr();printf(请输入三个数x,y,z:);scanf(%f,%f,%f,&x,&y,&z);max=x;if (ymax)max=y;if (zmax)max=z;printf(x=%5.2f,y=%5.2f,z=%5.2f,max=%5.2fn,x,y,z,max);输入数据:12.34,2.18,10.68运行结果:x=12.34,y=2.18,z=10.68,max=12.34 第5章 选择结构程序设计 例例 5 9 由三边求三角形面积和周长。/*程序 5 9,求三角形的面积和周长 */main()float a,b,c;int flag;/*为1,三边能构成三角形*/float hl;float s,l;clrscr();printf(请输入三角形的三边:);scanf(%f,%f,%f,&a,&b,&c);flag=(a+bc)&(b+ca)&(c+ab);第5章 选择结构程序设计 if (flag)l=a+b+c;hl=0.5*l;s=sqrt(hl*(hla)*(hlb)*(hlc);printf(面积=%5.2f,周长=%5.2f n,s,l);else printf(不能构成三角形!);输入数据:3,4,5运行结果:面积=6.00,周长=12.00输入数据:1,1,5运行结果:不能构成三角形!第5章 选择结构程序设计 例例 5 10 求方程ax2+bx+c=0的实根。图 5 4 第5章 选择结构程序设计 程序如下:/*程序 5 10,求方程a*x*x+b*x+c=0的实根*/main()float a,b,c;float d;float x;float x1,x2;clrscr();printf(请输入方程系数a、b、c:);scanf(%f,%f,%f,&a,&b,&c);if (a=0)if(b=0)if(c=0)printf(无数解!n);else printf(无解!n);第5章 选择结构程序设计 else x=-c/b;printf(方程的根=%6.2fn,x);else d=b*b-4*a*c;if (d=0)x1=(-b+sqrt(d)/(2*a);x2=(-b-sqrt(d)/(2*a);printf(第一个根=%6.2f,第二个根=%6.2f n,x1,x2);else printf(方程无实根!n);输入数据:0,2,1运行结果:方程的根=-0.50输入数据:1,2,3运行结果:方程无实根!第5章 选择结构程序设计 例例 5 11 输入年号,判断是否为闰年。输入月号,输出每月天数。数据分析:输入量:年号year,月号month,int 中间量:闰年标志leap,int 输出量:无,直接输出 算法提示:闰年用(year%400=0)(year%4=0&year%100!=0)判断。每月天数的输出通过开关语句处理。第5章 选择结构程序设计/*程序 5 11,判断闰年,输出每月天数*/main()int year,month;int leap;printf(输入年号:);scanf(%d,&year);leap=(year%400=0)(year%4=0&year%100!=0);if (leap)printf(%d年是闰年n);else printf(%d年不是闰年n);printf(输入月号:);scanf(%d,&month);switch (month)case 1:3:5:第5章 选择结构程序设计 7:8:10:12:printf(%d年%d月的天数为%d天n,year,month,31);break;4:6:9:11:printf(%d年%d月的天数为%d天n,year,month,30);break;2:if (leap)printf(%d年%d月的天数为%d天n,year,month,29);else printf(%d年%d月的天数为%d天n,year,month,28);运行结果:输入年号:19991999年不是闰年输入月号:121999年12月的天数为31天 第5章 选择结构程序设计 例例 5 12 两个数的+、-、*、/简易计算器程序。数据分析:输入量:两个数x、y,float 运算符op,char输出量:计算结果j,float算法提示:运算选择通过开关语句处理。除法运算时要考虑被除数为0的情况。第5章 选择结构程序设计/*程序 5 12,简易计算器程序*/main()float x,y;char op;printf(输入两个数:);scanf(%f,%f,&x,&y);printf(输入运算符:);scanf(%c,&op);switch (op)第5章 选择结构程序设计 case +:j=x+y;printf(结果=%9.4fn,j);break;case -:j=x-y;printf(结果=%9.4fn,j);break;case *:j=x*y;printf(结果=%9.4fn,j);break;case /:if (y!=0)j=x+y;printf(结果=%9.4fn,j);else printf(除数为零n);运行结果:输入两个数:3,6输入运算符:*结果=18.0000 第5章 选择结构程序设计 例例 5 13 通讯录管理主控程序。/*程序 5 13,通讯录管理主控程序*/include stdio.hmain()char ch;/*选择变量*/*界面显示*/clrscr();printf(%sn,通讯录管理程序);printf(%sn,Add-追加数据 Modify-修改数据);printf(%sn,Delete-删除数据 Print-打印数据);printf(%sn,Quit-退出程序);printf(请选择(A/M/D/P/Q):);第5章 选择结构程序设计/*选择处理*/scanf(%c,&ch);switch (ch)case A:case a:printf(追加数据);break;case M:case m:printf(修改数据);break;case D:case d:printf(删除数据);break;case P:case p:printf(打印数据);break;case Q:case q:printf(退出程序);exit(0);