【问题标题】:I need help getting this program to properly print my outputs我需要帮助让这个程序正确打印我的输出
【发布时间】:2012-03-27 01:56:21
【问题描述】:
#include <stdio.h>              /*printf and scanf option*/
#include <math.h>

void change(double coin_change, int *quarters, int *dimes, int *nickels, int *pennies);          /*function protype*/

int main(void)
{
    int fifties = 0, twenties = 0, tens = 0, fives = 0, dollars = 0, quarters = 0, dimes = 0, nickels = 0, pennies = 0;
    double amt_paid = 0, amt_due = 0, amt_change = 0, coin_change = 0;          /*declared avriables*/

    printf("Enter the amount paid> ");                  /*Prompt user to enter amount paid*/
    scanf("%lf", &amt_paid);

    printf("Enter the amount due> ");                   /*Prompt user to enter amount due*/
    scanf("%lf", &amt_due);

    amt_change = amt_paid - amt_due;                    /*Formula for amount of change to be given*/
    dollars = (amt_change);

    coin_change = (int)((amt_change - (amt_change)) * 100 + 0.5);
    coin_change = coin_change * 100;
    printf("\n%f\n", coin_change);

    change(coin_change, &quarters, &dimes, &nickels, &pennies);

    printf("Change is fifties: %d$, twenties: %d$, tens: %d$, fives: %d$, dollars: %d$, quarters: %d, dimes: %d, nickels: %d,\
           pennies: %d", fifties, twenties, tens, fives, dollars, quarters, dimes, nickels, pennies);  
    return(0);
}

void change(double coin_change, int *quarters, int *dimes, int *nickels, int *pennies)
{
    int q = 1, d = 1, n = 1, p = 1;
    do {
        if(coin_change >= 25){
            *quarters = *quarters + q;
            coin_change = coin_change - 25;
        }
        else if (coin_change >= 10) {
            *dimes = *dimes + d;
            coin_change = coin_change - 10;
        }
        else if (coin_change  >=  5) {
            *nickels = *nickels + n;
            coin_change = coin_change - 5;
        }
        else if (coin_change >= 1) {
            *pennies = *pennies + p;
            coin_change = coin_change - 1;
        }
    } while (coin_change >= 1);
}

对不起,我第一次不是很清楚。我需要的是创建一个基本上是收银机程序的东西。当给定到期金额和用户支付的金额时,我应该收到输出,告诉我我应该收到多少张 50 美元、20 美元、10 美元、5 美元、1 美元、25 美分硬币、10 美分硬币、5 美分硬币和硬币作为找零。由于我是编程新手,因此您看到的代码是据我所知。我确实需要改进甚至完全改变它。我真正想做的是找出我的错误,并纠正它们。我希望尽快完成此代码。我觉得我很亲近,但只是想念它。也许我错了,但这就是我来找你们的目的。

【问题讨论】:

  • 请把你的程序简化为最简单的能证明错误的东西,然后给我们输入、预期输出和实际输出。另请阅读sscce.org
  • 打印“适量的美元”有什么不好?听起来不错。
  • 每次你这样格式化代码,上帝都会杀死一只小猫。
  • 如果这是作业,请标记它。
  • 这东西是干什么用的? (int)((amt_change - (amt_change)) * 100 + 0.5)

标签: c


【解决方案1】:

有几点:

  1. 您有许多未使用的变量:fiftiestwentiestensfivesdollars 等。
  2. 这里的行:

    coin_change = (int)((amt_change - (amt_change)) * 100 + 0.5);
    coin_change = coin_change * 100;

    错了。它们应替换为以下内容:

    coin_change = (100 * amt_change).

  3. 您听说过+= / -= 运算符吗?他们会改变这些路线:

    *quarters = *quarters + q;
    coin_change = coin_change - 25;

    进入这个:

    *quarters += q;
    coin_change -= 25;

在我修复了这些问题后,您的代码运行良好。

【讨论】:

  • coin_change 是不到一美元的零钱。您的公式计算了全部美分变化量。当更改超过 50 美元时,“运行良好”的代码是否有效?另外,您听说过++ 运算符吗? ++*quarters
  • @AdamLiss 他提供的公式没有考虑超过四分之一的金额,他的代码使用变量q,所以我保持原样。
  • 好吧,我肯定做错了。所以我需要的是使用 50s、20s、10 等制作一个代码,即使超过 50 美元也会给我带来改变
  • @RichardJ.RossIII 如何使用那些未使用的变量?
【解决方案2】:

我不想为你编写代码,因为这闻起来像家庭作业,但这是算法:

read_from_keyboard(amount_due)
read_from_keyboard(amount_paid)
change = amount_paid - amount_due

for each denomination in (
  fifties, twenties, tens, fives, ones, quarters, dimes, nickels, pennies) {

  while (change >= value of denomination) {
     increment counter for denomination
     subtract value of denomination from change
  }

  print counter + name of denomination  // Ex: "4 twenties"
}

“诀窍”是要意识到您可以以完全相同的方式处理整个美元价值和硬币 - 编程艺术的一部分是能够找到一个您可以重复使用的通用解决方案,而不是处理每种情况都是特殊情况。

您可能希望将更改转换为以美分表示值的整数,这样可以避免浮点运算产生的舍入错误。

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    • 2016-06-06
    • 1970-01-01
    • 2022-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多