【发布时间】:2019-10-17 17:05:42
【问题描述】:
我正在尝试编写一个程序,要求用户输入用户拥有的硬币数量,然后输出用户拥有的总金额。因此,用户只有一角钱、五分钱、便士和 25 美分硬币。用户输入每种面额的硬币数量后,程序应输出总金额。
#include "Coins Project.h"
#include <stdio.h>
int change(float total, int *quarters, int *dimes, int *nickels, int
*pennies);
void print(float total, int quarters, int dimes, int nickels, int
pennies);
int main(void)
{
int quarters, dimes, nickels, pennies;
float total;
total = 1.88;
change(total, &quarters, &dimes, &nickels, &pennies);
print(total, quarters, dimes, nickels, pennies);
total = 0.32;
change(total, &quarters, &dimes, &nickels, &pennies);
print(total, quarters, dimes, nickels, pennies);
printf("\nPlease enter an amount of money: \n");
scanf("%f", &total);
change(total, &quarters, &dimes, &nickels, &pennies);
print(total, quarters, dimes, nickels, pennies);
return 0;
}
int change(float total, int *quarters, int *dimes, int *nickels, int
*pennies)
{
if( total >= 0.25 )
*quarters = (total / 0.25);
if( total >= 0.10 )
*dimes = (total - (*quarters * 0.25)) / 0.10;
if( total >= 0.05 )
*nickels = (total - (*quarters * 0.25) - (*dimes * 0.10)) /
0.05;
if( total >= 0.01 )
*pennies = (total - (*quarters * 0.25) - (*dimes * 0.10) -
(*nickels * 0.05)) / 0.01 + .005;
return 0;
}
void print(float total, int quarters, int dimes, int nickels, int
pennies)
{
printf("\nTOTAL VALUE ENTERED: $%.2f", total);
printf("\n%3d quarters\n", quarters);
printf("\n%3d dimes\n", dimes);
printf("\n%3d nickels\n", nickels);
printf("\n%3d pennies\n", pennies);
}
该代码应适用于用户输入的任何硬币,并应在末尾显示总数。
【问题讨论】:
-
那有什么问题?
-
change中的算法看起来非常复杂。为什么不将每种硬币类型的部分美分总和相加得到总和?然后,如果您愿意,您可以将总金额除以 100 以转换为美元……或者我不确定您要做什么。您的问题描述听起来像是您想将所有硬币相加以获得总金额,但您的代码看起来您正在尝试根据总金额进行更改..? -
是的,我很困惑。它应该像这样工作。你有多少便士? 10 你输入了 10 你有多少镍币? 5 你输入了 5 你有多少硬币? 1 你进入了 1 你有多少个宿舍? 1 您输入了 1 您有 $0.70 谢谢。
-
一定要初始化所有的局部变量,否则你会得到一些垃圾输出。例如,如果总计为 0.20,则永远不会设置季度。
-
是的,在这种情况下,只需将它们全部加起来:
total = (25 * quarters) + (10 * dimes) + ( 5 * nickles) + pennies;这将为您提供以美分为单位的总变化,您可以除以 100 并转换为float如果您想显示它美元。没有理由将total初始化为某个随机值。但是您拥有的代码根本没有反映这一点。看起来您正在尝试从总金额中进行更改,即用户输入总金额 32 美分,而您的程序说这是 1 个季度,1 个镍,2 个便士。
标签: c