代码如下:
#include<iostream>
using namespace std;
class Test {
private:
int i;
double j = 0;
double arr;
public:
double ArrofK(int n,int k) {
double sum = 0;
for (i = 1; i <= n; i++)
{
if (i % k == 0)
{
sum += i;
j++;
}
}
arr = sum / j * 1.0;
return arr;
}
double ArrofNK(int n,int k) {
double sum = 0;
for (i = 1; i <= n; i++)
{
if (i % k != 0)
{
sum += i;
j++;
}
}
arr = sum / j * 1.0;
return arr;
}
};
int main()
{
int n, k;
cin >> n >> k;
Test t;
cout << t.ArrofK(n, k) << " " << t.ArrofNK(n, k) << endl;
}
输入
100 16
运行结果为
3.36 50.1459
我知道这个代码出错了,但奇怪的是当我把
cout << t.ArrofK(n, k) << " " << t.ArrofNK(n, k) << endl;
改为
cout << t.ArrofNK(n, k) << " " << t.ArrofK(n, k) << endl;
后
运行结果变成了
4.714 56
都是后面对了,前面错了,我个人认为是私有成员j出错了,但是不应该是前面对,后面错吗?求解。
因为cout中的表达式计算顺序是:从右到左,输出顺序是:从左到右,跟C语言中printf函数一样。
如有帮助,请采纳一下,谢谢。
没错啊。在fK函数会加到6,而在fNK函数j初始也是6,然后被加到100了,在fNK中sum 等于5050减(16,32,48,64,80,96)了。所以是47.14
为什么要把i、j这些方法级变量设置成类成员变量啊?互相影响,如果想用,就在私有方法中使用前设置初值j =0