【优选】c语言课件第章PPT文档.ppt
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 优选 语言 课件 PPT 文档
- 资源描述:
-
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第5章 选择结构程序设计,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,5.1 if语句,5.1.1 单分支if语句,格式:if(条件表达式)语句,功能:先计算条件表达式的值,如果条件表达式的值为真(非0),执行语句(选择体),否则执行if语句的下一条语句。,NS图:见图5-1 之(a)。,1,图 5-1,2,例如:,(1)如果x0,输出x。,if(x0)printf(x=%f,x);,(2)如果a等于b,输出a=b。,if(a=b)printf(%s,a=b);,3,说明:,(1)条件表达式必须用小括号括起,同时注意区分作为条件的表达式与作为数值的表达式。,(2)if语句中要选择执行的语句称为选择体,选择体从语法上只能是一条语句,如果选择体需多条语句描述,必须采用复合语句。,4,例如:,如果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,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,6,5.1.2 双分支if语句,格式:if(条件表达式)语句1,else 语句2,功能:先计算条件表达式的值,如果条件表达式的值为真(非0),执行语句1(选择体1),否则执行语句2(选择体2),if语句执行完后执行if 语句的下条语句。,NS图:见图5-1之(b)。,7,例如:,(1)如果x0,输出x大于0,否则输出x小于等于0。,if(x0)printf(x大于0);,else printf(x小于等于0);,(2)如果a等于b,输出a等于b,否则输出a不等于b。,if(a=b)printf(a等于b);,else printf(“a不等于b);,8,(3)求两个数x、y的最大值max。,if(xy)max=x;,else max=y;,(4)判断整数i 的奇偶性。,if(i%2=0)printf(偶数n);,else printf(奇数n);,9,(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,10,(5)单分支if 语句可认为是双分支if 语句缺省else子句的特殊情况,一条双分支if语句可用两条单分支if语句实现。,例如,前例中三条双分支if语句改用单分支if语句实现:,if(x0)printf(x大于0);,if(xy)max=x;,if(x1),y=x+1;,else,y=x-1;,printf(x=%6.2f,y=%6.2fn,x,y);,输入数据:1.2,运行结果:x=1.20,y=2.00,程序如下:,13,例 5 3,输入两个数,求两个数的最大值、最小值。,数据分析:,输入量:两个数x、y,float,输出量:最大值max、最小值min,float,算法分析:,输入两个数x、y,比较两个数x、y 大小,如果xy,max=x,min=y,如果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,15,5.1.3 多分支if语句,if(条件表达式1),if (条件表达式2)语句1,else 语句2,else,if (条件表达式3)语句3,else 语句4,多分支if语句不是一条具体的语句,它通过if语句的嵌套实现。其一般形式为:,16,图 5-2,17,例 5 4,计算y,/*程序 5-4,求函数值*/,main(),float x;,float y;,printf(请输入x:);,scanf(%f,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;,本题是一个典型的多分支问题。假定用cj表示百分制成绩,用ch表示五级记分的等级,则可用如下多分支if语句完成转换:,19,说明:,()多分支if语句中,else子句总是与最近的if 配套。(2)通过加花括号、加注释来明确 else与if的配套关系。,(3)多分支if语句可用多条单分支、双分支if 语句等价实现。,20,例如:,例 5 4 用单分支if语句处理:,if (x0)y=1;,例 5 5 用单分支if语句处理:,if (cj=90)ch=A;,if (cj=80,if (cj=70,if (cj=60,if (cj60)ch=E;,21,5.2 switch语句,switch语句称为开关语句,用于多分支选择的一种特殊情况的处理,即每个分支、每种情况通过一个表达式取不同的值(选择常量、情况常量)来描述,相当于PASCAL语言中的CASE语句。,格式:,switch(选择表达式),case 常量1:语句1,case 常量2:语句2,case 常量n:语句n,default:语句n+1,22,switch语句的功能:计算选择表达式的值,当表达式的值与某一个case后面的情况常量相等或相匹配时,就执行此case后面的情况处理语句。执行完一个case后面的语句后,流程控制转移到下一个case处继续执行。,若所有case中的常量都不与选择表达式的值相匹配,就执行default后面的语句。,23,NS图:见图 5 3。,图 5 3,24,例 5 6,根据输入的字符,输出相应的字符串。,t-Turbo C,b-Borland C,m-Microsoft C,v-Visual C,25,/*程序5 6,根据输入的字符,输出相应的字符串*/,main(),char ch;,scanf(%c,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);,26,例 5 7,将例 5 5 用switch语句实现。,switch (int)(cj/10)/*注意选择表达式的构造*/,10:,9:ch=A;break;,8:ch=B;break;,7:ch=C;break;,6:ch=D;break;,default:ch=E;,27,说明:,(1)选择表达式可以是任何表达式,一般为整型、字符型、枚举型表达式。,(2)选择表达式必须用小括号括起。,(3)case后可以是常量表达式,每一个case后的值必须互不相同,否则会出现二义性。,(4)一种情况处理完后,一般应使程序的执行流程跳出switch结构,终止switch语句的执行,这可借助break语句完成。,28,break语句形式为:break;,一般使用的switch语句形式为:,switch(选择表达式),case 常量1:语句1break;,case 常量2:语句2break;,case 常量n:语句nbreak;,default:语句n+1,29,最后一种情况处理中可以不加break语句。,(5)在上述switch语句的一般使用形式下,case出现的次序不影响执行结果。,(6)当多个常量代表一种情况时,出现在前面case中的情况处理无语句,这实际上也是多个case共用一组执行语句。,(7)可以没有default子句。,(8)switch语句描述的是多分支选择的一种特殊情况,可用if语句等价实现,如例5-5和例5-7。,30,5.3 goto语句,格式:,goto 语句标号;,功能:,将程序的执行流程无条件转移至语句标号所标识的位置语句处执行。,说明:,(1)C语言的语句标号用标识符表示,它仅仅表示goto语句转移的目标地址。,(2)带有标号的语句称为标号语句,标号与语句之间用冒号分隔。标号语句仅对goto语句有意义。,(3)goto语句往往与if 语句配套使用构成一种远距离的转移。,31,(4)if语句加goto语句还可构成循环。,例如:输出数字09。,x=0;,flag:if(x=70,printf(%sn,Add追加数据 Modify修改数据);,printf(x=%5.,图5-5 简单计算器的NS图,if (cj=90)ch=A;,case d:printf(删除数据);,输出量:最大值max、最小值min,float,输入量:两个数x、y,float;,scanf(%f,%f,int leap;,if (flag),(3)求两个数x、y的最大值max。,(5)不允许使用goto语句把程序控制转移到其它函数内部,不允许使用goto语句把程序控制转向数据说明语句。,(6)尽量少使用goto语句,即使使用goto语句一般也不要将程序执行流程向后转移。,33,5.4 程序设计举例,选择结构程序设计一般应解决三个问题:,(1)语句选择问题,即采用if语句还是采用switch语句,特别在多分支选择问题时。如果要处理的分支少,一般用if语句。如果处理的分支多,各个分支的条件能通过一个表达式取不同的值描述,则采用switch语句。如果处理的分支多,各个分支的条件又不易统一描述,则采用多分支的if语句或多条if语句实现。,(2)正确设置判断条件。对if语句来说是条件表达式的设计,对开关语句来说是处理情况的分类与选择表达式的设计。,(3)选择体的设计,即每个分支、每种情况的处理操作如何实现。,34,例 5-8,求三个数的最大值。,数据分析:,输入量:三个数x、y、z,float,输出量:max,float,算法分析:,算法一:直接求最大值。,算法二:先假定第一个数是最大值,将其它数依次与最大值比较,如比最大值还大,这个数是新的最大值。,35,程序一:,/*程序5 7-1,求三个数的最大值*/,main(),float x,y,z;,float max;,clrscr();,printf(请输入三个数x,y,z:);,scanf(%f,%f,%f,if (xy),if (yx),if (zx),printf(x=%5.2f,y=%5.2f,z=%5.2f,max=%5.2fn,x,y,z,max);,36,程序二:,/*程序5 7 2,求三个数的最大值*/,main(),float x,y,z;,float max;,clrscr();,printf(请输入三个数x,y,z:);,scanf(%f,%f,%f,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,37,例 5 9,由三边求三角形面积和周长。,/*程序 5 9,求三角形的面积和周长 */,main(),float a,b,c;,int flag;/*为1,三边能构成三角形*/,float hl;,float s,l;,clrscr();,printf(请输入三角形的三边:);,scanf(%f,%f,%f,flag=(a+bc),38,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,运行结果:不能构成三角形!,39,例 5 10,求方程ax,2,+bx+c=0的实根。,算法提示:,(1)本例是例4-6的改进。,(2)有以下一些情况:,a=0、b=0、c=0时,方程退化为0 x=0。,a=0、b=0、c0时,方程退化为0 x0。,a=0、b0时,方程退化为bx+c=0。,a0时,有实根。,a0时,无实根。,40,图 5 4,41,程序如下:,/*程序 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,if (a=0),if(b=0),if(c=0)printf(无数解!n);,else printf(无解!n);,42,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,运行结果:方程无实根!,43,例5-11,输入年份,判断是否为闰年。输入月号,输出每月的天数。,数据分析:,输入量:年份year,月号month,int。,中间量:闰年标志leap,int。,输出量:无,直接输出。,算法提示:,(1)闰年用(year%4=0&year%100!=0)(year%400=0)判断。,(2)每月天数的输出通过开关语句处理。,44,程序如下:,/*程序5-11,判断是否为闰年,输出每月的数*/,main(,int year,month;,int leap;,/*年份的处理*/,printf(请输入年份:);,scanf(%d,&year);,leap=(year%4=0&year%100!=0)(year%400=0);,if(leap)printf(%d年是闰年!n,year);,else printf(%d年不是闰年!n,year);,/*月号的处理*/,printf(请输入月号:);scanf(%d,&month);,switch(month),45,case 1:,case 3:,case 5:,case 7:,case 8:,case 10:,case 12:printf(%d年%d月的天数为%d天!n,year,month,31);break;,case 4:,case 6:,case 9:,case 11:printf(%d年%d月的天数为%d天!n,year,month,30);break;,case 2:if(leap)printf(%d年%d月的天数为%d天!n,year,month,29);,else printf(%d年%d月的天数为%d天n!,year,month,28);,46,运行结果:,输入年份:1999,1999年不是闰年!,输入月号:12,1999年12月的天数为31天!,47,例5-12,两个数的+、*和/的简易计算器程序。,数据分析:,输入量:两个数x、y,float;运算符op,char。,输出量:计算结果j,float。,算法提示:,(1)运算选择通过开关语句处理。,(2)除法运算时要考虑被除数为0的情况。,(3)复杂一点的计算器程序参见例6-21。,48,/*程序 5 12,简易计算器程序*/,main(),float x,y;,char op;,printf(输入两个数:);,scanf(%f,%f,printf(输入运算符:);,scanf(%c,switch (op),49,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,50,图5-5 简单计算器的NS图,51,例5-13,猜数游戏。,算法提示:,(1)要猜的数调用随机函数rand()产生,猜的数从键盘输入。,(2)猜中,输出“你猜对了!”。,(3)允许猜多次的话,可用if语句加goto语句或第6章的循环语句来处理。请读者加以实现。,52,程序如下:,/*程序5-13,猜数游戏程序*/,main(),int n;,int x;,n=rand();*产生要猜的数*/,clrscr();,printf(猜数游戏程序:n);,printf(输入你猜的数:);scanf(%d,&x);,if(x=n)printf(你猜对了!);,else printf(你要继续努力!);,53,例5-14,通讯录管理主控程序。,算法提示:,(1)本题是例4-7的进一步讨论。,(2)主控程序包括界面显示与选择处理两个部分,界面显示用输出函数处理,选择处理常用开关语句完成。,(3)功能项调用相应的处理函数完成。函数没定义好可暂用空语句代替,或用printf()函数输出一些提示信息代替。,(4)保持界面的显示需使用循环语句。,(5)调用exit()函数退出程序,返回系统。,54,程序如下:,/*程序5-14,通讯录管理主控程序*/,main(),char ch;/*选择变量*/,/*界面显示*/,clrscr();,printf(%sn,通讯录管理程序);,printf(%sn,Add追加数据 Modify修改数据);,printf(%sn,Delete删除数据 Print打印通讯录);,printf(%sn,Quit退出程序);,printf(请选择(A/M/D/P/Q):);,/*选择处理*/,55,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);,56,习 题 五,1比较单分支、双分支、多分支的if语句。,2 ,下列描述哪些是正确的?,(1)if(x0)y=1;,else y=0;,(4)y=0;,if(x=0),if(x0)y=1;,else y=,1;,58,例 5 9 由三边求三角形面积和周长。,scanf(%f,%f,else y=1;,输入量:两个数x、y,float,1999年12月的天数为31天!,标号语句仅对goto语句有意义。,(4)判断整数i 的奇偶性。,if (cj=70,scanf(%c,char ch;,if(x0)y=1;,int flag;/*为1,三边能构成三角形*/,2fn,x);,if (a=0),中间量:闰年标志leap,int。,else ch=E;,3仔细阅读以下程序,指出程序的运行结果。,#incluele,main(),int a,b;,a=b=5;,if(a=1),if(b=5),a+=b,printf(,a=%dn,,a);,else,a,=b;,printf(,a=%dn,,a);,printf(,a+b=%d,,a+b);,59,4,仔细阅读以下程序,指出程序的运行结果。,#include,main(),int i=1,j=0,m=1,n=2;,switch(i+),case 1:m+;n+;,case 2:switch(+j),case 1:m+;,case 2:n+;,case 3:m+;n+;,break;,case 4:m+;n+;,printf(,m=%d,n=%d,,m,n);,60,5仔细阅读以下程序,指出程序的运行结果。,#include,main(),char ch;,printf(,Enter ch:,);,scanf(,%c,,&ch);,switch(ch),case,m,:printf(,Good morning!n,);break;,case,n,:printf(,G,ood night!n,);break;,default:printf(,I can not understand!n,);break;,printf(,All right!n,);,61,6编写程序,求三个数的最小值。进一步考虑求四个数、五个数及更多的数的最小值及最大值。,7编写程序,解方程ax+b=0。,8编写程序,解方程ax2+bx+c=0。要求分别用if语句和switch语句实现。,9编写程序,判断一个整数是否既是2的倍数、又是3的倍数。,10编写程序,判断2000年、年、2100年是否为闰年。,11编写程序,将五级记分成绩转换成百分制成绩,转换规则如下:A95,B85,C75,D65,E55,62,12有一个不多于5位的正整数,求它的位数,同时求出它的每位数字。,13输入一个字符,编写程序判断该输入字符的种类:数字、字母或其它。,14输入三角形三边,编写程序判断三角形的种类:等腰三角形、等边三角形或一般三角形。,15编写程序,根据输入的字符输出相应的字串:,输入字符 输出字串,a或A American,b或B Britain,c或C China,d或D Denmark,其它 Other,63,16编写程序,将输入的数字(0,6)转换成对应的星期的英文名称输出。,17编写个人所得税计算程序。,18某公司的利润提成方案是:1万元及1万元以下利润提成5%,2万元及2万元以下利润提成6%,4万元及4万元以下利润提成7%,5万元及5万元以下利润提成8%,5万元以上利润提成9%。总提成采用分段累计计算。,张三完成利润10万元,李四完成利润8万元,王五完成利润12万元。,编写程序,计算张三、王五、李四可获得的利润提成。,64,19编写电子词典主控程序,假定电子词典具有单词查询、增加词条、修改词条、删除词条等功能项,每个功能项暂用空语句代替或用printf()函数输出一些提示信息代替。,65,谢谢观看,展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




【优选】c语言课件第章PPT文档.ppt



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/12519529.html