【问题标题】:Dollar change program in cc中的美元兑换程序
【发布时间】:2014-02-25 21:13:02
【问题描述】:

我有一个任务要求我们编写一个自动更改程序,用于输入最高 200.00 美元的美元。基本上,有人输入一个金额,输出会显示以下各种面额的变化金额(有多少 20、10、5、1、25 美分、10 美分、镍和便士)。 我已经找到了一种方法来使用每个面额的 if/else 语句(见下文),但我想知道是否有更简单、更简洁的方法来使用循环执行此操作? (这是一门入门课程,所以我们还没有学习函数/数组等)

int twenties;    int tens;
int fives;
int ones;
int quarter;
int dime;
int nickel;
int penny;
double dollar_ent;

printf("Please enter a dollar amount up to 100:  ");
scanf("%lf", &dollar_ent);
printf("Name - Assignment 2 - Change-O-Matic\n\n");
printf("Amount entered:  $%.2lf\n\n", dollar_ent);


twenties = (dollar_ent / 20);
if (twenties >=2)
    printf("%.0d\t$20.00's\n", twenties);
if (twenties == 1)
    printf("%.0d\t$20.00\n", twenties);
else
    printf("");

谢谢!

【问题讨论】:

标签: c loops if-statement


【解决方案1】:

您可以更轻松地将金额转换为美分。 那么你会得到一个像 20000 ($200) 这样的整数。

有一个包含所有可能面额的数组:

int denominations[] = { 2000, 1000, 500, 100, 25, 10, 5, 1}.

然后遍历这个数组。 当前金额除以当前面额,然后从当前总和中减去。计算除法的其余部分并将其设置为当前总和,然后移动到下一个面额......等等......

【讨论】:

    【解决方案2】:

    是的,使用循环更容易。但是你需要一个数组来配合它:

    #include <stdio.h>
    
    static int denoms[] = {
        2000,
        1000,
         500,
         100,
          25,
          10,
           5,
           1,
           0
    };
    
    int main () {
      double dollar_ent;
      int i;
      int twenties;
    
      printf("Please enter a dollar amount up to 100:  ");
      scanf("%lf", &dollar_ent);
      printf("Name - Assignment 2 - Change-O-Matic\n\n");
      printf("Amount entered:  $%.2lf\n\n", dollar_ent);
      dollar_ent *= 100;
    
    
      for(i = 0; denoms[i]; i++) {
        twenties = (dollar_ent / denoms[i]);
        if (twenties >=2)
          printf("%.0d\t$%.02f's\n", twenties, denoms[i] / 100.);
        if (twenties == 1)
          printf("%.0d\t$%.02f\n", twenties, denoms[i] / 100.);
        dollar_ent -= twenties * denoms[i];
      }
    }
    

    教训是这样的:如果你有一个看起来像这样的程序:

    some code with one value;
    similar code with another value;
    similar code with yet another value;
    

    考虑用循环替换它:

    for ( some expression that takes on each value in turn ) {
      the identical code, with the values replaced by variables;
    }
    

    【讨论】:

    • 考虑将面额计数也放入一个数组中。
    • 喜欢0for(...; denoms[i]; ...的使用。
    【解决方案3】:

    不像你写的那样。但正如你所写,它只能找到 20 的数量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      • 2021-10-01
      • 2021-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多