一道写的快但排查了很久错误的题目......记录一下:
题目描述:
编写程序,根据某城市普通出租车收费标准进行车费计算。标准如下:
起步里程为3公里,起步费10元;
超出起步里程后10公里内,每公理2元;
超过10公里以上的部分加收50%的回空补贴费,即每公里3元;
营运过程中,因路阻及乘客要求临时停车等待的,按每5分钟2元计费(不足5分钟不收费)。
输入格式:共一行,包括行驶里程(单位为公里,精确到小数点后1位)与等待时间(整数,单位为分钟),其间以空格分隔
输出格式:在一行中输出乘客应支付的车费(单位为元),结果四舍五入保留整数。
示例:
输入:40.0 7
输出: 116
#include <stdio.h>
//出租车计价
int main() {
int t;
double k, money;
scanf("%lf %d", &k, &t);
if (k <= 3) {
money = 10;
} else if (k <= 10) {
money = 10 + 2 * (k - 3);
} else {
money = 10 + 2 * 7 + 3 * (k - 10);
}
// if(t/5 >0)//可以加但没用,且排查了好久错误才发现错写成t%5了...
money = money + t / 5 * 2;
// double money=6.78;//测试%.0lf是四舍五入的
// printf("%d\n", (int)(money+0.5));
printf("%.0lf\n", money);
return 0;
}
个人的易错点:
1. if语句第一个分支写成了k <= 10 ;好在浏览了几遍代码后立刻就发现了,写错的原因可能是看到车费10元顺手打上去了
2. 输入的数据类型要与定义的相匹配,scanf 中对应的数据类型容易未经思考写成%d类型,实际上定义的是double类型,第一步出错导致测试完全不对
3. 无意义的代码,如本题代码中注释掉的一句,不写是对的且简洁,写了有可能出错
4. 本题涉及到数据的四舍五入,可以用①+0.5并强制类型转换;或者②采取%.0lf 的输出格式自动保留四舍五入
最后,遇到bug的处理步骤,直到得到想要的结果:
先看有没有手误打错的,然后通过调试看运行中数据变化,然后重新看题目检查是否有遗漏以及格式是否符合要求,之后可以走开一会再检查逻辑上有没有问题,最后果断寻求外部帮助吧。