C语言中的简单硬币更改器程序



所以我必须制作一个硬币更改器程序,其中用户输入价格和他们支付的金额,输出必须是他们的季度,硬币,尼克斯,便士的零钱。由于某种原因,我的程序不会给出正确的输出。如果我输入价格为 40 美分并将我支付的金额输入为 50 美分,它说所需的零钱是 10 美分但 2 角钱,所以它给了我额外的一角钱。如果有人能帮助我,将不胜感激。

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);
}

一个简单的逻辑错误。

if(numberOfDimes > 1)更改为if(numberOfDimes > 0)

更好的是,您不需要块中的if语句。如果程序到达 while 循环内部,则 if 语句将始终为真。

while(change >= 25)
{
numberOfQuarters++;
if(numberOfQuarters >0 )
{
change = (change - (numberOfQuarters * 25));
}
printf("nNumber of Quarters:%d", numberOfQuarters);
}

此结构是错误的,因为在此代码中,第 2 季度将具有两倍的值,而第 3 季度将具有第三倍的值。您不需要乘以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: %dn", change);
}

这样,您可以避免任何循环,而只需使用除法和提醒。

最新更新