C语言中的手机账单计算器

C语言中的手机账单计算器,c,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

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

#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);
}
#包括
#包括
#每100美元定义美分
#以3999美分定义统一费率
#定义税率0.05
#以40美分定义额外的工作日最小值
int main()
{
int weekdayMin、nightMin、weekendMin;
浮动税前账单、税金、总账单、平均成本;
printf(“请输入工作日分钟数,夜间分钟数:”);
scanf(“%d%d”,&weekdayMin,&nightMin);
printf(“请输入周末分钟数:”);
scanf(“%d”、&weekendMin);
printf(“\n”);
printf(“工作日分钟数:%d,夜间分钟数:%d,周末分钟数:%d\n”,工作日分钟数,夜间分钟数,周末分钟数);
平均成本=(工作日分钟+工作日分钟+夜间分钟)/(单位:美分);
printf(“平均分钟成本:$%.2f”,平均成本);

如果(weekdayMin您使用整数变量进行计算,整数变量不能表示分数。在进行计算时,您需要转换为浮点:

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

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

因为在计算时:

averageCost = (weekdayMin + weekendMin + nightMin)/(FLAT_RATE_IN_CENTS);
进行整数除法,如果左操作数
小于
/
的右操作数,则计算结果为
0

您必须通过在定义中添加以下.0来将
单位费率_美分
更改为浮动费率,
或将左或右操作数强制转换为浮点。

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

记住在< <强> >除法之前做“强制”>。如果在除法之后执行“浮动”,则结果将仅为0。

您有整数除法的问题。例如,请考虑这行:

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

<代码>周日min +周末min +夜敏是整数,所以PrimaReaTimeION/<代码>,因此将发生整数除法。现在考虑您输入的值:

weekdayMin = 600
weekendMin = 50
nightMin   = 150
FLAT_RATE_IN_CENTS = 3999
上述语句的计算结果为
800/3999
,即
0
。解决此问题的简单方法是:

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

因为
weekdayMin
weekendMin
nightMin
都是
int
,而您定义的
FLAT\u RATE\u IN _CENTS
也是
int
,所以您执行整数除法,结果是零,除非分钟之和大于
FLAT\u RATE\u IN _CENTS
。您需要继续要浮动的操作数或将
单位速率定义为
3999.0f