上下文中的问题
上下文:要提交此程序并正常工作,我需要能够输入8.68作为扫描到的数量。然后,该程序需要能够计算出每个程序有多少个您需要提供硬币类型 x 后的硬币类型以及剩余余额
What the output should look like
问题/问题::我的程序将运行到四分之一秒,并且一切正常,一旦到达零角(零角),程序将中断并退出。 (即使我一开始使用的金额不同,如果硬币的数量也会不同,在这种情况下,硬币的破折点会不同,在这种情况下,角钱的值为0)它将运行并完成与上面显示的输出相同的操作。
代码:
#include <stdio.h>
int main()
{
double amount;
double GST = 1.13;
double balance;
int numLoonies;
int numQuarters;
int numDimes;
int numNickels;
int numPennies;
int bal;
printf("Please enter the amount to be paid: $"); //ask how much to be paid
scanf("%lf", &amount); //scans the input
GST = amount * .13 + .005;
printf("GST: 1.13\n");
balance = (amount + GST);
printf("Balance owing: $%.2lf\n", balance);
numLoonies = balance;
bal = ((balance - numLoonies)*100);
printf("Loonies required: %d", numLoonies);
printf(", balance owing $%1.2f\n", (float)bal/100);
numQuarters = bal / 25;
bal = bal % (numQuarters*25);
printf("Quarters required: %d", numQuarters);
printf(", balance owing $%1.2f\n", (float)bal / 100);
numDimes = bal / 10;
bal = bal % (numDimes * 10);
printf("Dimes required: %d", numDimes);
printf(", balance owing $%1.2f\n", (float)bal / 100);
numNickels = bal / 5;
bal = bal % (numNickels * 5);
printf("Nickels required: %d", numNickels);
printf(", balance owing $%1.2f\n", (float)bal / 100);
numPennies = bal / 1;
bal = bal % (numPennies * 1);
printf("Pennies required: %d", numPennies);
printf(", balance owing $%1.2f\n", (float)bal/100);
return 0;
}
更新 因此,这是针对学校项目的,应该提到这一点,但是我必须使用mod来找到剩余的余额,并且我必须投放作为条件的一部分加倍为int。
是的,加拿大再也没有几分钱了,但我还是必须这样做
答案 0 :(得分:1)
(即使我一开始使用的金额不同,如果硬币的数量也会不同,在这种情况下,在这种情况下,角钱的值为0)
这是一个大提示。那么,让我们来看一角钱...
bal = bal % (numDimes * 10);
因此,假设numDimes
为0。那么(numDimes * 10)
也为零。尝试计算bal % 0
时会发生什么?如果不确定,可以将该表达式放入程序并尝试。
另一个问题是,我认为您并不是真的要说bal % (numDimes * 10)
。假设numDimes
等于3可以得到一些初始余额...在这种情况下,您有bal % (3 * 10)
或bal % 30
。那真的是你想要的吗?当您可能真的想要一个小于单个角钱值的数字时,这将给出一个介于0到29之间的数字。如果我有79美分,并且我拿出 7角钱,那么79 % 70
确实会给我应该留下的9
,但这不是最直观的方法到达那里。
答案 1 :(得分:0)
第1步-将钱转换为最低单位的整数。
由于代码要计入“便士”,因此需要输入并四舍五入/转换为整数。
#include <math.h>
double amount;
printf("Please enter the amount to be paid: $"); //ask how much to be paid
scanf("%lf", &amount);
long iamount = lround(amount * 100);
与GST相同
double GST = 1.13;
long itax = lround(iamount * (GST - 1)); // round to the nearest penny
long ibalance = iamount + itax;
printf("Balance owing: $%.2lf\n", ibalance/100.0);
2)继续分解成硬币
OP的bal = bal % (numCoins*CoinValue);
是不正确的方法。
long CoinDenomination = 100; // 100 cents to the Loonie
long iLoonies = ibalance/CoinDenomination;
printf("Loonies required: %ld", iLoonies);
ibalance %= CoinDenomination;
...
CoinDenomination = 10; // 10 cents to the Dime
long iDimes = ibalance/CoinDenomination;
printf("Dimes required: %ld", iDime);
ibalance %= CoinDenomination;
答案 2 :(得分:0)
由于计算numDimes的方式,只要numDimes> 0,它将始终产生正确的答案。但是bal%10会产生相同的结果。 –巴尔马
所以我最终做的事情比我原本想做的要容易,我只是使用mod 硬币价值。感谢您的所有评论:)