数学逻辑功能不正确?

时间:2019-02-18 04:14:30

标签: c++

我正在做这个练习,它已经很完整了,但是在计算老年人折扣时,数学一定是错误的。我使用的软件会运行这两个输入来检查问题。

  • 20 10 ñ 2 12(运行正常)

  • 20 10 ÿ 2 12(不会给我预期的结果)

这使我相信问题出在double defineMembershipCost函数的老年人折扣部分。

预期结果为“会员费用= $ 162.80” ,但是我的代码为我提供了“会员费用= $ 152.00”

我不确定这是怎么回事。我希望第二只眼睛可以帮助找到它。预先谢谢你。

这是代码:

// headers
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;

// prototypes
void displayGeneralInformation ();
void readNecessaryInformation (double& regularCostPerMonth,
                               double& costPerPersonalTrainingSession,
                               bool& seniorCitizen, int& numberOfSessions,
                               int& numberOfMonths);
double determineMembershipCost (double regularCostPerMonth,
                                double costPerPersonalTrainingSession,
                                bool seniorCitizen, int numberOfSessions,
                                int numberOfMonths);

// main
int main()
{
    //variables
    double regularCostPerMonth;
    double costPerPersonalTrainingSession;
    bool seniorCitizen;
    int numberOfSessions;
    int numberOfMonths;
    double cost;

    // print menu

    // calls

    // call displayGeneralInformation
    displayGeneralInformation ();
    // call readNecessaryInformation
    readNecessaryInformation (regularCostPerMonth,
                              costPerPersonalTrainingSession,
                              seniorCitizen, numberOfSessions,
                              numberOfMonths);
    // call determineMembershipCost
    cost = determineMembershipCost (regularCostPerMonth, costPerPersonalTrainingSession, seniorCitizen, numberOfSessions,                                                       numberOfMonths);
    // Display cost of membership
    cout << "\nThe membership cost = $" << setprecision(2)<< fixed << cost << endl; 

    return 0;
}

// displayGeneralInformation function definition

void displayGeneralInformation ()
{
    cout << "\nWelcome to Stay Healthy and Fit center." << endl;
    cout << "This program determines the cost of a new membership." << endl;
    cout << "If you are a senior citizen, then the discount is 30% off of the regular membership price." << endl;
    cout << "If you buy membership for twelve months and pay today, the discount is 15%." << endl;
    cout << "If you buy and pay for 6 or more personal training session today, the discount on each session is 20%." << endl;
}

// readNecessaryInformation function definition

void readNecessaryInformation (double& regularCostPerMonth,
                              double& costPerPersonalTrainingSession,
                              bool& seniorCitizen, int& numberOfSessions,
                              int& numberOfMonths)
{
    cout << "\nEnter the cost of a regular membership per month: $";
    cin >> regularCostPerMonth;

    cout << "Enter the cost of one personal training session: $";
    cin >> costPerPersonalTrainingSession;

    cout << "Are you a senior citizen (Y,y/N,n): ";
    char ch;
    cin >> ch;
    if (ch == 'Y' || ch == 'y')
        seniorCitizen = true;
    else
        seniorCitizen = false;

    cout << "Enter the number of personal training sessions bought: ";
    cin >> numberOfSessions;

    cout << "Enter the number of months you are paying for: ";
    cin >> numberOfMonths;
}

// determineMembershipCost function definition

double determineMembershipCost (double regularCostPerMonth, double costPerPersonalTrainingSession, bool seniorCitizen, int numberOfSessions, int numberOfMonths)
{
    double cost = regularCostPerMonth * numberOfMonths;

    if (seniorCitizen)
    {
        cost = cost - (regularCostPerMonth * 0.30 * numberOfMonths);
    }

    if (numberOfMonths >= 12)
    {
        cost = cost - (regularCostPerMonth * 0.15 * numberOfMonths);
    }

    cost = cost + (costPerPersonalTrainingSession * numberOfSessions);

    if (numberOfSessions > 5)
    {
        cost = cost - (costPerPersonalTrainingSession * 0.20 * numberOfSessions);
    }

    return cost;
}

1 个答案:

答案 0 :(得分:1)

尝试以下方法:

cost = (cost - (cost * 0.30)); //for 30% off
cost = (cost - (cost * 0.15)); //15% off