计算未返回正确的值

时间:2013-09-04 17:04:51

标签: c++ visual-c++ math io

我被要求写这个程序:“一家软件公司出售零售价为99美元的套餐。数量折扣根据下表给出:
QUANTITY    DISCOUNT  
10-19       20%  
20-49       30%  
50-99       40%  
100 or more 50%

编写一个程序,询问销售的单位数量并计算购买的总成本。 输入验证:确保单位数大于0“

这是我到目前为止所做的:

#include <iostream>
#include <string>           //String class- a string of text
#include <iomanip>          //Required for setw= the field width of the value after it
using namespace std;

int main()
{
    double sales, charges, numOfUnits = 0,
           rateA = .20, rateB = .30, rateC = .40, rateD = .50;

    //Set the numeric output formatting:
    cout << fixed << showpoint << setprecision(2);
    cout << "Enter the quantity for your order: ";
    cin >> sales;

    // Determine the discount:
    double PRICE=99.0;
    if (sales >= numOfUnits)
    if (sales >= 10 && sales <= 19 )
    rateA;
    charges = PRICE - rateA *sales;
    if (sales >= 20 && sales <= 49)
    rateB;
    charges = PRICE - rateB *sales;
    if (sales >= 50 && sales <= 99)
    rateC;
    charges = PRICE - rateC *sales;
    if (sales > 100 )
    rateD;
    charges = PRICE - rateD *sales;

    cout << "Your total price for this quantity is: $" <<charges 
         << " per unit."<< endl;
    cout << "That is an invalid number. Run the program again\n "
         << "and enter a number greater than\n" 
         << numOfUnits << ".\n";
} 

编译后,输出不能给我正确的答案。也许我的数学错了,或者我的流程已关闭?有什么建议吗?

我不希望任何人为我写这个,但也许给我一些指示

3 个答案:

答案 0 :(得分:4)

您需要在多线条件下使用大括号{}

if (sales >= 10 && sales <= 19 )
    rateA;
    charges = PRICE - rateA *sales;

实际上是

if (sales >= 10 && sales <= 19 )
    rateA;
charges = PRICE - rateA *sales;

即。 <{1}}是有条件执行的,并且始终会执行rateA的更新。

此外,像charges这样的陈述没有任何效果,因此应该更新或删除。

答案 1 :(得分:0)

这种结构:

if (sales >= 50 && sales <= 99)
rateC;
charges = PRICE - rateC *sales;

确实

if (sales >= 50 && sales <= 99)
    rateC;

charges = PRICE - rateC *sales;

换句话说,charges始终使用rateC计算,而不是仅在销售额处于相关范围内时计算。 if语句中的rateC也是完全没用的 - 它没有&#34;做&#34;任何有rateC的东西,它只是告诉编译器去看看这个值,然后把它扔掉&#34; [编译器可能转换为&#34;什么都不做&#34;,因为&#34;寻找&#34;在rateC,在该声明之外实际上没有任何可见效果,因此可以将其删除]。

答案 2 :(得分:0)

快速浏览一下,我认为数学有点偏差。

应该是:

double originalPrice = PRICE * sales;
if (sales >= 10 && sales <= 19 )
  charges = originalPrice - (rateA * originalPrice);
else if (sales >= 20 && sales <= 49)

依旧......