C计划练习。简单的交易报告

时间:2010-08-19 15:20:36

标签: c

问题:程序要求用户输入商品价格值,然后显示如何使用最小数量的$ 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;
}

3 个答案:

答案 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。