问题:程序要求用户输入商品价格值,然后显示如何使用最小数量的$ 50,$ 20,$ 10,$ 5和$ 1票据组成支付该金额。
示例输出:
Enter Price: 187
Enter Amount to pay: 500
Change is : 313
(6)$50 (1)$10 (3)$1
(0)$20 (0)$5
这是我的代码:希望你帮助我,我很难知道它的正确配方..
#include <stdio.h>
#include <conio.h>
#define p printf
#define s scanf
#define g gotoxy
main()
{
clrscr();
int c1,c2,c3,c4,c5;
int price,amount;
float change;
p("Enter Price: ");s("%d",&price);
p("Enter amount: ");s("%d",&amount);
change=amount-price;
p("Change is : %f ",change);
c1=(change/50);
c2=(0);
c3=(change/change);
c4=(0);
c5=(change/change)+2;
g(5,5);p("(%d) Php 50",c1);
g(5,6);p("(%d) Php 20",c2);
g(18,5);p("(%d)Php 10 \t",c3);p("(%d)Php 1",c5);
g(18,6);p("(%d) Php 5 ",c4);
getch();
return 0;
}
答案 0 :(得分:3)
你走在正确的轨道上:
change
也应该是int
(这意味着您应该将%f更改为%d)。然后你可以正确地确定50的数量(注意C截断中的整数除法)。您应该查看%(模数运算符)以在处理50之后获得剩余的更改量:
使用您的示例:
更改= 313
五十年代= 313/50(6)
改变%= 50(13)
这意味着在将自己除以50之后将change
设置为余数(更改=更改%50)
二十几岁=改变/ 20(0)
改变%= 20(13)
tens = change / 10(1)
改变%= 10(3)
这应该为您提供所需代码的基本概念。你只是按照面额减少的顺序继续这种模式。
如上所述,使用更好的变量名,不要使用那些定义,并且通常每行坚持一个语句(在冒号后添加换行符)。这将使您的代码更具可读性。你也使用了比需要更多的括号,但这不是什么大问题。
答案 1 :(得分:2)
我建议定义一个包含账单面额的数组,以及一个最初为空的账单数量:
int denoms[5] = {50, 20, 10, 5, 1};
int bills[5] = {0, 0, 0, 0, 0};
for(int i =0; i < 5; ++i)
{
bills[i] = /* do something interesting with denoms[i] here */
change = /* more work for you here */
}
/* output answer */
for(int i =0; i < 5; ++i)
{
if (bills[i] > 0)
p("{%d)$%d", bills[i], denoms[i]);
}
p("\n");
for(int i =0; i < 5; ++i)
{
if (bills[i] == 0)
p("{%d)$%d", bills[i], denoms[i]);
}
p("\n");
答案 2 :(得分:0)
void changeloop(int* change, int* counter, int amount) {
while (*change > amount) {
(*counter)++;
(*change) -= amount;
}
}
int main() {
clrscr();
int price; printf("Enter Price: "); scanf("%d", &input);
int amount; printf("Enter Amount: "); scanf("%d", &amount);
int change = amount - price;
int fifties, twenties, tens, fives, ones;
fifties = twenties = tens = fives = ones = 0;
changeloop(&change, &fifties, 50);
changeloop(&change, &twenties, 20);
changeloop(&change, &tens, 10);
changeloop(&change, &fives, 5);
changeloop(&change, &ones, 1);
printf("Fifties: %d\n", fifties);
printf("Twenties: %d\n", twenties);
printf("Tens: %d\n", tens);
printf("Fives: %d\n", fives);
printf("Ones: %d\n", ones);
getch();
return;
}
还有工作要做,比如输入验证和错误处理。但基础知识就在这里。代码可以重构为更具可扩展性......但是meh。