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