我有一项任务要求我们为一美元输入编码自动更改程序,最高可达$ 200.00。基本上,有人输入一个金额,输出显示各种以下面额的变化量(多少20s,10s,5s,1s,quarters,dimes,nickels和pennies)。 我已经找到了一种方法来为每个面额使用if / else语句(见下文),但我想知道是否有一种更容易,更简洁的方法来执行循环? (这是一个介绍课程,所以我们还没有参加函数/数组等)。
int twenties; int tens;
int fives;
int ones;
int quarter;
int dime;
int nickel;
int penny;
double dollar_ent;
printf("Please enter a dollar amount up to 100: ");
scanf("%lf", &dollar_ent);
printf("Name - Assignment 2 - Change-O-Matic\n\n");
printf("Amount entered: $%.2lf\n\n", dollar_ent);
twenties = (dollar_ent / 20);
if (twenties >=2)
printf("%.0d\t$20.00's\n", twenties);
if (twenties == 1)
printf("%.0d\t$20.00\n", twenties);
else
printf("");
谢谢!
答案 0 :(得分:2)
您可以更轻松地将金额转换为美分。 那么你将有一个20000(200美元)的整数。
有一系列所有可能的面额:
int denominations[] = { 2000, 1000, 500, 100, 25, 10, 5, 1}.
然后遍历此数组。 将当前金额除以当前面额并从当前金额中减去。计算除法的其余部分并将其设置为当前总和,然后转到下一个面额......依此类推......
答案 1 :(得分:2)
是的,循环更容易。但你需要一个阵列来配合它:
#include <stdio.h>
static int denoms[] = {
2000,
1000,
500,
100,
25,
10,
5,
1,
0
};
int main () {
double dollar_ent;
int i;
int twenties;
printf("Please enter a dollar amount up to 100: ");
scanf("%lf", &dollar_ent);
printf("Name - Assignment 2 - Change-O-Matic\n\n");
printf("Amount entered: $%.2lf\n\n", dollar_ent);
dollar_ent *= 100;
for(i = 0; denoms[i]; i++) {
twenties = (dollar_ent / denoms[i]);
if (twenties >=2)
printf("%.0d\t$%.02f's\n", twenties, denoms[i] / 100.);
if (twenties == 1)
printf("%.0d\t$%.02f\n", twenties, denoms[i] / 100.);
dollar_ent -= twenties * denoms[i];
}
}
课程是这样的:如果你有一个如下所示的程序:
some code with one value;
similar code with another value;
similar code with yet another value;
考虑用循环替换它:
for ( some expression that takes on each value in turn ) {
the identical code, with the values replaced by variables;
}
答案 2 :(得分:0)
不像你写的那样。但是,正如你所写,它只能找到20的数量。