0

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

#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 美元

税前账单:39.99 美元

税费:2.10 美元

总账单:42.09 美元

4

4 回答 4

2

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

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

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

于 2013-10-23T21:59:08.703 回答
0

因为当你计算:

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

您进行整数除法,它评估0左操作数是否less/.

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

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

记得在划分之前做演员。如果您在除法后强制转换为浮点数,结果将仅为 0.0。

于 2013-10-23T21:59:13.013 回答
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);
于 2013-10-23T22:00:32.480 回答
0

因为weekdayMin,weekendMinnightMin都是int并且你的定义FLAT_RATE_IN_CENTS也是一个int所以你执行一个整数除法这将导致零,除非分钟的总和大于FLAT_RATE_IN_CENTS。您需要转换操作数以浮动或定义您的FLAT_RATE_IN_CENTSas 3999.0f

于 2013-10-23T22:00:52.747 回答