用C语言编写的简易硬币兑换机程序

用C语言编写的简易硬币兑换机程序,c,C,因此,我必须制作一个硬币兑换商程序,用户输入价格和他们支付的金额,输出必须是他们的硬币兑换,单位为25美分、10美分、5美分、5美分。由于某些原因,我的程序无法提供正确的输出。如果我输入的价格是40美分,输入的金额是50美分,它说所需的变化是10美分,但2美分,所以它给了我一个额外的一美分。如果有人能帮助我,我将不胜感激 int main() { int numberOfQuarters =0; int numberOfDimes =0; int numberOfNic

因此,我必须制作一个硬币兑换商程序,用户输入价格和他们支付的金额,输出必须是他们的硬币兑换,单位为25美分、10美分、5美分、5美分。由于某些原因,我的程序无法提供正确的输出。如果我输入的价格是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);

}

一个简单的逻辑错误

将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语句一起拿出来,它工作得很好!!