gpt4 book ai didi

c - 向客户分发变更的程序。 (C)

转载 作者:行者123 更新时间:2023-11-30 16:37:24 25 4
gpt4 key购买 nike

目标:

实现一个程序来计算给用户找零所需的最小硬币数量。

问题:

程序无法正确执行。我相当确定我的问题本质上是合乎逻辑的,但也可能是由于我对正确格式缺乏经验造成的。

额外信息:

我在代码中添加了一个打印函数来确定问题出在哪里。 “test1”已广播,“test2”未广播。

我正在使用 cs50.h 库本地的一些函数:

  • get_float(); - 从用户处获取浮点值并存储它。

请不要为我修改我的代码!我需要学会自己做这件事。我只需要帮助查找我的逻辑错误或格式错误。是的,我知道这效率不高。

我正在寻找的示例:

  • “您的问题位于 X 行,您的值使得 VARIABLE 永远不会达到 0。”

  • “在 C 语言中,无法格式化 '( x < 0 );' - 你必须说“(x<0);”。”

代码演练:

程序从用户处获取 2 个浮点值,“金额”和“成本”。 “金额”是客户给了多少钱,“成本”是商品的成本。

程序查找“金额 - 成本”以确定欠了多少零钱。该值存储在“diff”中。

程序从“diff”中减去 0.25,并向变量“quarter”加 1。

程序从“diff”中减去 0.10,并将变量“dime”加 1。

...

程序打印出需要使用多少 25 美分、10 美分、5 美分、1 便士才能以最有效的方式为客户找零。

假设只能使用硬币。

代码:

#include <stdio.h>
#include <cs50.h>


int main()
{

float cost;
do
{
printf("How much did it cost?\n");
cost = get_float();
}
while (cost < 0);

float amount;
do
{
printf("How much did you pay?\n");
amount = get_float();
}
while (amount < cost);




int quarter = 0;
int dime = 0;
int nickel = 0;
int penny = 0;
float diff = amount - cost;
do
{
while (diff >= 0.25)
{
diff = diff - .25;
quarter++;
}
printf("test1");


while (.10 <= diff < .25)
{
diff = diff - 0.10;
dime++;
}
printf("test2");


while (0.05 <= diff < .10)
{
diff = diff - 0.05;
nickel++;
}


while (0.01 < diff < 0.05)
{
diff = diff - 0.01;
penny++;
}


while (diff == 0.01)
{
penny++;
diff = 0;
}


} // end bracket for do function
while (diff > 0);



if (diff == 0)
{
printf("Your change consists of:\n");
printf("%i quarters.\n", quarter);
printf("%i dimes.\n", dime);
printf("%i nickels.\n", nickel);
printf("%i pennies.\n", penny);
exit(0);
}

if (diff < 0)
{
printf("Your change consists of:\n");
printf("%i quarters.\n", quarter);
printf("%i dimes.\n", dime);
printf("%i nickels.\n", nickel);
printf("%i pennies.\n", penny);
exit(0);
}

} // end bracket for int main

预期结果:

程序的工作原理如前所述。

实际结果:

程序未完全执行。 “test1”已广播,“test2”未广播。

最佳答案

首先,您需要检查accuracy for floating point arithmetic .

也就是说,诸如此类的陈述

 while (.10 <= diff < .25)

没有做你认为他们做的事。使用您在 C 中使用的方法不可能链接关系运算符。

您需要使用 && 运算符将它们耦合起来,例如

 while (.10 <= diff && diff < .25) {

关于c - 向客户分发变更的程序。 (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47942659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com