C语言实现硬币总金额计算程序的金额计算与输出问题求助
作业要求拆解
- 交互规则:每询问一类硬币数量并接收输入后,立刻输出回显
你输入了X(X为用户本次输入的数值) - 硬币面值换算标准:
- penny:1美分/枚
- nickel:5美分/枚
- dime:10美分/枚
- quarter:25美分/枚
- 最终输出要求:全部输入完成后按
你持有$XX.XX格式输出总美元金额,最后输出Thank you.
现有代码错误修正点
- 原代码询问语句为英文,需替换为作业要求的中文交互文本
- 每类输入完成后未添加回显逻辑
- 未按面值换算总金额,仅简单累加了硬币数量
- 直接将数值变量传入
printf作为第一个参数,属于语法错误(printf第一个参数必须是格式控制字符串) - 总金额变量定义为
int,无法存储带小数的美元金额 - 新增精度优化:先以整数形式计算总美分数,再转换为美元,避免浮点数精度误差导致的输出格式错误
修正后可直接运行的代码
#include<stdio.h> #include<stdlib.h> int main(void) { int pennyTotal, nickleTotal, dimeTotal, quarterTotal; int total_cents; double total_dollars; // 处理pennies输入 printf("你有多少pennies?\n"); scanf_s("%i", &pennyTotal); printf("你输入了%d\n", pennyTotal); // 处理nickels输入 printf("你有多少nickels?\n"); scanf_s("%i", &nickleTotal); printf("你输入了%d\n", nickleTotal); // 处理dimes输入 printf("你有多少dimes?\n"); scanf_s("%i", &dimeTotal); printf("你输入了%d\n", dimeTotal); // 处理quarters输入 printf("你有多少quarters?\n"); scanf_s("%i", &quarterTotal); printf("你输入了%d\n", quarterTotal); // 按面值计算总美分,再转换为美元 total_cents = pennyTotal * 1 + nickleTotal * 5 + dimeTotal * 10 + quarterTotal * 25; total_dollars = total_cents / 100.0; // 固定保留两位小数输出总金额 printf("你持有$%.2f\n", total_dollars); printf("Thank you.\n"); system("pause"); return 0; }
环境适配说明:如果使用非Visual Studio编译环境(如GCC、Clang),可将代码中所有
scanf_s替换为标准C库的scanf,其余逻辑无需调整。
作业示例用例验证
- 输入10枚pennies → 回显
你输入了10,对应贡献10美分 - 输入5枚nickels → 回显
你输入了5,对应贡献25美分 - 输入1枚dimes → 回显
你输入了1,对应贡献10美分 - 输入1枚quarters → 回显
你输入了1,对应贡献25美分 - 总美分累计70 → 输出
你持有$0.70,与作业示例完全匹配 - 最终输出
Thank you.,符合流程要求
内容的提问来源于stack exchange,提问作者user15179586
相关产品推荐
相关产品推荐

