C语言编程代码的问题

本题要求根据某城市普通出租车收费标准编写程序进行车费计算。具体标准如下:

  • 起步里程为3公里,起步费10元;
  • 超起步里程后10公里内,每公里2元;
  • 超过10公里以上的部分加收50%的回空补贴费,即每公里3元;
  • 营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费)。

输入格式:

  • 输入在一行中给出输入行驶里程(单位为公里,精确到小数点后1位)与等待时间(整数,单位为分钟),其间以空格分隔。

输出格式:

  • 在一行中输出乘客应支付的车费(单位为元),结果四舍五入,保留到元。

输入样例1:
2.6 2
结尾无空行
输出样例1:
10
结尾无空行
输入样例2:
5.1 4
输出样例2:
14
输入样例3:
12.5 9
输出样例3:
34

如下,这是我试的密码,lc1和lc2是把里程数给分成两部分,主要为了四舍五入。因为发现如果用离散型连if判断都会出现问题。

#include<stdio.h>

int main()
{
    int shijian,lc1,lc2,money,mi;
    double lichen;
    scanf("%lf %d",&lichen,&shijian);
    lc1 = lichen;//里程数的整数部分
    lc2 = (int)(lichen*10) - lc1*10;//里程数的一位小数
    //里程数小于等于3公里
    if((lc1<=3&&lc2==0)||(lc1<=2&&lc2!=0)){
        money = 10;
    //里程数大于3小于等于13公里,2元路段
    }else if((lc1<=13&&lc2==0)||(lc1<=12&&lc2!=0)){
        money = 10 + (lc1-3)*2;
        mi = lc2*2;
        if(mi>14){
            money += 2;
        }else if(mi>8){
            money += 1;
        }
    //里程数大于13公里,计算回返
    }else if((lc1>=13)){
        money = 30 + (lc1-13)*3;
        mi = lc2*3;
        //小数位收费
        if(mi>=25){
            money += 3;
        }else if(mi>=15){
            money += 2;
        }else if(mi>=5){
            money += 1;
        }
    }//0 3 6 9 12 15 18 21 24 27
    //计算时间收费
    if(shijian>=5){
        money += shijian/5*2;
    }
    printf("%d\n",money);
    return 0;
}

这个代码直接输入值的话样例1和样例2可以正确输出,但样例3还是不对,提交上去后,如图

img

总的来说现在让我疑惑的就是样例3,也就是最后一张图显示的X>10公里时代码该怎么写。

参考

你题目的解答代码如下:


#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
    double mile = 0;
    int time = 0;
    double price, price1, price2;
    scanf("%lf %d", &mile, &time);//注意输入格式,时间是整型
    if (mile <= 3)
    {
        price1 = 10;
    }
    else if (mile <= 10)
    {
        price1 = 10 + (mile - 3) * 2.0;
    }
    else
    {
        price1 = 10 + (10 - 3)*2.0 + (mile - 10)*3.0;
    }
    price2 = time/ 5 * 2;//等待时间费用
    price = price1 + price2;
    printf("%.0f\n", price);//结果四舍五入
    return 0;
}

如有帮助,望采纳!谢谢!


#include <stdio.h>

int main()
{
    double x,m;
    int w;
    scanf("%lf %d",&x,&w);
    if(x<=3){
        m=10;
    }else if(x<=10){
        m=10+(x-3)*2;
    }else{
        m=10+14+(x-10)*3;
    }
    if(int(m+0.5)>int(m)){
        m+=1;
    }
    if(w>=5){
        m=m+w/5*2;
    }
    printf("%d",int(m));
    return 0;

}