2012-03-27 26 views
0
#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); 
} 

對不起,我第一次不是很清楚。我需要的是創建基本上是收銀機程序的東西。當給定應付金額和用戶支付的金額時,我應該收到輸出,告訴我應該接受多少50美元的鈔票,20s,10s,5s,1s,quarter,dimes,nickels和pennies作爲改變。由於我是編程新手,你看到的代碼是我所知道的。我確實需要改進甚至完全改變它。我真正想要做的是找出我的錯誤,並解決它們。我希望很快就能完成這些代碼。我覺得我很接近,但只是錯過了它。也許我錯了,但這就是我要爲你們所做的。我需要幫助讓這個程序正確打印我的輸出

+0

請將您的程序簡化爲顯示錯誤的最簡單的東西,然後給我們輸入,預期輸出和實際輸出。另請閱讀http://sscce.org – 2012-03-27 01:59:40

+0

印刷「適量的美元」有什麼不好?聽起來不錯。 – 2012-03-27 02:00:22

+1

每當你像這樣對代碼進行格式化時,神會殺死一隻小貓。 – 2012-03-27 02:02:15

回答

1

幾件事情:

  1. 你有很多未使用的變量:fiftiestwentiestensfivesdollars
  2. 這裏的線路:

    coin_change = (int)((amt_change - (amt_change)) * 100 + 0.5);
    coin_change = coin_change * 100;

    錯了。應將其替換爲以下內容:

    coin_change = (100 * amt_change)

  3. 您是否聽說過+=/-=運營商?他們會轉向這些行:

    *quarters = *quarters + q;
    coin_change = coin_change - 25;

    進入這個:

    *quarters += q;
    coin_change -= 25;

後,我固定的那些東西,你的代碼工作得很好。

+0

'coin_change'是小於1美元的變化量。您的公式會以美分計算_entire_變化量。當改變超過50美元時,「正常工作」的代碼是否有效?另外,你有沒有聽說過'++'操作符? '++ * quarters' – 2012-03-27 02:19:32

+0

@AdamLiss他提供的公式不會佔用超過四分之一的金額,他的代碼使用變量'q',所以我保持原樣。 – 2012-03-27 02:23:11

+0

嗯,我肯定是做錯了。所以我需要的是編寫一個代碼,即使它超過50美元,使用50s,20s,10等,也會給我改變。 – jtho117 2012-03-27 03:32:34

0

我不想寫的代碼你,因爲這氣味像功課,但這裏的算法:

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" 
} 

的「絕招」是要認識到,你可以把整個美元值和金幣完全一樣的方式 - 編程藝術的一部分就是能夠找到一個可以重用的通用解決方案,而不是將每種情況作爲特殊情況處理。

您可能希望將更改轉換爲表示以分爲單位的值的整數,這樣可以避免浮點算術創建的舍入錯誤。

祝你好運!

相關問題