C手机账单计算器

时间:2013-10-23 21:55:08

标签: c

我正在尝试编写一个程序,该程序将用户的工作日,晚上和周末分钟输入,并将吐出每分钟的平均成本,税前账单,税金和总账单(根据平面费率/税率/问题中给出的额外工作日分钟费率值

#include <stdio.h>
#include <math.h>

#define CENTS_PER_DOLLAR 100  
#define FLAT_RATE_IN_CENTS 3999
#define TAX_RATE 0.05
#define ADDITIONAL_WEEKDAY_MIN_IN_CENTS 40

int main()
{
    int  weekdayMin, nightMin, weekendMin;
    float pretaxBill, taxes, totalBill, averageCost;

    printf("Please enter the number of weekday minutes, night minutes: ");
    scanf("%d %d", &weekdayMin, &nightMin);
    printf("Please enter the number of weekend minutes: ");
    scanf("%d", &weekendMin);
    printf("\n");
    printf("Weekday minutes: %d, night minutes: %d, weekend minutes: %d \n", weekdayMin, nightMin, weekendMin);
    averageCost = (weekdayMin + weekendMin + nightMin)/(FLAT_RATE_IN_CENTS);
    printf("Average minute cost: $%.2f ", averageCost);
    if (weekdayMin <= 600)
    {
            pretaxBill = FLAT_RATE_IN_CENTS;
            taxes = FLAT_RATE_IN_CENTS*TAX_RATE;
            totalBill = pretaxBill + taxes;
            printf("Pretax bill: $%d \nTaxes: $%d \nTotal bill: $%d", pretaxBill, taxes, totalBill);
    }
    else
    {
            pretaxBill = (weekendMin - 600)*ADDITIONAL_WEEKDAY_MIN_IN_CENTS;
            taxes = pretaxBill*TAX_RATE;
            totalBill = pretaxBill + taxes;
            printf("Pretax bill: $", pretaxBill, "\nTaxes: $", taxes, "\nTotal bill: $\n", totalBill);
    }
    return(0);
}

每当我运行程序时,它返回的平均成本值为0.我知道其余的代码格式不正确,当你运行它时有很多错误。我只想弄清楚如何从每分钟的平均成本中获得指令中指定的值。但是,对于该计划其他部分的任何其他建议或意见表示赞赏。我对C来说仍然很新,所以忍受我

这是预期的输出

请输入工作日分钟数,夜间分:600 50 请输入周末分钟数:150

平日分钟:600,夜间分钟:50,周末分钟:150

平均分钟费用:0.05美元

Pretax账单:39.99美元

税收:2.10美元

总账单:$ 42.09

4 个答案:

答案 0 :(得分:2)

您正在使用整数变量进行计算,整数变量不能表示分数。在进行计算时,您需要转换为float:

averageCost = ((float)(weekdayMin + weekendMin + nightMin))/(FLAT_RATE_IN_CENTS);

将结果分配给float不会导致它以浮点数计算;它以int为计算,然后将结果(0)转换为float。

答案 1 :(得分:0)

因为当你计算:

averageCost = (weekdayMin + weekendMin + nightMin)/(FLAT_RATE_IN_CENTS);

进行整数除法,如果左操作数为0而不是less的右操作数,则计算结果为/

您必须通过在#definition中添加以下.0来将FLAT_RATE_IN_CENTS更改为浮动 或者将左或右操作数转换为浮动。

averageCost = (float)(weekdayMin + weekendMin + nightMin)/(FLAT_RATE_IN_CENTS);

请记住在

之前进行投射。如果你在除法后转换为浮点数,结果将只为0.0。

答案 2 :(得分:0)

整数除法存在问题。例如,请考虑以下这一行:

averageCost = (weekdayMin + weekendMin + nightMin)/(FLAT_RATE_IN_CENTS);

weekdayMin + weekendMin + nightMin是一个整数,FLAT_RATE_IN_CENTS也是如此,因此将进行整数除法。现在考虑您输入的值:

weekdayMin = 600
weekendMin = 50
nightMin   = 150
FLAT_RATE_IN_CENTS = 3999

上述声明评估为800 / 3999,即0。解决这个问题的简单方法是:

averageCost = 1.0 * (weekdayMin + weekendMin + nightMin)/(FLAT_RATE_IN_CENTS);

答案 3 :(得分:0)

由于weekdayMinweekendMinnightMin都是int,而您的定义FLAT_RATE_IN_CENTS也是int,因此您执行整数除法除非分钟的总和大于FLAT_RATE_IN_CENTS,否则将导致零。您需要强制转换操作数以将FLAT_RATE_IN_CENTS定义为3999.0f