【文档说明】c语言程序设计第4章-选择结构程序设计课件.ppt,共(93)页,1.308 MB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-44488.html
以下为本文档部分文字说明:
第4章选择结构程序设计4.1选择结构和条件判断4.2用if语句实现选择结构4.3关系运算符和关系表达式4.4逻辑运算符和逻辑表达式4.5条件运算符和条件表达式4.6选择结构的嵌套4.7用switch语句实现多分支选择结
构4.8选择结构程序综合举例4.1选择结构和条件判断在现实生活中,需要进行判断和选择的情况是很多的如果你在家,我去拜访你如果考试不及格,要补考如果遇到红灯,要停车等待周末我们去郊游70岁以上的老年人,入
公园免票4.1选择结构和条件判断在现实生活中,需要进行判断和选择的情况是很多的处理这些问题,关键在于进行条件判断由于程序处理问题的需要,在大多数程序中都会包含选择结构,需要在进行下一个操作之前先进行条件判断4.1选择结构和条件判断C语言有两种选择语句:(1)if语句,实现两个
分支的选择结构(2)switch语句,实现多分支的选择结构4.1选择结构和条件判断例4.1在例3.5的基础上对程序进行改进。题目要求是求方程的根。由键盘输入a,b,c。假设a,b,c的值任意,并不保证。需要在程序中进行判别,如果,就计算并输出方程的
两个实根,否则就输出“方程无实根”的信息。02cbxax042acb042acb解题思路:输入a,b,c计算discdisc<0计算x1,x2输出无实根输出x1,x2真假#include<stdio.h>#include<math.h>in
tmain(){doublea,b,c,disc,x1,x2,p,q;scanf("%lf%lf%lf",&a,&b,&c);disc=b*b-4*a*c;计算b2-4ac,disc的值变为-15if(disc<0)printf(“has
notrealroots\n”);else{p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf(“realroots:\nx1=%7.2f\nx2=%7.
2f\n”,x1,x2);}return0;}-15<0为真#include<stdio.h>#include<math.h>intmain(){doublea,b,c,disc,x1,x2,p,q;scanf("%lf%lf%lf",&a,&b,&c);disc=b*b-4*
a*c;计算b2-4ac,disc的值变为8if(disc<0)printf(“hasnotrealroots\n”);else{p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf(“
realroots:\nx1=%7.2f\nx2=%7.2f\n”,x1,x2);}return0;}8<0为假p的值变为-1q的值变为0.71x1的值变为-0.29x2的值变为-1.71if(dis
c<0)printf(“hasnotrealroots\n”);else{p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf(“realroots:\nx1=%7.2f\nx2=%7.2f\n”,x1,x2);}return0;
}选择结构,用if语句实现的if(disc<0)printf(“hasnotrealroots\n”);else{p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf(“realroo
ts:\nx1=%7.2f\nx2=%7.2f\n”,x1,x2);}return0;}复合语句4.2用if语句实现选择结构4.2.1用if语句处理选择结构举例4.2.2if语句的一般形式4.2.1用if语句处理选择结构举例例4.2输入两个实数,按代数值由小到大的顺序输出这两个数。
解题思路:只需要做一次比较,然后进行一次交换即可用if语句实现条件判断关键是怎样实现两个变量值的互换★●AB互换前●★AB互换后4.2.1用if语句处理选择结构举例★●ABC★4.2.1用if语句处理选择结构举例★●ABC★●4.2.1用if语句处理选择结构举例
ABC★●★4.2.1用if语句处理选择结构举例●#include<stdio.h>intmain(){floata,b,t;scanf("%f,%f",&a,&b);if(a>b){t=a;a=b;b=t;}printf("%5.2f,%5.2f\n",a,b);return0
;}将a和b的值互换如果a>b#include<stdio.h>intmain(){floata,b,t;scanf("%f,%f",&a,&b);if(a>b){t=a;a=b;b=t;}printf("%5.2f,%5.2f\n",a,b);return0;}选择结构
,用if语句实现的例4.3输入3个数a,b,c,要求按由小到大的顺序输出。解题思路:可以先用伪代码写出算法:ifa>b,a和b对换(a是a、b中的小者)ifa>c,a和c对换(a是三者中最小者)ifb>c,b和c对
换(b是三者中次小者)顺序输出a,b,c#include<stdio.h>intmain(){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\n",a,b,c);return0;}如果a>b,将a和b对换a是a、b中的小者如果a>c,将a和c对换a是三者中的小者如果b>c,将b和
c对换b是三者中的次小者4.2.2if语句的一般形式if(表达式)语句1[else语句2]关系表达式逻辑表达式数值表达式方括号内的部分为可选的4.2.2if语句的一般形式if(表达式)语句1[else语句2]简单的
语句复合语句另一个if语句等最常用的3种if语句形式:1.if(表达式)语句1(没有else子句)2.if(表达式)语句1else语句2(有else子句)3.if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3┆els
eif(表达式m)语句melse语句m+1(在else部分又嵌套了多层的if语句)if(number>500)cost=0.15;elseif(number>300)cost=0.10;elseif(number>100)cost=0.075;elseif(number>50)c
ost=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)co
st=0.05;elsecost=0;等价于分号不能丢说明:(1)整个if语句可写在多行上,也可写在一行上但都是一个整体,属于同一个语句(2)“语句1”…“语句m”是if中的内嵌语句内嵌语句也可以是一个i
f语句(3)“语句1”…“语句m”可以是简单的语句,也可以是复合语句4.3关系运算符和关系表达式4.3.1关系运算符及其优先次序4.3.2关系表达式关系运算符<<=>>===!=(6种)优先级赋值<关系(
后2<前4)<算术关系表达式用关系运算符将两个表达式连接起来的式子.算术、关系、逻辑、赋值、字符。值真(1)假(0)举例已知:(a=3b=2c=1d=0)0a==b>cd==a>b+c15>3?4.3关系运算符和关系表达式思考:a>b>c的值
等于多少?p92c>a+b等效于c>(a+b)a>b==c等效于(a>b)==ca==b<c等效于a==(b<c)a=b>c等效于a=(b>c)4.4逻辑运算符和逻辑表达式4.4.1逻辑运算符及其优先
次序4.4.2逻辑表达式4.4.3逻辑型变量逻辑运算符!(逻辑非)&&(逻辑与)||(逻辑或)运算规则优先次序赋值<||<&&<关系<算术<!(1)!:取逻辑值的相反值。(2)&&:参加运算的两个逻辑值都为真时,
结果为真(1)。(3)||:参加运算的两个逻辑值都为假时,结果为假(0)。P93逻辑表达式用逻辑运算符将关系表达式和逻辑量连接起来的式子。举例已知:(a=1b=0)1a||b&&0!a&&(5>3)||b0双目单目4.4.1、逻辑运算符
和逻辑表达式4.4.1逻辑运算符及其优先次序判断年龄在13至17岁之内?age>=13&&age<=17判断年龄小于12或大于65?age<12||age>654.4.1逻辑运算符及其优先次序ab!a!ba&&ba||b真真假假真真真假假真假真假真真假假真假假真真假假逻辑运算的
真值表4.4.2逻辑表达式逻辑表达式的值应该是逻辑量“真”或“假”编译系统在表示逻辑运算结果时以数值1代表“真”,以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的值为14.4.2逻辑表达式修改后的逻
辑运算真值表ab!a!ba&&ba||b非0非00011非000101假非01001假011004.4.2逻辑表达式判别某一年是否闰年,用逻辑表达式表示闰年的条件是符合下面二者之一:①能被4整除,但不能被100整除,如2008②能被40
0整除,如2000(year%4==0&&year100!=0)||year%400==0如果表达式值为1,则闰年;否则为非闰年4.4.3逻辑型变量这是C99所增加的一种数据类型可以将关系运算和逻辑运算的结果存到一个逻辑型变量中,以便于分析和运算4.5条件运算符和条件表达
式有一种if语句,当被判别的表达式的值为“真”或“假”时,都执行一个赋值语句且向同一个变量赋值如:if(a>b)max=a;elsemax=b;max=(a>b)?a:b;条件运算符4.5条件运算符和条件表达式有一种if语句,当被判别
的表达式的值为“真”或“假”时,都执行一个赋值语句且向同一个变量赋值如:if(a>b)max=a;elsemax=b;max=(a>b)?a:b;条件表达式4.5条件运算符和条件表达式条件表达式的一般形式为表达式1?表达式2:表达式34.5条件运算符和条件表达式条件运算符的
执行顺序:求解表达式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条件运算符和条件表达式#include<stdio.h>intmain(){charch;scanf("%c",&ch);ch=(ch>='
A'&&ch<='Z„)?(ch+32):ch;printf("%c\n",ch);return0;}4.6选择结构的嵌套在if语句中又包含一个或多个if语句称为if语句的嵌套一般形式:if()if()语句1else语句2elseif()语句3else语句4内嵌ifel
se总是与它上面最近的未配对的if配对在if语句中又包含一个或多个if语句称为if语句的嵌套if(){if()语句1}else语句2内嵌if{}限定了内嵌if范围例4.5有一函数:编一程序,输入一个x值,要求输出相应的y值。
)0(1)0(0)0(1xxxy解题思路:用if语句检查x的值,根据x的值决定赋予y的值由于y的可能值不是两个而是三个,因此不可能只用一个简单的(无内嵌if)的if语句来实现解题思路:方法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\n",x,y);解题思路:方法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\n",x,y);解题思路:方法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\n",x,y);scanf("%d",&x);if(x>=0)if(x>0)y=1;elsey=0;elsey=-1;pr
intf("x=%d,y=%d\n",x,y);提倡内嵌if放在else中举例已知a=3b=4c=5d=0,d=?if(a>b)d=a;elseif(c>b)d=c;elsed=b;if(a>b)if(c>b)d=c;elsed=b;//注意,else总是与最近的if匹配
if(a>b){if(c>b)d=c;}elsed=b;if(a>b)if(c>b)d=c;elsed=b;elsed=a;d=5d=3d=0d=44.7用switch语句实现多分支选择结构switch语句用来实现多分支选择结构学生成绩分类85分以上为‟
A‟等70~84分为‟B‟等60~69分为‟C‟等……人口统计分类按年龄分为老、中、青、少、儿童例4.6要求按照考试成绩的等级输出百分制分数段,A等为85分以上,B等为70~84分,C等为60~69分,D等为60分以下。成绩的等级由键盘输入。解题思路:判断出这是一个多分支
选择问题根据百分制分数将学生成绩分为4个等级如果用if语句,至少要用3层嵌套的if,进行3次检查判断用switch语句进行一次检查即可得到结果#include<stdio.h>intmain(){chargr
ade;scanf("%c",&grade);printf("Yourscore:");switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n"
);break;case'D':printf("<60\n");break;default:printf("enterdataerror!\n");}return0;}值为A#include<stdio.h>intmain(){ch
argrade;scanf("%c",&grade);printf("Yourscore:");switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':pr
intf("60~69\n");break;case'D':printf("<60\n");break;default:printf("enterdataerror!\n");}return0;}不能少#
include<stdio.h>intmain(){chargrade;scanf("%c",&grade);printf("Yourscore:");switch(grade){case'A':printf("85~100\n");break;c
ase'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break;default:printf("enterdataerror!\n");}re
turn0;}值为C#include<stdio.h>intmain(){chargrade;scanf("%c",&grade);printf("Yourscore:");switch(grade){case'A':printf("85~100\n")
;break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break;default:printf
("enterdataerror!\n");}return0;}值为F#include<stdio.h>intmain(){chargrade;scanf("%c",&grade);printf("You
rscore:");switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");
break;case'D':printf("<60\n");break;default:printf("enterdataerror!\n");}return0;}此行位置有问题,应如何修改?switch语句的作用是根据表达式的值,使流
程跳转到不同的语句switch语句的一般形式:switch(表达式){case常量1:语句1case常量2:语句2┇┇┇case常量n:语句ndefault:语句n+1}整数类型(包括字符型)switch语句的作用是根据表达式的值,
使流程跳转到不同的语句switch语句的一般形式:switch(表达式){case常量1:语句1case常量2:语句2┇┇┇case常量n:语句ndefault:语句n+1}不能相同scanf("%c",&grade);p
rintf("Yourscore:");switch(grade){case'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C'
:printf("60~69\n");break;case'D':printf("<60\n");break;default:printf("enterdataerror!\n");}scanf("%c",&grade);printf("Yourscore:");switch(grade){ca
se'A':printf("85~100\n");break;case'B':printf("70~84\n");break;case'C':printf("60~69\n");break;case'D':printf("<60\n");break;default:print
f("enterdataerror!\n");}scanf("%c",&grade);printf("Yourscore:");switch(grade){case'A„:case'B„:case'C':printf("60~69\n");break;case'D':prin
tf("<60\n");break;default:printf("enterdataerror!\n");}思考#include<stdio.h>intmain(){intscore;printf(“请输入考试成绩0~100:”);scanf(“%c”,
&score);if(score>100)printf(“请输入0~100之间的整数\n”);elseif(score>=80)printf(“A\n”);elseif(score>=70)printf(“B\n”);e
lseif(score>=60)printf(“C\n”);elseprintf(“D\n”);return0;}根据输入的考试成绩(百分制整数)打印出等级水平。(使用if~else语句实现)A:80~100B:70~79C:60~69D:<60思考:使用switch语句
如何实现?程序思考#include<stdio.h>intmain(){intscore;printf("请输入考试成绩0~100:");scanf("%c",&score);switch(score){cas
e80~100:printf("A\n");break;case70~79:printf("B\n");break;case60~69:printf("C\n");break;case<60:printf("D\n");brea
k;default:printf("请输入0~100之间的整数\n");}return0;}根据输入的考试成绩(百分制整数)打印出等级水平。(使用switch语句实现)A:80~100B:70~79C:60~69D:<60思考:本程序
有问题么?程序#include<stdio.h>intmain(){intscore,p;printf(“请输入考试成绩0~100:”);scanf(“%c”,&score);p=score/10;switch(p){case0:printf(“D\n”);bre
ak;case1:printf(“D\n”);break;case2:printf(“D\n”);break;case3:printf(“D\n”);break;case4:printf(“D\n”);b
reak;case5:printf(“D\n”);break;case6:printf(“C\n”);break;case7:printf(“B\n”);break;case8:printf(“A\n”);break;case9:printf(“A\n”);break;case10:
printf(“A\n”);break;default:printf(“请输入0~100之间的整数\n”);}return0;}改进程序111种情况思考:不同case值时执行相同的操作,是否可以合并?#include<stdio.h>in
tmain(){intscore,p;printf(“请输入考试成绩0~100:”);scanf(“%c”,&score);p=score/10;switch(p){case0:case1:case2:case3:case4:case
5:printf(“D\n”);break;case6:printf(“C\n”);break;case7:printf(“B\n”);break;case8:case9:case10:printf(“A\n”);b
reak;default:printf(“请输入0~100之间的整数\n”);}return0;}改进程序2注意:多个case共用一组执行语句时,共用的执行语句写在最后一个case的后面。例4.7编写程序,用switch语句处理菜单命令。解题思路:
在许多应用程序中,用菜单对流程进行控制,例如从键盘输入一个‟A‟或‟a‟字符,就会执行A操作,输入一个‟B‟或‟b‟字符,就会执行B操作,等等。#include<stdio.h>intmain(){voi
daction1(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\n",x+y);}#include<stdio.h>intmain(){voidaction1(int,int),action2(int,int);charch;inta=15,b=23;ch=getchar();switch(ch){cas
e'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,int
y){printf("x*y=%d\n",x*y);}#include<stdio.h>intmain(){voidaction1(int,int),action2(int,int);charch;inta=15,b=23;ch=getchar();switch(ch){ca
se'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#include<stdio.h>intmain(){intyear,leap;printf("enteryear:");scan
f("%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.\n");return0;}标志变量与if(leap!=0)含义相同#include<stdio.h>intmain(){intyear,
leap;printf("enteryear:");scanf("%d",&year);if(year%4==0)if(year%100==0)if(year%400==0)leap=1;elsele
ap=0;elseleap=1;elseleap=0;if(leap)printf("%dis",year);elseprintf("%disnot",year);printf("aleapyear.\n");return0;}采取锯齿形式#include<stdio.h>
intmain(){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.\n");return0;}if(yea
r%4!=0)leap=0;elseif(year%100!=0)leap=1;elseif(year%400!=0)leap=0;elseleap=1;#include<stdio.h>intmain(){intyear,leap;printf("ent
eryear:");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.\n");return0;}if((year%4==0&&year%100!=0)||(year%400==0))lea
p=1;elseleap=0;例4.9求方程的解。02cbxax解题思路:处理以下各情况①a=0,不是二次方程②,有两个相等实根③,有两个不等实根。④,有两个共轭复根。应当以p+qi和p-qi的形式输出复根其中,p=-b/2a,q=()/2a参见教材图4.14042acb04
2acb042acbacb42#include<stdio.h>#include<math.h>intmain(){doublea,b,c,disc,x1,x2,realpart,imagpart;scanf("%
lf,%lf,%lf",&a,&b,&c);printf("Theequation");if(fabs(a)<=1e-6)printf("isnotaquadratic\n");实型不能用if(a==0)else{disc=
b*b-4*a*c;if(fabs(disc)<=1e-6)printf("hastwoequalroots:%8.4f\n",-b/(2*a));else先算disc,以减少重复计算不能用if(di
sc==0)if(disc>1e-6){x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);printf("hasdistinctrealroots:%8.4fand%8.4f\n",x1,x2);}else{realpart
=-b/(2*a);imagpart=sqrt(-disc)/(2*a);printf("hascomplexroots:\n");printf("%8.4f+%8.4fi\n“,realpart,imagpart)
;printf("%8.4f-%8.4fi\n",realpart,imagpart);}}return0;}{realpart=-b/(2*a);imagpart=sqrt(-disc)/(2*a);printf("hascomplexroots:\n");printf("%8.4
f+%8.4fi\n“,realpart,imagpart);printf("%8.4f-%8.4fi\n",realpart,imagpart);}}return0;}{realpart=-b/(2*a);imagpart
=sqrt(-disc)/(2*a);printf("hascomplexroots:\n");printf("%8.4f+%8.4fi\n“,realpart,imagpart);printf("%8.4f-
%8.4fi\n",realpart,imagpart);}}return0;}例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)折扣的变化规律(参见教材图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%#include<stdio.h>intmain(){intc,s;floatp,w,d,f;printf("pleaseent
erprice,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\n”,f);return0;}