前言
NWAFU P1537
一、题目
题目描述
现有商场进行降价促销,当购买商品总额在[100,200]之间时,折扣为95折,即总价=95%*总额,购买商品大于200元时,折扣为92折,购买金额不足100元时,无折扣。请编写程序计算需要支付的实际费用。
在程序的主函数中输入购买各个商品的费用总额(一组小数,以空格分隔,以'\n'或EOF结束输入,最多支持100件商品),请编写名为calPrice的函数计算实际费用,要求其函数原型为:
float calPrice(float price);
其中:形参price为各个商品的折扣前费用总额。返回为需要支付的实际费用。
在程序主函数中输出费用总额及实际费用,如:“167.00 158.65”。注意需要精确到分(小数点后两位),两数之间用两个制表符分隔。
输入
一组小数,以空格分隔,以'\n'或EOF结束,程序最多支持100件商品
输出
两个制表符分隔的消费总额及折扣后的实际费用,每条消费信息显示为一行结果。
样例输入
167 78.3
样例输出
167.00 158.65
78.30 78.30
二、设计步骤
此题原型为水费分段计价程序,小小分段难上台面,直接上成果:
#include<stdio.h>
#define T1 100 //阈值1
#define T2 200 //阈值2
#define C1 0.95 //折扣1
#define C2 0.92 //折扣2
float calPrice(float price);
int main(void)
{
float a[100]={0},b[100] = {0};
int i=0;
float t;
while(scanf(" %f",&t)!= EOF){
a[i] = t; //存放原价(消费总额)
b[i] = calPrice(a[i]); //存放实际费用
char ch;
scanf("%c",&ch);
printf("%.2f\t\t%.2f",a[i],b[i]);
printf("\n");
if(ch == '\n') //换行结束输入
break;
i++;
}
return 0;
}
float calPrice(float price) //折扣计算 可读性拉满
{
if(price >= T1&&price <= T2){
return price * C1;
}
else if(price > T2){
return price * C2;
}
return price;
}
如此完美的逻辑和准确无误的样例测试根本找不到优化的理由
然鹅,它很快告诉了我它与水费题的区别
输入
一组小数,以空格分隔,以'\n'或EOF结束,程序最多支持100件商品
好好好这么玩是吧
成品:
#include<stdio.h>
#define _CRT_SECURE_NO_WORNINGS 1
#define T1 100
#define T2 200
#define C1 0.95
#define C2 0.92
float calPrice(float price);
int main(void)
{
float a[100]={0},b[100] = {0};
int i=0;
float t;
while(scanf(" %f",&t)!= EOF){
a[i] = t;
b[i] = calPrice(a[i]);
char ch;
scanf("%c",&ch);
printf("%.2f\t\t%.2f",a[i],b[i]);
printf("\n");
i++;
if(ch == '\n'||i== 100) //小小的i == 100伤害了多少英雄豪杰
break;
}
return 0;
}
float calPrice(float price)
{
if(price >= T1&&price <= T2){
return price * C1;
}
else if(price > T2){
return price * C2;
}
return price;
}
总结
EOF