我正在尝试编写一个程序,该程序将用户的工作日,晚上和周末分钟输入,并将吐出每分钟的平均成本,税前账单,税金和总账单(根据平面费率/税率/问题中给出的额外工作日分钟费率值
#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
答案 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);
请记住在
答案 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)
由于weekdayMin
,weekendMin
和nightMin
都是int
,而您的定义FLAT_RATE_IN_CENTS
也是int
,因此您执行整数除法除非分钟的总和大于FLAT_RATE_IN_CENTS
,否则将导致零。您需要强制转换操作数以将FLAT_RATE_IN_CENTS
定义为3999.0f
。