【问题标题】:Change calculator (printing final value)更改计算器(打印最终值)
【发布时间】:2018-01-25 03:53:42
【问题描述】:

我正在编写一个从 1 到 100 的值并将其转换为零钱的代码(即 16 美分是 1 美分、1 镍和 1 美分)。我的问题是当我打印更改值时。

标点符号必须正确,因此对于 10 美分,它必须是“1 角钱”。而不是“一毛钱”。

除了使用大量的 if 语句之外,还有没有更有效的方法来考虑所有可能有硬币但没有硬币/硬币/美分,有硬币和硬币,但没有硬币/美分等。并打印更改输出的写标点符号/组合?

谢谢!!!

// quarters
    if (quarters== 1 && dimes==0 && nickels==0 && cents == 0)
        printf("%d quarter.", quarters);
    else if (quarters>= 1 && dimes==0 && nickels==0 && cents == 0)
        printf("%d quarters.", quarters);
    // include other combinations
    else if (quarters==1)
        printf("%d quarter, ", quarters);
    else if (quarters>=1)
        printf("%d quarters, ", quarters);

【问题讨论】:

  • 这是 CS50 课程的练习吗?如果是,请添加 CS50 标签。
  • 欢迎来到 Stack Overflow。请尽快阅读How to AskAbout 页面,以及有关如何生成MCVE (minimal reproducible example) 的材料。如果你用'[cs50] dime'搜索SO,你会发现相当多的相关资料;类似的查询可能会显示更多。你还没有显示你的变量声明。您可以通过仅在您知道已完成时生成停止 (.) 并在您已经打印某些内容时添加逗号空格来更有效地执行操作。这样,您就可以分别处理每枚硬币。
  • 您是否了解过数组?你有没有覆盖结构?问题急需使用结构数组,但如果您还没有涉及这些结构,那么仅仅暗示“当您了解更多时会更容易”是不公平的。

标签: c


【解决方案1】:

关于逗号和句号:

如果它们是一角硬币、镍币或美分,您将在四分之一之后加上逗号。 因此,不是测试dime 是否不是0nickel 不是0cent 不是0,而是可以将这些值相加并测试它是否为0

关于's',你只需要知道他们的1硬币或更多。

鉴于此,您可以创建一个仅格式化一种硬币类型的函数。这个函数应该负责选择是否添加's',并在逗号和句点之间进行选择。每个选择都可以通过一个if/else 测试进行,因此您可以:

#include <stdio.h>
/*
  what: name of coin
  quantity: number of coin
  rest: coins that must be displayed after
*/
void print_coin(const char *what, int quantity, int rest)
{
    /* is there something to display*/
    if (0 == quantity)
        { return; }
    /* One coin*/    
    else if (1 == quantity)
        { printf("1 %s", what) ;}
    /* several coins, add an 's' */
    else
       { printf("%d %ss", quantity, what) ;}

    /* choose between comma and period */
    if (rest > 0)
        { printf(", ");}
    else 
        { printf(".\n");}
}

/* print all coins function */
void print_coins(int quarter, int dime, int nickel)
{
    /* print each coins, one after the other */

    print_coin("quarter", quarter, dime + nickel);
    print_coin("dime", dime, nickel);
    print_coin("nickel", nickel, 0);
}

int main(void)
{
    /* examples */
    print_coins(1, 2, 3);
    print_coins(1, 0, 1);
    print_coins(1, 0, 0);
    return 0;
}

【讨论】:

    猜你喜欢
    • 2021-11-25
    • 2020-12-28
    • 1970-01-01
    • 2022-05-30
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    相关资源
    最近更新 更多