《chap03_分支结构.ppt》由会员分享,可在线阅读,更多相关《chap03_分支结构.ppt(52页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Chap3分支结构分支结构3.1统计输入的一批字符中各类字符的数量统计输入的一批字符中各类字符的数量3.2查询自动售货机中商品的价格查询自动售货机中商品的价格3.3分支结构程序设计分支结构程序设计本章要点本章要点n什么是分支结构?它的作用是什么?什么是分支结构?它的作用是什么?nswitch语句中的语句中的break起什么作用?起什么作用?n逻逻辑辑运运算算和和关关系系运运算算的的相相同同之之处处是是什什么么?它们之间又有什么不同?它们之间又有什么不同?n字符型数据在内存中是如何存储的?字符型数据在内存中是如何存储的?3.1统计输入的一批字符中各类字统计输入的一批字符中各类字符的数量符的数量例
2、例3-1 输输入入10个个字字符符,统统计计其其中中英英文文字字母母、数数字字符和其他字符的个数。字字符和其他字符的个数。3.1.1程序解析程序解析3.1.2字符类型字符类型3.1.3字符数据的输入和输出字符数据的输入和输出3.1.4逻辑运算逻辑运算3.1.5else-if语句语句3.1.1程序解析程序解析#includeintmain(void)intdigit,i,letter,other;charch;digit=letter=other=0;printf(“Enter10characters:);for(i=1;i=a&ch=A&ch=0&ch=a&ch=A&ch=0&ch=a&ch=
3、A&ch=0&ch=9x=1关系运算关系运算-1=x=-1并且并且x=-1&x1)&(y1)(x1)|(y1)(x1)!(x1)即即x=a)&(ch=a&ch=a&ch=A&ch=a&ch=A&ch=0&ch=a&ch=A&ch=0&ch=9)digit+;elseother+;假假表达式表达式1表达式表达式2语句语句1语句语句2语句语句n-1语句语句n真真表达式表达式n-1真真假假真真假假假假分段计算水费分段计算水费例例3-3分段计算水费分段计算水费源程序源程序-分段计算水费分段计算水费#includeintmain(void)doublex,y;printf(Enterx:);scanf(
4、%lf,&x);if(x0)y=0;elseif(x=15)y=4*x/3;elsey=2.5*x-10.5;printf(f(%.2f)=%.2fn,x,y);return0;Enterx:-0.5f(-0.50)=0.00Enterx:9.5f(9.50)=12.67Enterx:21.3f(21.30)=42.75Enterx:?n编程练习编程练习3-33.2查询自动售货机中商品的价格查询自动售货机中商品的价格例例3-4 查询自动售货机中商品的价格查询自动售货机中商品的价格3.2.1程序解析程序解析3.2.2switch语句语句3.2.1程序解析程序解析假假设设自自动动售售货货机机出出售
5、售4种种商商品品,薯薯片片(crisps)、爆爆米米花花(popcorn)、巧巧克克力力(chocolate)和和可可乐乐(cola),售售价价分分别别是是每每份份3.0、2.5、4.0和和3.5元元。在在屏屏幕幕上上显显示示以以下下菜菜单单,用用户户可可以以连连续续查查询询商商品品的的价价格格,当当查查询询次次数数超超过过5次次时时,自自动动退退出出查查询询;不不到到5次次时时,用用户户可可以以选选择择退退出出。当当用用户户输输入入编编号号14,显显示示相相应应商商品品的的价价格格;输输入入0,退退出出查询;输入其他编号,显示价格为查询;输入其他编号,显示价格为0。1Selectcrisps
6、2Selectpopcorn3Selectchocolate4Selectcola0Exit#includeIntmain(void)intchoice,i;doubleprice;for(i=1;i=5;i+)printf(1Selectcrispsn);printf(2Selectpopcornn);printf(3Selectchocolaten);printf(4Selectcolan);printf(0exitn);printf(Enterchoice:);scanf(%d,&choice);if(choice=0)break;switch(choice)case1:price=3.
7、0;break;case2:price=2.5;break;case3:price=4.0;break;case4:price=3.5;break;default:price=0.0;break;printf(price=%0.1fn,price);printf(Thanksn);1Selectcrisps2Selectpopcorn3Selectchocolate4Selectcola0ExitEnterchoice:1price=3.01Selectcrisps2Selectpopcorn3Selectchocolate4Selectcola0ExitEnterchoice:7price=
8、0.01Selectcrisps2Selectpopcorn3Selectchocolate4Selectcola0ExitEnterchoice:0Thanks3.2.2switch语句语句处理多分支选择问题,处理多分支选择问题,3种情况种情况1、在在switch语语句句的的每每个个语语句句段段中中都都使使用用break语句语句switch(表达式表达式)case常量表达式常量表达式1:语句段:语句段1;break;case常量表达式常量表达式2:语句段:语句段2;break;.case常量表达式常量表达式n:语句段:语句段n;break;default:语句段语句段n+1;break;sw
9、itch(表达式表达式)case常量表达式常量表达式1:语句段:语句段1;break;case常量表达式常量表达式2:语句段:语句段2;break;.case常量表达式常量表达式n:语句段:语句段n;break;default:语句段语句段n+1;break;表达式的值表达式的值=常量表达式常量表达式 2 的值的值表表达达式式语句段语句段1语句段语句段2语句段语句段n语句段语句段n+1表达式的值表达式的值=常量表达式常量表达式 1 的值的值表达式的值表达式的值=常量表达式常量表达式 n 的值的值其他其他breakbreakbreakbreakswitch(choice)case1:price=
10、3.0;break;case2:price=2.5;break;case3:price=4.0;break;case4:price=3.5;break;default:price=0.0;break;用用else-if如何实现?如何实现?求解简单表达式求解简单表达式例例3-5输入一个形式如输入一个形式如“操作数操作数运算符运算符操作操作数数”的四则运算表达式,输出运算结果。的四则运算表达式,输出运算结果。例如:例如:输入:输入:3.1+4.8输出:输出:7.9源程序源程序#includeintmain(void)charoperator;doublevalue1,value2;printf(T
11、ypeinanexpression:);scanf(%lf%c%lf,&value1,&operator,&value2);switch(operator)case+:printf(=%.2fn,value1+value2);break;case-:printf(=%.2fn,value1-value2);break;case*:printf(=%.2fn,value1*value2);break;case/:printf(=%.2fn,value1/value2);break;default:printf(Unknownoperatorn);break;return0;Typeinanexp
12、ression:3.1+4.8=7.9如果除数为如果除数为0?2、在、在switch中不使用中不使用breakswitch(表达式表达式)case常量表达式常量表达式1:语句段:语句段1;case常量表达式常量表达式2:语句段:语句段2;.case常量表达式常量表达式n:语句段:语句段n;default:语句段语句段n+1;switch(表达式表达式)case常量表达式常量表达式1:语句段:语句段1;case常量表达式常量表达式2:语句段:语句段2;.case常量表达式常量表达式n:语句段:语句段n;default:语句段语句段n+1;switch(choice)case1:price=3.0
13、;case2:price=2.5;case3:price=4.0;case4:price=3.5;default:price=0.0;表达式的值表达式的值=常量表达式常量表达式 2 的值的值表表达达式式语句段语句段1语句段语句段2语句段语句段n语句段语句段n+1表达式表达式的值的值=常量表达式常量表达式 1 的值的值表达式的值表达式的值=常量表达式常量表达式 n 的值的值其他其他price=?3、在、在switch的某些语句段中使用的某些语句段中使用break例例3-6输输入入10个个字字符符,分分别别统统计计出出其其中中空空格格或回车、数字和其他字符的个数。或回车、数字和其他字符的个数。例例
14、3-1输输入入10个个字字符符,统统计计其其中中英英文文字字母母、数数字字字符和其他字符的个数。字符和其他字符的个数。intmain(void)intblank,digit,i,other;charch;blank=digit=other=0;printf(Enter10characters:);for(i=1;i=10;i+)ch=getchar();switch(ch)case:casen:blank+;break;case0:case1:case2:case3:case4:case5:case6:case7:case8:case9:digit+;break;default:other+;
15、break;printf(blank=%d,digit=%d,other=%dn,blank,digit,other);return0;Enter10characters:Reold123?blank=1,digit=3,other=63.3分支结构程序设计分支结构程序设计n分支结构一般分为二分支和多分支两种结构分支结构一般分为二分支和多分支两种结构n用条件语句(用条件语句(if和和switch)实现选择实现选择3.3.1二分支结构和基本的二分支结构和基本的if语句语句3.3.2多分支结构与嵌套的多分支结构与嵌套的if语句和语句和switch语句语句3.3.1二分支结构和基本的二分支结构和基本
16、的if语句语句if(表达式表达式)语句语句1else语句语句2if(表达式表达式)语句语句1语句语句1表达式表达式语句语句2真真假假语句语句1表达式表达式真真假假一条语句一条语句判断数字的奇偶性判断数字的奇偶性例例3-7输输入入1个个整整数数,判判断断该该数数是是奇奇数数还还是是偶偶数。数。number%2=0源程序源程序-判断数字的奇偶性判断数字的奇偶性#includeintmain(void)intnumber;printf(Enteranumber:);scanf(%d,&number);if(number%2=0)printf(Tnenumberiseven.n);elseprintf
17、(Tnenumberisodd.n);return0;Enteranumber:329Tnenumberisodd.Enteranumber:1028Tnenumberiseven.求绝对值求绝对值例例3-8输入输入1个整数,输出它的绝对值个整数,输出它的绝对值。当当number=0时,时,?源程序源程序-求绝对值求绝对值#includeintmain(void)intnumber;printf(Enteranumber:);scanf(%d,&number);if(number0)number=-number;printf(Theabsolutevalueis%d.n,number);ret
18、urn0;Enteranumber:10Theabsolutevalueis10.Enteranumber:-300Theabsolutevalueis300.3.3.2多分支结构与嵌套的多分支结构与嵌套的if语句和语句和switch语句语句多分支结构有多种形式多分支结构有多种形式实现方法实现方法:n嵌套的嵌套的if语句语句elseif语句语句嵌套的嵌套的if-else语句语句nswitch语句语句嵌套的嵌套的if语句语句if(表达式表达式)语句语句1else语句语句2 if语句语句if语句语句oelseif语句语句o嵌嵌套套的的if-else语语句句if(表达式表达式1)语句语句1elsei
19、f(表达式表达式2)语句语句2elseif(表达式表达式n-1)语句语句n-1else语句语句n假假表表达达式式1表表达达式式2语句语句1语句语句2语句语句n-1语句语句n真 表达式表达式n-1假假真真 假假假假真 elseif语句语句n个分支需要个分支需要n-1次比较次比较嵌套的嵌套的ifelse语句语句if(表达式表达式1)if(表达式表达式2)语句语句1else语句语句2elseif(表达式表达式3)语句语句3else语句语句4表达式表达式1表达式表达式3语句语句4真真假假表达式表达式2语句语句3语句语句1语句语句2真真真真假假假假if(x1)y=x+1;elseif(x2)y=x+2;
20、elsey=x+3;if(x2)if(x1)y=x+1;elsey=x+2;elsey=x+3;x2 x1y=x+1y=x+2真真 假假真真 y=x+3假假假假 x1 x2y=x+1y=x+2真真 假假真真 y=x+32种嵌套种嵌套if语句的比较语句的比较else和和if的匹配的匹配if(表达式表达式1)if(表达式表达式2)语句语句1else语句语句2elseif(表达式表达式3)语句语句3else语句语句4if(表达式表达式1)if(表达式表达式2)语句语句1elseif(表达式表达式3)语句语句3else语句语句4else 与最靠近它的、没有与别的与最靠近它的、没有与别的 else 匹配
21、过的匹配过的 if 匹配匹配if(表达式表达式1)if(表达式表达式2)语句语句1elseif(表达式表达式3)语句语句3else语句语句4改变改变else和和if的配对的配对例例3-10改写下列改写下列if语句,使语句,使else和第和第1个个if配对。配对。if(x2)if(x1)y=x+1;elsey=x+2;if(x2)if(x1)y=x+1;elsey=x+2;if(x2)if(x1)y=x+1;else;elsey=x+2;每条语句的执行条件每条语句的执行条件?习题习题3练习:练习:n3-1n3-2习题习题3-1#include#includeintmain(void)floata
22、=0,b=0,c=0,s=0,p=0;/p为周长为周长doublearea=0;/area面积面积printf(Entera,b,c:);scanf(%f%f%f,&a,&b,&c);if(a+b)c&(a+c)b&(b+c)a)s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c);printf(area=%lf,p=%fn,area,2*s);elseprintf(nottriangle!n);return0;#includeintmain(void)floats=0.0,tax=0.0,r=0.0;printf(Enters:);scanf(%f,&s);if
23、(s850)r=0;elseif(s1350)r=5;elseif(s2850)r=10;elseif(sy则将则将x与与y的值的值进行交换,进行交换,然后再用然后再用x与与z进行比较,如果进行比较,如果xz则将则将x与与z的值进行交换,这样能使的值进行交换,这样能使x最最小。小。#includemain()intx,y,z,t;scanf(%d%d%d,&x,&y,&z);if(xy)t=x;x=y;y=t;/*交换交换x,y的值的值*/if(xz)t=z;z=x;x=t;/*交换交换x,z的值的值*/if(yz)t=y;y=z;z=t;/*交换交换z,y的值的值*/printf(small
24、tobig:%d%d%dn,x,y,z);return0;题目:输入某年某月某日,判断这题目:输入某年某月某日,判断这一天是这一年的第几天?一天是这一年的第几天?程序分析:以程序分析:以3月月5日为例,应该先把前两个日为例,应该先把前两个月的加起来,然后再加上月的加起来,然后再加上5天即本年的第几天即本年的第几天,特殊情况,闰年且输入月份大于天,特殊情况,闰年且输入月份大于3时需时需考虑多加一天。考虑多加一天。#includemain()intday,month,year,sum,leap;printf(npleaseinputyear,month,dayn);scanf(%d,%d,%d,&
25、year,&month,&day);switch(month)/*先计算某月以前月份的总天数先计算某月以前月份的总天数*/case1:sum=0;break;case2:sum=31;break;case3:sum=59;break;case4:sum=90;break;case5:sum=120;break;case6:sum=151;break;case7:sum=181;break;case8:sum=212;break;case9:sum=243;break;case10:sum=273;break;case11:sum=304;break;case12:sum=334;break;default:printf(dataerror);break;sum=sum+day;/*再加上某天的天数再加上某天的天数*/if(year%400=0|(year%4=0&year%100!=0)/*判断是不是判断是不是闰年闰年*/leap=1;elseleap=0;if(leap=1&month2)/*如果是闰年且月份大于如果是闰年且月份大于2,总天数应该加总天数应该加一天一天*/sum+;printf(Itisthe%dthday.,sum);return0;
限制150内