我有一个学校作业,要在提供两个输入后计算出纸币和硬币的找零,这两个是项目的成本和所付的钱。在说明中,有一个提到的测试用例
请提供一个测试案例,其中美元数如果乘以100.0并转换为int而没有添加少量金额,则将仅少于正确的便士整数。
我不确定当它说的只是几分钱的正确整数时,它到底需要什么。 如果有人可以解释,那将非常有帮助。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
double dcost, dtendered;
int icost, itendered;
int itwenties, itens, ifives, iones, iquarters, idimes, inickels, ipennies;
/* add any additional variables between here -> */
int itotal;
/* <- and here*/
scanf("%lf", &dcost);
scanf("%lf", &dtendered);
icost = (int)((dcost * 100.0) + 0.000001);
itendered = (int)((dtendered * 100.0) + 0.000001);
/* add code to calculate itwenties, itens, etc., between here -> */
itotal = itendered - icost;
itwenties = itotal / 2000;
itotal = itotal % 2000;
itens = itotal / 1000;
itotal = itotal % 1000;
ifives = itotal / 500;
itotal = itotal % 500;
iones = itotal / 100;
itotal = itotal % 100;
iquarters = itotal / 25;
itotal = itotal % 25;
idimes = itotal / 10;
itotal = itotal % 10;
inickels = itotal / 5;
itotal = itotal % 5;
ipennies = itotal;
/* <- and here */
printf("%2d twenties\n", itwenties);
printf("%2d tens\n", itens);
printf("%2d fives\n", ifives);
printf("%2d ones\n", iones);
printf("%2d quarters\n", iquarters);
printf("%2d dimes\n", idimes);
printf("%2d nickels\n", inickels);
printf("%2d pennies\n", ipennies);
while (1)
getchar();
return 0;
}
在23、24行中,我添加了少量
编辑:我将此作业的说明附在此链接上 请看一次。 https://docs.google.com/document/d/1RolSvpg5Purn4_IrhG1cbrrcSwHjYvnDcIZQ3uoQM8U/edit?usp=sharing
答案 0 :(得分:1)
提示提示您找到一整美元的数量,如果不使用+ 0.000001
进行转换,则导致少一美元,外加99美分。
即您可能应该了解计算机上浮点数学的不精确问题。
您不需要在程序中执行此操作,相反,您应该正确进行转换。
但是,您应该拥有一个测试用例,可以检测代码是否未能使用少量代码进行正确的转换。
这意味着,如果您提交基本正确的程序,则将以这样的金额进行测试。如果该测试(否则可能被认为是极端情况)失败了,那么您不仅犯了小错,而且还没有努力明确声明要求。
我想那将意味着对您的成绩有更大的惩罚...
答案 1 :(得分:0)
我认为系统要求您测试itendered < icost
时发生的情况。也许请您的老师澄清一下!
您能解释+ 0.000001)
背后的逻辑吗?您知道如何将浮点数转换为整数吗?什么是截断?
您知道为什么不应将货币表示为浮动货币吗? (您看过Office Space吗?《超人2》吗?)