【发布时间】:2014-11-22 13:40:51
【问题描述】:
我编写了以下代码来确定如何支付零钱:
#include<stdio.h>
#define twentyDollar 2000
#define tenDollar 1000
#define fiveDollar 500
#define oneDollar 100
#define quarters 25
#define dimes 10
#define nickels 5
#define pennies 1
int round(double change)
{
return (int)(change + 0.5);
}
void main(void) {
int change, temp;
double cost, paid;
int numberOfTwentyDollar = 0;
int numberOfTenDollar = 0;
int numberOfFiveDollar = 0;
int numberOfOneDollar = 0;
int numberOfQuarters = 0;
int numberOfDimes = 0;
int numberOfNickels = 0;
int numberOfPennies = 0;
printf("Enter cost ($): ");
scanf("%lf", &cost);
printf("Enter amount tendered ($): ");
scanf("%lf", &paid);
change = round((paid - cost) * 100.0);
temp = change;
while (temp > 0) {
if (temp > twentyDollar)
{
numberOfTwentyDollar = temp / twentyDollar;
temp = temp % twentyDollar;
}
else if(temp > tenDollar)
{
numberOfTenDollar = temp / tenDollar;
temp = temp % tenDollar;
}
else if(temp > fiveDollar)
{
numberOfFiveDollar = temp / fiveDollar;
temp = temp % fiveDollar;
}
else if (temp > oneDollar)
{
numberOfOneDollar = temp / oneDollar;
temp = temp % oneDollar;
}
else if(temp > quarters)
{
numberOfQuarters = temp / quarters;
temp = temp % quarters;
}
else if(temp > dimes)
{
numberOfDimes = temp / dimes;
temp = temp % dimes;
}
else if(temp > nickels)
{
numberOfNickels = temp / nickels;
temp = temp % nickels;
}
else if(temp > pennies)
{
numberOfPennies = temp / pennies;
temp = temp % pennies;
}
}
printf("Change is $%.2d\n", change);
printf("$20 bills: %d\n", numberOfTwentyDollar);
printf("$10 bills: %d\n", numberOfTenDollar);
printf("$5 bills: %d\n", numberOfFiveDollar);
printf("$1 bills: %d\n", numberOfOneDollar);
printf("quarters: %d\n", numberOfQuarters);
printf("dimes: %d\n", numberOfDimes);
printf("nickels: %d\n", numberOfNickels);
printf("pennies: %d\n", numberOfPennies);
}
当我输入成本(23.18 美元)和投标金额(100.00 美元)的样本值时,输出都是正确的,但是显示的“更改”是 7682 美元,而假设是 76.82 美元。关于我做错了什么的任何指示?谢谢!
【问题讨论】:
-
您在
change = round((paid - cost) * 100.0);处多次更改 100。如果您以后不撤消,那将是 100 太多。 -
您使用
change(然后是temp)来表示美分的数量,不是美元的数量!!!顺便说一句,对于“我已经编写了以下代码”这一说法,这个问题让人非常怀疑。就个人而言,我很难相信你是自己写的,最后问了这个问题(请不要冒犯)。 -
有时人们会犯愚蠢的错误,或者在不应该出现的地方陷入困境。
-
此外,我们得到了圆形原型以及用于设置更改的确切函数调用,因此得到某些东西并不得不使用它并不意味着我理解它。
-
如果您的程序可以使用建议的简单修复,您可能希望编写一个替代版本不使用,使用类型
double并将其展示给执行此操作的人告诉你使用它。以及你为什么它应该工作得很好——如果不是更好的话。
标签: c pass-by-value