用C语言编写的简易硬币兑换机程序
因此,我必须制作一个硬币兑换商程序,用户输入价格和他们支付的金额,输出必须是他们的硬币兑换,单位为25美分、10美分、5美分、5美分。由于某些原因,我的程序无法提供正确的输出。如果我输入的价格是40美分,输入的金额是50美分,它说所需的变化是10美分,但2美分,所以它给了我一个额外的一美分。如果有人能帮助我,我将不胜感激用C语言编写的简易硬币兑换机程序,c,C,因此,我必须制作一个硬币兑换商程序,用户输入价格和他们支付的金额,输出必须是他们的硬币兑换,单位为25美分、10美分、5美分、5美分。由于某些原因,我的程序无法提供正确的输出。如果我输入的价格是40美分,输入的金额是50美分,它说所需的变化是10美分,但2美分,所以它给了我一个额外的一美分。如果有人能帮助我,我将不胜感激 int main() { int numberOfQuarters =0; int numberOfDimes =0; int numberOfNic
int main()
{
int numberOfQuarters =0;
int numberOfDimes =0;
int numberOfNickels =0;
int numberOfPennies =0;
int price;
int paid;
int change;
printf("Please enter the price of your item in cents: ");
scanf("%d", &price);
printf("Please enter the amount of money you gave in cents: ");
scanf("%d", &paid);
change = (paid - price);
printf("Change required: %d", change);
while(change >= 25)
{
numberOfQuarters++;
if(numberOfQuarters >0 )
{
change = (change - (numberOfQuarters * 25));
}
printf("\nNumber of Quarters:%d", numberOfQuarters);
}
while((change >= 10) && (change < 25))
{
numberOfDimes++;
if(numberOfDimes > 1)
{
change = (change - (numberOfDimes * 10));
}
}
while((change >= 5) && (change < 10))
{
numberOfNickels++;
if(numberOfNickels >0)
{
change = (change - (numberOfNickels * 5));
}
}
printf("\nThe number of quarters: %d", numberOfQuarters);
printf("\nThe number of dimes: %d", numberOfDimes);
printf("\nThe number of nickels: %d", numberOfNickels);
printf("\nThe number of pennies: %d", change);
}
一个简单的逻辑错误 将ifnumberOfDimes>1更改为ifnumberOfDimes>0 更好的是,在块中不需要if语句。如果程序到达while循环内部,那么If语句将始终为true
while(change >= 25)
{
numberOfQuarters++;
if(numberOfQuarters >0 )
{
change = (change - (numberOfQuarters * 25));
}
printf("\nNumber of Quarters:%d", numberOfQuarters);
}
这种结构是错误的,因为在本代码中,第二季度的值将增加两倍,第三季度的值将增加三倍。您不需要将numberOfQuarters相乘,也不需要检查numberOfQuarters是否为正,因为如果没有发生溢出,则从零开始递增后它必须为正
这一部分应该是这样的:
while(change >= 25)
{
numberOfQuarters++; /* add one more quarter */
change = change - 25; /* subtract the value of one quarter because one is added */
printf("\nNumber of Quarters:%d", numberOfQuarters);
}
十美分硬币和五美分硬币的计算也应该这样做
之所以使用两个一角硬币,是因为出于某种原因,当只有一个一角硬币时,您决定不减少一角硬币的值。因此,既然主要问题已经得到解决,此时我不妨提出另一个实现方案:
#include <stdio.h>
int main()
{
int numberOfQuarters =0;
int numberOfDimes =0;
int numberOfNickels =0;
int numberOfPennies =0;
int price;
int paid;
int change;
printf("Please enter the price of your item in cents: ");
scanf("%d", &price);
printf("Please enter the amount of money you gave in cents: ");
scanf("%d", &paid);
change = (paid - price);
printf("Change required: %d", change);
numberOfQuarters += change / 25;
change %= 25;
numberOfDimes += change / 10;
change %= 10;
numberOfNickels += change / 5;
change %= 5;
numberOfPennies = change;
printf("\nThe number of quarters: %d", numberOfQuarters);
printf("\nThe number of dimes: %d", numberOfDimes);
printf("\nThe number of nickels: %d", numberOfNickels);
printf("\nThe number of pennies: %d\n", change);
}
这样就避免了任何循环,只需使用除法和提醒。如果您使用的是C,为什么要添加Python和Java标记?除此之外,您是否使用调试器逐步完成了代码?将numberOfDimes>1更改为numberOfDimes>0不值得回答,但建议您在程序顶部包含。否则,编译器至少会向我发出一系列警告。正如所写的,您的代码将在每次循环中打印四分之一的数量。我认为这不是我想要的行为。谢谢!!是的,我刚把if语句一起拿出来,它工作得很好!!