现金更改计划使用循环和if / else [英] Cash change program using loops and if/else
问题描述
编写一个程序,允许用户输入高达$ 200.00的现金金额,然后计算并以下列面额(20,10,5,1,.25,.10,.05,。01)打印其值。我想我已经找到了如何获得面额(除法/模数)的基础知识,但它是do / while和if / else的结构给了我麻烦。我一直得到一个错误,我需要一个while语句,即使我已经输入它及其条件(见下文),但我也有点不知道在哪里放置范围提示(如果用户输入的东西)负数或高于200)。任何建议/指导将不胜感激!
Coding a program that allows user to input a cash amount up to $200.00 and then computes and prints its value in the following denominations (20, 10, 5, 1, .25, .10, .05, .01). I think I've figured out the basics of how to get the denominations (division/modulus), but it's the structure of the do/while and if/else that's giving me trouble. I keep getting an error that I need a while statement even though I've entered it and its condition (seen below), but I also am at a bit of a loss as to where to put a range prompt (if the user inputs something negative or above 200). Any suggestions/guidance would be greatly appreciated!
double amt_ent;
int twenty, ten, five, one, quarter, dime, nickel, penny, remainder;
printf ("Enter a dollar amount up to $200.00:");
scanf ("%lf", &amt_ent);
do
{ printf ("Name - Assignment 2 - Change-O-Matic\n");
printf ("Amount entered: $%.2lf\n", ((amt_ent*100)/100));
printf ("Change breakdown:\n");
{ /*Change in twenties*/
twenty= (int) amt_ent/20;
if (twenty >= 2)
printf("%i\t$20.00s\n", twenty);
if (twenty == 1)
printf ("%i\t$20.00\n", twenty);
else
/*Change in tens*/
remainder = twenty % 20;
ten = remainder/10;
if (ten >=2)
printf ("%i\t$10.00s\n", ten);
if (ten == 1)
printf ("%i\t$10.00\n", ten);
else
/*Change in fives*/
remainder = ten % 10;
five = remainder/10;
if (five >= 2)
printf ("%i\t$5.00s\n", five);
if (five == 1)
printf ("%i\t$5.00\n", five);
else
/*Change in ones*/
remainder = five % 5;
one = remainder/1;
if (one >= 2)
printf ("%i\t$1.00s\n", one);
if (one == 1)
printf ("%i\t$1.00\n", one);
else
/*Change in quarters*/
remainder = one % 1;
quarter = remainder/.25;
if (quarter >= 2)
printf ("%i\t$.25s\n", quarter);
if (quarter == 1)
printf ("%i\t$.25\n", quarter);
else
/*Change in dimes*/
remainder = quarter % 4;
dime = remainder/.10;
if (dime >= 2)
printf ("%i\t$.10s\n", dime);
if (dime == 1)
printf ("%i\t$.10\n", dime);
else
/*Change in nickels*/
remainder = dime % 10;
nickel = remainder/.05;
if (nickel >= 2)
printf ("%i\t$.05s\n", nickel);
if (nickel == 1)
printf ("%i\t$.05\n", nickel);
else
/*Change in pennies*/
remainder = nickel % 20;
penny = remainder/100;
if (penny >= 2)
printf ("%i\t$.01s\n", penny);
if (penny == 1)
printf ("%i\t$.01\n", penny);
}
while ((amt_ent <= 200.00) && (amt_ent >= 00.00));}
return 0;
推荐答案
试试这个...经过测试,它确实有效。
你的问题在于计算提醒的方式。您需要使用上一步再次分割amt_ent。同样,所有%操作仅适用于整数。因此,在进行计算之前,需要将乘以100转换为整数域。
Try this... Tested and it works. You problem was in the way reminder was being calculated. You need to divide the amt_ent again with previous step. Again all % operations work only with integers. So you need to convert your double to integer domain by multiplying with 100 before proceeding with calculations.
#include<stdio.h>
#include<stdlib.h>
main()
{
double amt_ent1;
int amt_ent;
int twenty, ten, five, one, quarter, dime, nickel, penny;
do
{
printf ("Enter a dollar amount up to $200.00:"); //<== it is put in due to get the statement again else it execute with the same value.
scanf ("%lf", &amt_ent1);
amt_ent = (amt_ent1*100)/100;
printf ("Name - Assignment 2 - Change-O-Matic\n");
printf ("Amount entered: $%.2lf\n", amt_ent1);
printf ("Change breakdown:\n");
if ((amt_ent > 200.00) || (amt_ent < 00.00)) continue;
amt_ent = amt_ent1 * 100;
{ /*Change in twenties*/
twenty= (int) amt_ent/2000;
if (twenty >= 2)
printf("%i\t$20.00s\n", twenty);
if (twenty == 1)
printf ("%i\t$20.00\n", twenty);
/*Change in tens*/
amt_ent = amt_ent % 2000;
ten = amt_ent/1000;
if (ten >=2)
printf ("%i\t$10.00s\n", ten);
if (ten == 1)
printf ("%i\t$10.00\n", ten);
/*Change in fives*/
amt_ent = amt_ent % 1000;
five = amt_ent/500;
if (five >= 2)
printf ("%i\t$5.00s\n", five);
if (five == 1)
printf ("%i\t$5.00\n", five);
/*Change in ones*/
amt_ent = amt_ent % 500;
one = amt_ent/100;
if (one >= 2)
printf ("%i\t$1.00s\n", one);
if (one == 1)
printf ("%i\t$1.00\n", one);
/*Change in quarters*/
amt_ent = amt_ent % 100;
quarter = amt_ent/25;
if (quarter >= 2)
printf ("%i\t$.25s\n", quarter);
if (quarter == 1)
printf ("%i\t$.25\n", quarter);
/*Change in dimes*/
amt_ent = amt_ent % 25;
dime = amt_ent/10;
if (dime >= 2)
printf ("%i\t$.10s\n", dime);
if (dime == 1)
printf ("%i\t$.10\n", dime);
/*Change in nickels*/
amt_ent = amt_ent % 10;
nickel = amt_ent/5;
if (nickel >= 2)
printf ("%i\t$.05s\n", nickel);
if (nickel == 1)
printf ("%i\t$.05\n", nickel);
/*Change in pennies*/
amt_ent = amt_ent % 5;
penny = amt_ent/1;
if (penny >= 2)
printf ("%i\t$.01s\n", penny);
if (penny == 1)
printf ("%i\t$.01\n", penny);
}
}
while ((amt_ent <= 2000) && (amt_ent >= 0)); //<== it is put inside the do loop it is wrong, it come outside the do lopp.
return 0;
}
这篇关于现金更改计划使用循环和if / else的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!