现金更改计划使用循环和if / else [英] Cash change program using loops and if/else

查看:120
本文介绍了现金更改计划使用循环和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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆