C ++问题,我的两个源代码应该具有相同的输出,但它们是不同的

时间:2017-08-25 15:59:53

标签: c++ loops for-loop while-loop

我试图找出为什么这两个C ++源具有不同的输出,当它们应该输出相同的东西时。第一个源代码是:

print(df)

     Dep    Exp    Fl-No                        Shared Codes
0  20:58  20:55   LX 736                   [No shared codes]
1  21:23  20:55   LX 818                    [Dummy, LH 5809]
2  21:27  21:00   JU 375                   [No shared codes]
4  21:28  21:00   LX 770                    [Dummy, SN 5102]
7  21:31  21:10  LX 1842  [Dummy, LH 5880, TP 8184, A3 1985]


x = df.iloc[:, :-1].values.repeat(df['Shared Codes'].apply(len), 0)
y = df['Shared Codes'].apply(pd.Series).stack().values.reshape(-1, 1)

out = pd.DataFrame(np.hstack((x, y)), columns=df.columns)
print(out)

     Dep    Exp    Fl-No     Shared Codes
0  20:58  20:55   LX 736  No shared codes
1  21:23  20:55   LX 818            Dummy
2  21:23  20:55   LX 818          LH 5809
3  21:27  21:00   JU 375  No shared codes
4  21:28  21:00   LX 770            Dummy
5  21:28  21:00   LX 770          SN 5102
6  21:31  21:10  LX 1842            Dummy
7  21:31  21:10  LX 1842          LH 5880
8  21:31  21:10  LX 1842          TP 8184
9  21:31  21:10  LX 1842          A3 1985

下一个源代码是:

#include <iostream>
 using namespace std;

int main()
{
    int sum = 0, k = 0;
    while (sum <= 25000)
    {
        k = k + 1;
        sum = sum + k;
    }
    cout << "The last number added is " << k << " for the end result of " << sum << endl;
    system("pause");
    return 0;
}

有人可以解释为什么一个输出变量k为224而另一个225?我是新手,也许并不完全理解C ++的内外版本。

提前致谢。

3 个答案:

答案 0 :(得分:1)

在第一个循环中

while (sum <= 25000)
{
    k = k + 1;
    sum = sum + k;
}

在语句

之前完成对变量k的下一个值的评估
    sum = sum + k;

因此,如果k

,则无法增加变量sum > 25000

在这个循环中

for (k = 1; sum <= 25000; k = k + 1)
    sum = sum + k;

在语句

之后完成对变量k的下一个值的评估
    sum = sum + k;

因此变量k在上次sum > 25000时会增加。

您可以通过以下方式重写第二个循环以获得相同的结果。

int sum = 0, k;
for (k = 0; sum <= 25000; )
{
    k = k + 1;
    sum = sum + k;
}

答案 1 :(得分:0)

输出不同,因为在for和while循环中递增k的行为是不同的。

输出1:  k:223总和:24976  k:224总和:25200

最后一个数字是224,最终结果为25200

首先完成循环测试,然后k递增。 输出2:  k:223总和:24976  k:224总和:25200

最后一个数字是225,最终结果为25200

在for循环中,k递增,然后对25000

测试求和

答案 2 :(得分:0)

只需将第一个程序更改为:

int main() 
{
    int sum = 0, k = 1;    // Set K = 1
    while (sum <= 25000)
    {
        sum = sum + k;    // First Add k to Sum 
        k = k + 1;        // Then Increment k
    }
    cout << "The last number added is " << k << " for the end result of " <<sum << endl;
    system("pause");
    return 0;
}