注册 登录
编程论坛 C语言论坛

我的程序错在哪了

黑暗骑士5D 发布于 2019-11-16 23:03, 1347 次点击
现在90号汽油6.95元/升、93号汽油7.44元/升、97号汽油7.93元/升。为吸引顾客,某自动加油站推出了“自助服务”和“协助服务”两个服务等级,分别可得到5%和3%的折扣。

本题要求编写程序,根据输入顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m - 自助,e - 协助),计算并输出应付款。

输入格式:
输入在一行中给出两个整数和一个字符,分别表示顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m - 自助,e - 协助)。

输出格式:
在一行中输出应付款额,保留小数点后2位。

输入样例:
40 97 m
输出样例:
301.34

int main()
{
  int a,b,k;
  char c;
  double zhe,s;
  scanf("%d %d %c",&a,&b,&c);
  if(b==97)
    {k=7.93;
    if(c=='m')
    zhe=0.95;
    else
    zhe=0.97;}
    s=1.0*a*k*zhe;

  if(b==90)
    {k=6.95;
    if(c=='m')
    zhe=0.95;
    else
    zhe=0.97;}
    s=1.0*a*k*zhe;

  if(b==93)
  {k=7.44;
    if(c=='m')
    zhe=0.95;
    else
    zhe=0.97;}
    s=1.0*a*k*zhe;

    printf("%.2lf",s);
    return 0;
}
2 回复
#2
纯蓝之刃2019-11-16 23:53
因为你变量k定义成了int型,计算的时候k的值为7,把k设置成double型就行了
#3
纯蓝之刃2019-11-16 23:56
使用switch会更简洁一些
程序代码:
#include <stdio.h>

int main()
{
    int b;
    char c;
    double a,zhe,s,k;
    scanf("%lf %d %c",&a,&b,&c);

    switch(b)
    {
        case 97:k=7.93;break;
        case 90:k=6.95;break;
        case 93:k=7.44;break;
        default:break;
    }

    if(c=='m')
        zhe=0.95;
    else
        zhe=0.97;

    s=a*k*zhe;

    printf("%.2lf",s);
    return 0;
}
1