2
私はこのプログラムを書くように頼まれました: 「あるソフトウェア会社は、小売価格が 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";
} 

コンパイル後、出力から正しい答えが得られません。計算が間違っているか、フローがオフになっている可能性がありますか? 助言がありますか?

誰かにこれを書いてもらいたくありませんが、いくつかの指針を教えてください

4

3 に答える 3

4

{}複数行の条件を囲む中括弧を使用する必要があります

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

実際には

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

ierateAは条件付きで実行され、への更新chargesは常に実行されます。

また、ステートメントのようなrateA;ものは効果がないため、更新または削除する必要があります。

于 2013-09-04T17:08:30.723 に答える
0

ざっと見ただけで、数学が少しずれているように思います。

そのはず :

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

等々..

于 2013-09-04T17:14:56.347 に答える
0

この種の構造:

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

する:

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

charges = PRICE - rateC *sales;

つまり、売上が該当範囲内にある場合だけではなく、charges常に で計算されます。if ステートメントの内部もまったく役に立たない - それは で何も「しない」、コンパイラに「この値を見て、それを捨てる」ように指示するだけです [コンパイラはおそらく「で何もしない」と解釈しますすべて」、「見る」ことは実際にはそのステートメントの外では目に見える効果がないため、削除することができます]。rateCrateCrateCrateC

于 2013-09-04T17:11:09.890 に答える