Как мога да накарам моята C програма да връща ресто в долари, четвъртини, стотинки, монети и пенита?

Кодът е:

int main()
{
    displayOwe(getOwe(), customerpaid());
    displayChange(dollars, quarters, dimes, nickels, pennies);
    return 0;
}

float getOwe()
{
    float owed;
    printf("\nHow much does the customer owe? ");
    scanf("%f" ,&owed );    
    return owed;
}

float customerpaid()
{
    float paid;
    printf("\nHow much did the customer pay? ");            
    scanf("%f" ,&paid );
    return paid;
}

float calculateTotal (float paid, float owed)
{
    float answer;
    answer = paid - owed;
    return answer;
}

float displayOwe(float owed , float paid)
{   
    printf("\nCustomer owes $%0.2f and paid $%0.2f.", owed, paid);
}

int displayChange(int dollars, int quarters, int dimes, int nickels, int pennies)
{
    dollars= ;
    quarters=
    dimes=
    nickels=
    pennies=
    printf("\n\nCashier should refund %d dollars, %d quarters, %d dimes, %d nickels, and %d pennies.", dollars, quarters, dimes, nickels, pennies); 
}

Трябва да създам C програма за изчисляване на промяната, която показва колко дължи клиентът и колко е платил клиентът. Направих тази част и тя работи безупречно, но не знам как да накарам програмата да показва колко долара, четвъртини, стотинки, монети и стотинки касиерът трябва да върне на клиента. Всяка помощ ще бъде оценена.


person Kobeissi2    schedule 27.01.2015    source източник
comment
Добре дошли в Stack Overflow! Моля, направете обиколка и прочетете Как да Попитайте, за да научите какво очакваме от въпросите. Моля, отделете малко време, за да форматирате кода, за да стане четим от хора.   -  person Sourav Ghosh    schedule 27.01.2015
comment
Здравейте, какво не е наред с него? Публикувах го като код.   -  person Kobeissi2    schedule 27.01.2015
comment
Хм, малко форматиране, моля. Ние не сме компилатори, нали?   -  person Sourav Ghosh    schedule 27.01.2015
comment
Това по-добре ли е? Премахнах част от него   -  person Kobeissi2    schedule 27.01.2015
comment
Просто трябва да го разделите на стъпки, най-голямата деноминация към най-малката. Отговорът тук може да помогне: stackoverflow.com/questions/22032680/   -  person Retired Ninja    schedule 27.01.2015


Отговори (1)


displayChange се нуждае от два допълнителни аргумента - float дължим, float платен. Другите параметри трябва да бъдат препратки "&", тъй като те са изходни параметри.

Вътре в displayChange бих преобразувал float в ints:

int iOwed = owed * 100;  
int iPaid = paid * 100;

Сега едно пени е 1, а не 0,01 и един долар е 100, а не 1;

След като ги имате като int, започнете с получаване на промяната:

int change = iPaid - iOwed;

След това разберете колко от всеки се дължи, като преминете от най-голямата към най-малката парична единица - първо разделяне, след това получаване на остатъка.

dollars =  change / 100;

Използвайте оператора на модула, за да получите остатъка:

remainder  = change % 100;

След това продължете да изчислявате останалите стойности, като използвате 25, 10, 5 и 1 за четвъртинки, стотинки, никели и пенита.

quarters = remainder / 25;

remainder = remainder % 25;
person Scooter    schedule 27.01.2015
comment
Получавам числа, които са твърде големи. - person Kobeissi2; 31.01.2015