【问题标题】:For loop and conditional statement to calculate a valueFor循环和条件语句计算一个值
【发布时间】:2016-02-07 02:24:24
【问题描述】:

尝试使用我在下面设置的条件计算利息变量的值,但由于它返回 0 时遇到问题,或者如果我重新排列 for 循环,它会为每个帐户返回 6471。如果您能帮我修复 for 循环,以便在控制台中显示正确的兴趣,那就太好了

#include <iostream>

using namespace std;



int main()

{

int AccountNumber[8] = { 1001, 7940, 4382, 2651, 3020, 7168, 6245, 9342 };

float Balance[8] = { 4254.40, 27006.25, 123.50, 85326.92, 657.0, 7423.34, 4.99, 107864.44 };

int DaysSinceDebited[8] = { 20, 35, 2, 14, 5, 360, 1, 45 };
int interest = 0;

//add your code here



cout << "Account Number\t" << "Balance\t\t" << "Days\t" << "Interest\t" << endl;
for (int i = 0; i < 8; i++)

    cout << AccountNumber[i] << "\t\t" << Balance[i] << "\t\t" << DaysSinceDebited[i] << "\t" << interest << "\t" << endl;

for (int i = 0; i < 8; i++)
    if (Balance[i] > 10000 || DaysSinceDebited[i] > 30)
        interest = (Balance[i] * 0.06);
    else
        interest = (Balance[i] * 0.03);



system("pause");
return 0;

}

这是我的修改:

#include <iostream>

using namespace std;



int main()

{

int AccountNumber[8] = { 1001, 7940, 4382, 2651, 3020, 7168, 6245, 9342 };

float Balance[8] = { 4254.40, 27006.25, 123.50, 85326.92, 657.0, 7423.34, 4.99, 107864.44 };

int DaysSinceDebited[8] = { 20, 35, 2, 14, 5, 360, 1, 45 };
int interest = 0;

//add your code here


for (int i = 0; i < 8; i++)
    if (Balance[i] > 10000 || DaysSinceDebited[i] > 30)
        interest = (Balance[i] * 0.06);
    else
        interest = (Balance[i] * 0.03);

cout << "Account Number\t" << "Balance\t\t" << "Days\t" << "Interest\t" << endl;
for (int i = 0; i < 8; i++)

    cout << AccountNumber[i] << "\t\t" << Balance[i] << "\t\t" << DaysSinceDebited[i] << "\t" << interest << "\t" << endl;





system("pause");
return 0;

}

【问题讨论】:

  • 您似乎在计算利息之前就打印了利息。

标签: c++ loops if-statement for-loop


【解决方案1】:
int interest = 0;

您的代码首先将 interest 变量设置为 0。

for (int i = 0; i < 8; i++)
    cout << AccountNumber[i] << "\t\t" << Balance[i] << "\t\t" << DaysSinceDebited[i] << "\t" << interest << "\t" << endl;

接下来发生的事情是,您的代码会为每个帐户打印interest 变量的值。正如您所观察到的,由于interest 设置为 0,因此您会打印出值 0。

在您的代码中发生的下一件事是第二个循环,在循环内您计算并为每个帐户设置interest。这很好,只是您已经显示了interest 的值。

你需要在计算之后显示interest,而不是之前。

【讨论】:

  • 是的,我也这么认为。所以我将计算兴趣的 for 循环移到显示兴趣的行上方,但每次都给我结果 6471
  • 你可以添加你修改的内容吗?
  • @DanielH 您的第一个 for 循环计算了所有帐户的利息值。它不打印任何东西。您计算第一个帐户的“利息”。然后是第二个帐户。等等。因此,最后,“利息”变量的值将是为最后一个帐户计算的值。然后,运行第二个 for 循环;它为所有帐户打印此值,相同的值。这就是您的代码所做的。别人为你写你的代码很好,不幸的是我认为你在这里没有学到任何东西。
【解决方案2】:
for (int i = 0; i < 8; i++)
{
    if (Balance[i] > 10000 || DaysSinceDebited[i] > 30)
        interest = (Balance[i] * 0.06);
    else
        interest = (Balance[i] * 0.03);
    cout << AccountNumber[i] << "\t\t" << Balance[i] << "\t\t" << DaysSinceDebited[i] << "\t" << interest << "\t" << endl;
}

输出:

Account Number  Balance         Days    Interest
1001            4254.4          20      127
7940            27006.2         35      1620
4382            123.5           2       3
2651            85326.9         14      5119
3020            657             5       19
7168            7423.34         360     445
6245            4.99            1       0
9342            107864          45      6471

【讨论】:

    【解决方案3】:

    你应该搬家

    cout << AccountNumber[i] << "\t\t" << Balance[i] << "\t\t" << DaysSinceDebited[i] << "\t" << interest << "\t" << endl;
    

    到第二个 for 循环。它会打印相同的结果 6471,因为您计算了所有值并重新放置到一个名为 interest 的唯一变量中,但您不会在每次计算迭代中显示它,那么 6471 是最后一个结果将最后一个元素的条件转换为数据向量。然后,您应该对 for 循环 的每次迭代表现出兴趣,就像:

        for (int i = 0; i < 8; i++){
            if (Balance[i] > 10000 || DaysSinceDebited[i] > 30)
                interest = (Balance[i] * 0.06);
            else
                interest = (Balance[i] * 0.03);
    cout << AccountNumber[i] << "\t\t" << Balance[i] << "\t\t" << DaysSinceDebited[i] << "\t" << interest << "\t" << endl;
    }
    

    此外,interest 必须是 float。希望对你有帮助:D

    【讨论】:

    • 没错。即使认为会有类型转换,当分配给 int 时,结果的精度也会丢失。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多