C语言第04章 选择结构程序设计ppt课件.ppt

C语言第04章 选择结构程序设计ppt课件.ppt

ID:58885863

大小:580.50 KB

页数:73页

时间:2020-09-30

上传者:U-5649
C语言第04章 选择结构程序设计ppt课件.ppt_第1页
C语言第04章 选择结构程序设计ppt课件.ppt_第2页
C语言第04章 选择结构程序设计ppt课件.ppt_第3页
C语言第04章 选择结构程序设计ppt课件.ppt_第4页
C语言第04章 选择结构程序设计ppt课件.ppt_第5页
资源描述:

《C语言第04章 选择结构程序设计ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

第4章选择结构程序设计学习要求熟练掌握关系运算符和关系表达式熟练掌握逻辑运算符和逻辑表达式熟练掌握if语句掌握条件运算符熟练掌握switch语句 4.1选择结构和条件判断在现实生活中,需要进行判断和选择的情况是很多的如果你在家,我去拜访你如果考试不及格,要补考如果遇到红灯,要停车等待周末我们去郊游70岁以上的老年人,入公园免票 4.1选择结构和条件判断处理这些问题,关键在于进行条件判断由于程序处理问题的需要,在大多数程序中都会包含选择结构需要在进行下一个操作之前先进行条件判断 4.1选择结构和条件判断C语言有两种选择语句:if语句实现两个分支的选择结构(2)switch语句实现多分支的选择结构条件条件操作1操作2操作1操作n 4.2.2if语句的一般形式if(表达式)语句1[else语句2]关系表达式逻辑表达式数值表达式方括号内的部分为可选的 4.2.2if语句的一般形式if(表达式)语句1[else语句2]简单的语句复合语句另一个if语句等 最常用的3种if语句形式:if(表达式)语句1(没有else子句)if(表达式)语句1else语句2(有else子句)if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3┆elseif(表达式m)语句melse语句m+1(在else部分又嵌套了多层的if语句) 说明:整个if语句可写在多行上,也可写在一行上,但都是一个整体,属于同一个语句“语句1”…“语句m”可以是简单的语句,也可以是复合语句“语句1”…“语句m”等是if中的内嵌语句,这些语句也可以是一个if语句 if(number>500)cost=0.15;elseif(number>300)cost=0.10;elseif(number>100)cost=0.075;elseif(number>50)cost=0.05;elsecost=0;if(number>500)cost=0.15;elseif(number>300)cost=0.10;elseif(number>100)cost=0.075;elseif(number>50)cost=0.05;elsecost=0;等价于P89例子分号不能丢 4.1选择结构和条件判断例4.1ax2+bx+c方程的根。由键盘输入a,b,c。假设a,b,c的值任意,并不保证。需要在程序中进行判别,如果条件成立,就计算并输出方程的两个实根,否则就输出“方程无实根”的信息。 输入a,b,c计算discdisc>=0计算x1,x2输出无实根输出x1,x2真假选择结构,用if语句实现 #include#includeintmain(){doublea,b,c,disc,x1,x2,p,q;scanf("%lf%lf%lf",&a,&b,&c);disc=b*b-4*a*c;if(disc<0)printf("hasnotrealroots ");else{p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf("realroots: x1=%7.2f x2=%7.2f ",x1,x2);}return0;}计算b2-4ac,disc的值变为-15-15<0为真 #include#includeintmain(){doublea,b,c,disc,x1,x2,p,q;scanf("%lf%lf%lf",&a,&b,&c);disc=b*b-4*a*c;if(disc<0)printf("hasnotrealroots ");else{p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf("realroots: x1=%7.2f x2=%7.2f ",x1,x2);}return0;}计算b2-4ac,disc的值变为88<0为假p的值变为-1q的值变为0.71x1的值变为-0.29x2的值变为-1.71 if(disc<0)printf("hasnotrealroots ");else{p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf("realroots: x1=%7.2f x2=%7.2f ",x1,x2);}return0;}选择结构,用if语句实现的 if(disc<0)printf("hasnotrealroots ");else{p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf("realroots: x1=%7.2f x2=%7.2f ",x1,x2);}return0;}复合语句 例4.3输入3个数a,b,c,要求按由小到大的顺序输出。解题思路:可以先用伪代码写出算法:如果a>b则让a和b互换(a是a,b中的小者)如果a>c则让a和c互换(a是三者中最小者)如果b>c则让b和c互换(b是三者中次小者)顺序输出a,b,c 变量值互换示意如何实现两个变量值的互换?★●AB互换前●★AB互换后 ★●ABT★变量值互换-Step1 ★●ABT★●变量值互换-Step2 ABT★●★变量值互换-Step3● 变量值互换程序代码实现T=A;A=B;B=T; #includeintmain(){floata,b,c,t;scanf("%f,%f,%f",&a,&b,&c);if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}printf("%5.2f,%5.2f,%5.2f ",a,b,c);return0;}//如果a>c,将a和c对换//a是三者中的小者//如果b>c,将b和c对换//b是三者中的次小者//如果a>b,将a和b对换//a是a、b中的小者 思考上海地铁收费标准仅乘坐5号线(莘庄-闵行开发区)6公里以内2元,6-16公里3元。其他情况:6公里以内3元,6-16公里4元,16-26公里5元,26-36公里6元,36-46公里7元,46-56公里8元。实行一票通后,最远换乘累计里程为50公里,即票价8元封顶。根据相关规定,无票乘车或遗失车票可按单程最高票价加收票款,并加以5倍以下付款。编写一个小程序实现计费,输入:所乘线路和里程。 intline,distance,cost=0;printf("请输入所乘线路及里程数:");scanf("%d%d",&line,&distance);if(line==5){if(distance<=6)cost=2;elseif(distance<=16)cost=3;elseprintf("里程数输入有误! ");}else{if(distance<=6)cost=3;elseif(distance<=16)cost=4;elseif(distance<=26)cost=5;elseif(distance<=36)cost=6;elseif(distance<=46)cost=7;elseif(distance<=56)cost=8;elseprintf("里程数输入有误! ");}if(cost>0)printf("价格为:%d ",cost); 4.3关系运算符和关系表达式4.3.1关系运算符及其优先级4.3.2关系表达式 4.3.1关系运算符及其优先级关系运算符用来对两个数值进行比较的比较运算符C语言提供6种关系运算符①<(小于)②<=(小于或等于)③>(大于)④>=(大于或等于)⑤==(等于)⑥!=(不等于)优先级相同(高)优先级相同(低) 算术运算符(高)赋值运算符(低)关系运算符4.3.1关系运算符及其优先次序关系、算术、赋值运算符的优先级c>a+b等效于c>(a+b)a>b==c等效于(a>b)==ca==bc等效于a=(b>c) 4.3.2关系表达式关系表达式用关系运算符将两个数值或数值表达式连接起来的式子关系表达式的值是一个逻辑值,即“真”或“假”在C语言中,以整数数字1代表“真”,0代表“假” 4.4逻辑运算符和逻辑表达式4.4.1逻辑运算符及其优级4.4.2逻辑表达式4.4.3逻辑型变量 4.4.1逻辑运算符及其优先次序3种逻辑运算符:&&(逻辑与)||(逻辑或)!(逻辑非)&&和||是双目(元)运算符!是一目(元)运算符逻辑表达式用逻辑运算符将关系表达式或其他逻辑量连接起来的式子一般用于多个条件的表示 4.4.1逻辑运算符及其优先次序判断年龄在13至17岁之内?age>=13&&age<=17判断年龄小于12或大于65?age<12||age>65判断字符变量ch的值是否为大(小)写字母ch>='A'&&ch<='Z' 4.4.1逻辑运算符及其优先级ab!a!ba&&ba||b真真假假真真真假假真假真假真真假假真假假真真假假逻辑运算的真值表 4.4.1逻辑运算符及其优先级逻辑运算符的优先级!→&&→||(!为三者中最高)与其他运算符的优先次序!(高)算术运算符关系运算符&&||赋值运算符(低) 4.4.2逻辑表达式逻辑表达式的值应该是逻辑量“真”或“假”编译系统在表示逻辑运算结果时以数值1代表“真”,以0代表“假”但在判断一个量是否为“真”时以0代表“假”,以非0代表“真”注意:将一个非0的数值认作为“真” 4.4.2逻辑表达式例:(1)若a=4,则!a的值为0(2)若a=4,b=5,则a&&b的值为1(3)a和b值分别为4和5,则a||b的值为1(4)a和b值分别为4和5,则!a||b的值为1(5)4&&0||2的值为1ab!a!ba&&ba||b非0非00011非0001010非01001001100修改后的逻辑运算真值表非0为'真'0为'假' 4.4.2逻辑表达式判别某一年是否闰年,用逻辑表达式表示闰年的条件是符合下面二者之一:①能被4整除,但不能被100整除,如2008②能被400整除,如2000(year%4==0&&year%100!=0)||year%400==0如果表达式值为1,则为闰年;否则为非闰年 4.5条件运算符和条件表达式有一种if语句,当被判别的表达式的值为“真”或“假”时,都执行一个赋值语句且向同一个变量赋值如if(a>b)max=a;elsemax=b;max=(a>b)?a:b;条件运算符条件表达式 4.5条件运算符和条件表达式条件表达式的一般形式为表达式1?表达式2:表达式3条件运算符的执行顺序求解表达式1若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值 4.5条件运算符和条件表达式条件运算符优先于赋值运算符条件运算符的结合方向为“自右至左”以下为合法的使用方法:a>b?(max=a):(max=b);a>b?printf("%d",a):printf("%d",b); 4.5条件运算符和条件表达式例4.4输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。解题思路:用条件表达式来处理,当字母是大写时,转换成小写字母,否则不转换 4.5条件运算符和条件表达式#includeintmain(){charch;scanf("%c",&ch);ch=(ch>='A'&&ch<='Z')?(ch+32):ch;printf("%c ",ch);return0;} 4.6选择结构的嵌套在if语句中又包含一个或多个if语句称为if语句的嵌套一般形式:if(…)if(…)语句1else语句2elseif(…)语句3else语句4内嵌ifelse总是与它上面最近的未配对的if配对 4.6选择结构的嵌套if(…){if(…)语句1}else语句2内嵌if{}限定了内嵌if范围 4.6选择结构的嵌套例4.5有一函数:编一程序,输入一个x值,要求输出相应的y值。解题思路:用if语句检查x的值,根据x的值决定赋予y的值由于y的可能值不是两个而是三个,因此不可能只用一个简单的(无内嵌if)的if语句来实现 4.6选择结构的嵌套解题思路:方法1(1)先后用3个独立的if语句处理:输入x若x<0,则y=-1若x=0,则y=0若x>0,则y=1输出x和yscanf("%d",&x);if(x<0)y=-1;if(x==0)y=0;if(x>0)y=1;printf("x=%d,y=%d ",x,y); 4.6选择结构的嵌套解题思路:方法2(2)用一个嵌套的if语句处理:输入x若x<0,则y=-1否则若x=0,则y=0否则y=1输出x和yscanf("%d",&x);if(x<0)y=-1;elseif(x==0)y=0;elsey=1;printf("x=%d,y=%d ",x,y); 4.7用switch语句实现多分支选择结构switch语句用来实现多分支选择结构学生成绩分类85分以上为'A'等70~84分为'B'等60~69分为'C'等……人口统计分类按年龄分为老、中、青、少、儿童条件 switch语句的作用是根据表达式的值,使流程跳转到不同的语句switch语句的一般形式:switch(表达式){case常量1:语句列表1case常量2:语句列表2┇┇┇case常量n:语句列表ndefault:语句n+1}常量1~n的值不能相同整数类型(包括字符型)整数类型(包括字符型),不能有变量由0条、1条或多条语句组成的语句序列 基本要点(P103)其中,switch,case和default是关键字。(表达式)要求其表达式的值为整型数。常量1~n要求表达式用整型常量组成,不得含有变量,一般用数字或字符组成。语句列表1~n分别是由0条、1条或多条语句组成的语句序列。一般情况下,在非空语句序列的最后一条语句用break;表示退出switch语句,执行其后面语句。如果该语句序列中没有break;语句,则表示继续执行下面的程序段,直到遇到break;语句或所有程序段都执行完再退出switch语句。 执行过程计算switch后面的(表达式)的值。然后用该值依次与花括号内的case后面常量的值进行比较。先与常量1的值进行比较,如果相等,则执行语句列表1,遇到break;语句则退出switch语句,否则继续执行语句列表2,直到遇到break;语句退出switch语句为止。如果不等,再将(表达式)的值与常量2的值进行比较,如果相等,则执行语句列表2,其方法同于执行语句列表1,如果不等,再将(表达式)的值与常量3的值进行比较,依次类推。总之,将switch语句开头的表达式的值依次与花括号内case后边常量的值进行比较,哪个相等,便执行该常量之后对应的语句列表,如果都不相等,则执行关键字default后面的程序段,如果没有default,则什么都不做,退出该switch语句。 例题思考根据输入的一个整数值(1~7)分别在屏幕上输出星期一~星期日。解题思路:输入一个整数用switch语句实现判断 #includeintmain(){intday;scanf("%d",&day);switch(day){case1:printf("星期一 ");break;case2:printf("星期二 ");break;case3:printf("星期三 ");break;case4:printf("星期四 ");break;case5:printf("星期五 ");break;case6:printf("星期六 ");break;case7:printf("星期日 ");break;default:printf("输入错误,不是一个合法的日期!");break;}return0;}输入2 思考假设输入的整数是1~5则输出为"工作日",6,7时输出"休息日" #includeintmain(){intday;scanf("%d",&day);switch(day){case1:case2:case3:case4:case5:printf("工作日 ");break;case6:case7:printf("休息日 ");break;default:printf("输入错误,不是一个合法的日期!");break;}return0;}输入2 4.7用switch语句实现多分支选择结构例4.6要求按照考试成绩的等级输出百分制分数段,A等为85分以上,B等为70~84分,C等为60~69分,D等为60分以下。成绩的等级由键盘输入。解题思路:这是一个多分支选择问题根据百分制分数将学生成绩分为4个等级如果用if语句,至少要用3层嵌套的if,进行3次检查判断用switch语句进行一次检查即可得到结果 #includeintmain(){chargrade;scanf("%c",&grade);printf("Yourscore:");switch(grade){case'A':printf("85~100 ");break;case'B':printf("70~84 ");break;case'C':printf("60~69 ");break;case'D':printf("<60 ");break;default:printf("enterdataerror! ");}return0;}值为A不能少少了则会是 #includeintmain(){chargrade;scanf("%c",&grade);printf("Yourscore:");switch(grade){case'A':printf("85~100 ");break;case'B':printf("70~84 ");break;case'C':printf("60~69 ");break;case'D':printf("<60 ");break;default:printf("enterdataerror! ");}return0;}值为F 例4.7编写程序,用switch语句处理菜单命令。解题思路:在许多应用程序中,用菜单对流程进行控制,例如从键盘输入一个'A'或'a'字符,就会执行A操作,输入一个'B'或'b'字符,就会执行B操作,等等。 #includeintmain(){voidaction1(int,int),action2(int,int);charch;inta=15,b=23;ch=getchar();switch(ch){case'a':case'A':action1(a,b);break;case'b':case'B':action2(a,b);break;default:putchar('a');}return0;}输入a或A调用action1函数,执行A操作voidaction1(intx,inty){printf("x+y=%d ",x+y);} #includeintmain(){voidaction1(int,int),action2(int,int);charch;inta=15,b=23;ch=getchar();switch(ch){case'a':case'A':action1(a,b);break;case'b':case'B':action2(a,b);break;default:putchar('a');}return0;}输入b或B调用action2函数,执行B操作voidaction2(intx,inty){printf("x*y=%d ",x*y);} #includeintmain(){voidaction1(int,int),action2(int,int);charch;inta=15,b=23;ch=getchar();switch(ch){case'a':case'A':action1(a,b);break;case'b':case'B':action2(a,b);break;default:putchar('a');}return0;}输入其他字符发出警告 这是一个非常简单的示意程序实际应用中,所指定的操作可能比较复杂:A:输入全班学生各门课的成绩B:计算并输出每个学生各门课的平均成绩C:计算并输出各门课的全班平均成绩D:对全班学生的平均成绩由高到低排序并输出可以按以上思路编写程序,把各action函数设计成不同的功能以实现各要求 4.8选择结构程序综合举例例4.8写一程序,判断某一年是否闰年。解题思路:在前面已介绍过判别闰年的方法本例用不同的方法编写程序 4.8选择结构程序综合举例用变量leap代表是否闰年的信息。若闰年,令leap=1;非闰年,leap=0。最后判断leap是否为1(真),若是,则输出“闰年”信息参见教材图4.13 #includeintmain(){intyear,leap;printf("enteryear:");scanf("%d",&year);if(year%4==0)if(year%100==0)if(year%400==0)leap=1;elseleap=0;elseleap=1;elseleap=0;if(leap)printf("%dis",year);elseprintf("%disnot",year);printf("aleapyear. ");return0;}采取锯齿形式标志变量 #includeintmain(){intyear,leap;printf("enteryear:");scanf("%d",&year);if(year%4==0)if(year%100==0)if(year%400==0)leap=1;elseleap=0;elseleap=1;elseleap=0;if(leap)printf("%dis",year);elseprintf("%disnot",year);printf("aleapyear. ");return0;}if(year%4!=0)leap=0;elseif(year%100!=0)leap=1;elseif(year%400!=0)leap=0;elseleap=1;if((year%4==0&&year%100!=0)||(year%400==0))leap=1;elseleap=0; 例4.10运输公司对用户计算运输费用。路程(skm)越远,每吨·千米运费越低。标准如下:s<250没有折扣250≤s<5002%折扣500≤s<10005%折扣1000≤s<20008%折扣2000≤s<300010%折扣3000≤s15%折扣 解题思路:设每吨每千米货物的基本运费为p,货物重为w,距离为s,折扣为d总运费f的计算公式为f=p×w×s×(1-d)关键是如何确定d 方法1:用if语句if(s<250)d=0;… 方法2:用switch语句折扣的变化规律(参见教材图4.15):折扣的“变化点”都是250的倍数在横轴上加一种坐标c,c的值为s/250c代表250的倍数当c<1时,表示s<250,无折扣1≤c<2时,表示250≤s<500,折扣d=2%2≤c<4时,d=5%;4≤c<8时,d=8%;8≤c<12时,d=10%;c≥12时,d=15% #includeintmain(){intc,s;floatp,w,d,f;printf("pleaseenterprice,weight,discount:");scanf("%f,%f,%d",&p,&w,&s);if(s>=3000)c=12;elsec=s/250;//输入单价、重量、距离 switch(c){case0:d=0;break;case1:d=2;break;case2:case3:d=5;break;case4:case5:case6:case7:d=8;break;case8:case9:case10:case11:d=10;break;case12:d=15;break;} f=p*w*s*(1-d/100);printf(“freight=%10.2f ”,f);return0;}

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭