我正在開發一個程式,該程式接收欠款和已付金額,然后使用 50 美元的鈔票、20 美元的鈔票等計算需要提供的零錢金額,還使用 ??25 美分硬幣和 5 美分硬幣。
這是代碼:
#include <stdio.h>
int main(){
double owed, paid;
printf("Enter amount owed: ");
scanf("%lf", &owed);
printf("Enter amount paid: ");
scanf("%lf", &paid);
int owing = paid - owed;
int fifty;
if (owing > 0)
{
fifty = owing/50;
printf("\n%d fifty dollar bill\n", fifty);
}
else
printf("0 fifty dollar bill\n");
owing = owing % 50;
int twenty;
if (owing > 0)
{
twenty = owing / 20;
printf("%d twenty dollar bill\n", twenty);
}
else
printf("0 twenty dollar bill\n");
owing = owing % 20;
int ten;
if (owing > 0)
{
ten = owing / 10;
printf("%d ten dollar bill\n", ten);
}
else
printf("0 ten dollar bill\n");
owing = owing % 10;
int five;
if (owing > 0)
{
five = owing / 5;
printf("%d five dollar bill\n", five);
}
else
printf("0 five dollar bill\n");
owing = owing % 5;
int toonie;
if (owing > 0)
{
toonie = owing / 2;
printf("%d two dollar coin\n", toonie);
}
else
printf("0 two dollar coin\n");
owing = owing % 2;
int quarter;
if (owing > 0)
{
quarter = owing / 25;
printf("%d quarter\n", quarter);
}
else
printf("0 quarter\n");
owing = owing % 25;
int dime;
if (owing > 0)
{
dime = owing / 10;
printf("%d dime\n", dime);
}
else
printf("0 dime\n");
owing = owing % 10;
int nickel;
if (owing > 0)
{
nickel = owing / 5;
printf("%d nickel\n", nickel);
}
else
printf("0 nickel\n");
owing = owing % 5;
return 0;
}
這是當前的輸出
Enter amount owed: 16.50
Enter amount paid: 140.65
2 fifty dollar bill
1 twenty dollar bill
0 ten dollar bill
0 five dollar bill
2 two dollar coin
0 quarter
0 dime
0 nickel
這是所需的輸出:
Enter amount owed: 16.50
Enter amount paid: 140.65
2 fifty dollar bill
1 twenty dollar bill
2 two dollar coin
1 dime
1 nickel
我的問題是當程式進行美分計算時,它不會給我任何美分。我有一種感覺,這與我的“欠”的型別為 int的事實有關。我曾嘗試將其更改為浮動,但之后我不知道該去哪里。我也是“C”語言的初學者,這是否令人沮喪......早點感謝任何可以幫助我的人!
uj5u.com熱心網友回復:
更新
我在開始時創建了第二個變數來存盤美分variablex = paid*100 - owed*100 并將其用于我的美分計算,方法是讓變數只保存美分variablex = variablex % 100
uj5u.com熱心網友回復:
您可以在一個函式中進行計算,以便更好地了解您的程式。我用這個calc函式做到了這一點。我還編譯了一個陣列中的值,并將它們的名稱以相同的順序編譯到另一個大小相同的陣列中。
#include <stdio.h>
double dol_val[] = {50.0, 20.0, 10.0, 5.0, 2.0, 0.25, 0.10, 0.05};
const char * dol_name[] = {
"fifty dollar bill",
"twenty dollar bill",
"ten dollar bill",
"five dollar bill",
"two dollar coin",
"quarter",
"dime",
"nickel"
};
double calc(double owing_in, double bill, char *bill_name)
{
double owing_out = owing_in;
int bill_counter = 0;
if(owing_out > 0)
{
bill_counter = (int)(owing_out / bill);
if(bill_counter > 0)
{
printf("%d %s\n", bill_counter, bill_name);
owing_out -= bill_counter * bill;
}
}
return owing_out;
}
int main(){
double owed, paid;
printf("Enter amount owed: ");
scanf("%lf", &owed);
printf("Enter amount paid: ");
scanf("%lf", &paid);
double owing = paid - owed;
for(int i = 0; i < sizeof(dol_val); i )
{
owing = calc(owing, dol_val[i], dol_name[i]);
}
return 0;
}
這些函式在每個回圈周期中被呼叫,并從大到小使用 bill 值和名稱。它只會列印計數器值 > 0 的票據,并將剩余的欠值回傳給owing變數。
在calc函式中我替換了模運算。如果您只使用int變數,模數就可以了。整個函式使用 double 值作為欠值。所以你可以做一個簡單的除法來得到剩余欠值的賬單數量,即使是美分值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/312883.html
