16. 加油站加油 某加油站有a、b、c三种汽油,售价分别为3.25、3.00、2.75(元/千克),也提供了“自己加”或“协助加”两个服务等级,这样用户可以得到5%或10%的优惠。编程实现针对用户输入加油量x,汽油的品种y和服务的类型z,输出用户应付的金额。(范例位置:光盘\TM\fl\3\10)
#include
void main()
{
float x, m1, m2, m;
char y, z;
scanf("%f,%c,%c", &x, &y, &z); /*输入选择油的千克数、种类及服务*/
switch (y) /*选择汽油种类*/
{
case 'a':
m1 = 3.25;
break;
case 'b':
m1 = 3.00;
break;
case 'c':
m1 = 2.75;
break;
}
switch (z) /*选择服务种类*/
17. 加油站加油 {
case 'n': /*不需要提供服务*/
m2 = 0;
break;
case 'm':
m2 = 0.05;
break;
case 'e':
m2 = 0.1;
break;
}
m = x * m1 - x * m1 * m2; /*计算应付的钱数*/
printf("汽油种类是:%c\n", y);
printf("服务等级是:%c\n", z);
printf("用户应付金额是:%.3f\n", m);
}
本实例是通过switch循环来实现不同的选择。switch分支解决问题的关键是在于确定switch分支表达式和case常量的关系。本例常量的个数是一定的,汽油有a、b、c三种类型,服务种类也有三种情况,“不需要提供服务”(n)、“自己加”(m)、“协助加”(e),变量输入的数据是规定好的常量。根据已知的条件和确定switch和case的关系就可以写出switch语句。
18. 计算运输公司的计费某运输公司的收费按照用户运送货物的路程进行计费。路程(s)越远,每公里运费越低,其收费标准如下表3.3所示。路程(km)运费s<250没有折扣250≤s<5002%折扣500≤s<10005%折扣1000≤s<20008%折扣2000≤s<300010%折扣3000≤s15%折扣
#include
int main()
{
int iDiscount; /*表示折扣*/
int iSpace; /*表示路程*/
int iSwitch; /*表示折扣的检验情况*/
float fPrice,fWeight,fAllPrice;
printf("请输入单价,重量和距离\n");
scanf("%f%f%d",&fPrice,&fWeight,&iSpace);
if(iSpace>3000)
{
iSwitch=12; /*折扣的检验情况为12*/
}
else
{
iSwitch=iSpace/250; /*计算折扣的检验情况*/
}
19. 计算运输公司的计费 switch(iSwitch) {
case 0:
iDiscount=0;
break;
case 1:
iDiscount=2;
break;
case 2:
case 3:
iDiscount=5;
break;
case 5:
case 6:
case 7:
iDiscount=8;
break;
case 8:
case 9:
case 10:
case 11:
iDiscount=10;
break;
case 12:
iDiscount=12;
break;
default:
break;
}
fAllPrice=fPrice*fWeight*iSpace*(1-iDiscount/100.0); /*计算总价格*/
printf("您一共需要交付:%.4f\n",fAllPrice); /*输出结果*/
return 0;
}
21. 一年的日期情况 要求设计程序通过输入一年中的月份,得到这个月所包含的天数。判断数量的情况,根据需求选择使用if语句和switch语句。
#include
int main()
{
int iMonth=0,iDay=0; /*定义变量*/
printf("请输入您想知道的所包含日期数的月份:\n"); /*提示信息*/
scanf("%d",&iMonth); /*输入数据*/
switch(iMonth) /*检验变量*/
{
/*多路开关模式switch语句进行检验*/
case 1: /*1表示一月份*/
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
22. 一年的日期情况 iDay=31; /*为iDay赋值为31*/
break; /*跳出switch结构*/
case 4:
case 6:
case 9:
case 11:
iDay=30; break; case 2:
iDay=28; /*为iDay赋值为28*/
break; /*跳出switch结构*/
default: /*默认情况*/
iDay=-1; /*赋值为-1*/
break; /*跳出switch结构*/
}
if(iDay==-1) /*使用if语句判断iDay的值*/
{
printf("您的输入有误!\n");
}
else /*默认的情况*/
{
printf("2011年%d月份 有 %d 天\n",iMonth,iDay);
}
return 0;
}