我需要帮助让这个程序正确打印我的输出 #包括/*printf和scanf选项*/ #包括 无效兑换(双硬币兑换,整数*四分之一,整数*一角,整数*五分镍币,整数*便士)/*函数原型*/ 内部主(空) { 整数五十=0,二十=0,十=0,五=0,美元=0,四分之一=0,一角=0,五分镍币=0,便士=0; 双倍已付金额=0,到期金额=0,金额变更=0,硬币变更=0;/*申报的价值变量*/ printf(“输入已付金额>”;/*提示用户输入已付金额*/ scanf(“%lf”和已付金额); printf(“输入到期金额>”;/*提示用户输入到期金额*/ scanf(“%lf”和到期金额); 变更金额=已付金额-到期金额;/*待给出的变更金额公式*/ 美元=(金额变化); 硬币兑换=(整数)((金额兑换-(金额兑换))*100+0.5); 硬币兑换=硬币兑换*100; printf(“\n%f\n”,硬币零钱); 零钱(硬币、硬币、硬币、硬币、硬币和硬币); printf(“零钱是五十元:%d$,二十元:%d$,十元:%d$,五元:%d$,美元:%d$,四分之一:%d,一角:%d,五分镍币:%d\ 便士:%d“,五十、二十、十、五、美元、四分之一、一角、五分镍币、便士); 返回(0); } 无效找零(双硬币找零,整数*四分之一,整数*一角,整数*五分镍币,整数*便士) { int q=1,d=1,n=1,p=1; 做{ 如果(硬币兑换>=25){ *季度=*季度+q; 硬币兑换=硬币兑换-25; } 否则,如果(硬币兑换>=10){ *一角硬币=*一角硬币+d; 硬币兑换=硬币兑换-10; } 否则,如果(硬币兑换>=5){ *镍币=*镍币+n; 硬币零钱=硬币零钱-5; } 否则如果(硬币兑换>=1){ *便士=*便士+p; 硬币兑换=硬币兑换-1; } }而(硬币兑换>=1); }
对不起,第一次我不是很清楚。我需要的是创建一个基本上是收银机程序。当给出到期金额和用户支付的金额时,我应该收到输出,告诉我应该收到多少50美元的钞票、20美元、10美元、5美元、1美元、25美分、10美分、5美分和1美分作为零钱。由于我是编程新手,您看到的代码是我所知的。我确实需要改进,甚至完全改变它。我真正想做的是找出我的错误,并加以纠正。我希望尽快完成这段代码。我觉得我很接近,但只是错过了。也许我错了,但这就是我来找你们的原因。有几件事:我需要帮助让这个程序正确打印我的输出 #包括/*printf和scanf选项*/ #包括 无效兑换(双硬币兑换,整数*四分之一,整数*一角,整数*五分镍币,整数*便士)/*函数原型*/ 内部主(空) { 整数五十=0,二十=0,十=0,五=0,美元=0,四分之一=0,一角=0,五分镍币=0,便士=0; 双倍已付金额=0,到期金额=0,金额变更=0,硬币变更=0;/*申报的价值变量*/ printf(“输入已付金额>”;/*提示用户输入已付金额*/ scanf(“%lf”和已付金额); printf(“输入到期金额>”;/*提示用户输入到期金额*/ scanf(“%lf”和到期金额); 变更金额=已付金额-到期金额;/*待给出的变更金额公式*/ 美元=(金额变化); 硬币兑换=(整数)((金额兑换-(金额兑换))*100+0.5); 硬币兑换=硬币兑换*100; printf(“\n%f\n”,硬币零钱); 零钱(硬币、硬币、硬币、硬币、硬币和硬币); printf(“零钱是五十元:%d$,二十元:%d$,十元:%d$,五元:%d$,美元:%d$,四分之一:%d,一角:%d,五分镍币:%d\ 便士:%d“,五十、二十、十、五、美元、四分之一、一角、五分镍币、便士); 返回(0); } 无效找零(双硬币找零,整数*四分之一,整数*一角,整数*五分镍币,整数*便士) { int q=1,d=1,n=1,p=1; 做{ 如果(硬币兑换>=25){ *季度=*季度+q; 硬币兑换=硬币兑换-25; } 否则,如果(硬币兑换>=10){ *一角硬币=*一角硬币+d; 硬币兑换=硬币兑换-10; } 否则,如果(硬币兑换>=5){ *镍币=*镍币+n; 硬币零钱=硬币零钱-5; } 否则如果(硬币兑换>=1){ *便士=*便士+p; 硬币兑换=硬币兑换-1; } }而(硬币兑换>=1); },c,C,对不起,第一次我不是很清楚。我需要的是创建一个基本上是收银机程序。当给出到期金额和用户支付的金额时,我应该收到输出,告诉我应该收到多少50美元的钞票、20美元、10美元、5美元、1美元、25美分、10美分、5美分和1美分作为零钱。由于我是编程新手,您看到的代码是我所知的。我确实需要改进,甚至完全改变它。我真正想做的是找出我的错误,并加以纠正。我希望尽快完成这段代码。我觉得我很接近,但只是错过了。也许我错了,但这就是我来找你们的原因。有几件事: 您有许多未使用的变量:50,20,10,5,美元,等
50
,20
,10
,5
,美元
,等等coin_change=(int)((amt_change-(amt_change))*100+0.5)代码>
coin_change=coin_change*100代码>
你错了。应将其替换为以下内容:
硬币零钱=(100*零钱)
+=
/-=
操作符吗?他们会改变这些路线:
*季度=*季度+q代码>
coin_change=coin_change-25代码>
为此:
*季度+=q代码>
coin_change-=25代码>
在我修复了这些东西之后,您的代码运行良好。我不想为您编写代码,因为这闻起来像是家庭作业,但下面是算法:
#include <stdio.h> /*printf and scanf option*/
#include <math.h>
void change(double coin_change, int *quarters, int *dimes, int *nickels, int *pennies); /*function protype*/
int main(void)
{
int fifties = 0, twenties = 0, tens = 0, fives = 0, dollars = 0, quarters = 0, dimes = 0, nickels = 0, pennies = 0;
double amt_paid = 0, amt_due = 0, amt_change = 0, coin_change = 0; /*declared avriables*/
printf("Enter the amount paid> "); /*Prompt user to enter amount paid*/
scanf("%lf", &amt_paid);
printf("Enter the amount due> "); /*Prompt user to enter amount due*/
scanf("%lf", &amt_due);
amt_change = amt_paid - amt_due; /*Formula for amount of change to be given*/
dollars = (amt_change);
coin_change = (int)((amt_change - (amt_change)) * 100 + 0.5);
coin_change = coin_change * 100;
printf("\n%f\n", coin_change);
change(coin_change, &quarters, &dimes, &nickels, &pennies);
printf("Change is fifties: %d$, twenties: %d$, tens: %d$, fives: %d$, dollars: %d$, quarters: %d, dimes: %d, nickels: %d,\
pennies: %d", fifties, twenties, tens, fives, dollars, quarters, dimes, nickels, pennies);
return(0);
}
void change(double coin_change, int *quarters, int *dimes, int *nickels, int *pennies)
{
int q = 1, d = 1, n = 1, p = 1;
do {
if(coin_change >= 25){
*quarters = *quarters + q;
coin_change = coin_change - 25;
}
else if (coin_change >= 10) {
*dimes = *dimes + d;
coin_change = coin_change - 10;
}
else if (coin_change >= 5) {
*nickels = *nickels + n;
coin_change = coin_change - 5;
}
else if (coin_change >= 1) {
*pennies = *pennies + p;
coin_change = coin_change - 1;
}
} while (coin_change >= 1);
}
“诀窍”是要认识到,你可以用完全相同的方式对待整美元的价值和硬币——编程艺术的一部分是能够找到一个通用的解决方案,你可以重复使用,而不是把每种情况作为一个特例来处理
您可能希望将更改转换为以美分表示值的整数,这样可以避免浮点算术产生的舍入错误
祝你好运 请将您的程序简化为演示错误的最简单的东西,然后给我们输入、预期输出和实际输出。还可以阅读打印“适当数量的美元”有什么不好?听起来不错。每次你这样格式化代码,上帝都会杀了一只小猫。如果这是家庭作业,请给它贴上这样的标签。这是干什么用的<代码>(int)((金额变化-(金额变化))*100+0.5)
硬币变化
是少于一美元的变化量。您的公式以美分计算全部变化量。当更改超过50美元时,“运行良好”的代码是否有效?另外,您听说过+
操作符吗+*quarter
@AdamLiss他提供的公式没有考虑超过一个季度的金额,他的代码使用了一个变量q
,所以我保持原样。我肯定是做错了。所以我需要做一个代码,即使超过50美元,也能给我零钱,用50,20,10,etc@RichardJ.RossIII如何使用这些未使用的变量?
read_from_keyboard(amount_due)
read_from_keyboard(amount_paid)
change = amount_paid - amount_due
for each denomination in (
fifties, twenties, tens, fives, ones, quarters, dimes, nickels, pennies) {
while (change >= value of denomination) {
increment counter for denomination
subtract value of denomination from change
}
print counter + name of denomination // Ex: "4 twenties"
}