从文件中读取第11列数字并求平均值?(c++)

Read 11th coloumn of numbers from a file and average it?(c++)

本文关键字:平均值 c++ 数字 文件 读取 11列      更新时间:2023-10-16

这是我的初学者c++作业,我有一个由12列数字和50行组成的文件。

我被要求找到第11列数字的平均值,并将其显示在标准输出中。

这是一个初学者课程,所以不允许像矢量这样的高级主题。

我试图为每个列制作12个变量,并使用while循环读取第11列,但不知道如何将第11列的所有数字添加到该变量中。

我使用的while循环是这样的:

while(inputfile >> col1 >> col2>> col3>> col4>> col5>> col6>> col7>>
     col8>> col9>> col10>> col11>> col12 ) 
{ cout<< col11 << endl; }

附带说明:上面所有的col都是int变量。inputfileifstream文件对象

上面的循环会打印出整列11,但我不知道如何将50行的整列11相加(即50个数字)以找到平均值(将总数除以50)

以上方法也可能是错误的

在这件事上的任何帮助都将不胜感激。

希望很快得到回应。

提前感谢。:)

由于唯一的答案是错误的,并且注释可能缺少一条重要线索。。。

您需要保持collomn 11个值的运行总数。我也会跟踪计数,尽管在您的情况下,您可以跳过它并硬编码值50。所以你需要的是:

int total = 0;
int count = 0;

然后在你的阅读循环中:

while (...) {
    total += col11; // keep a running total
    ++count; // add 1 to count
}

然后为了计算平均值,你把一个除以另一个。

但是,这有点棘手。如果直接执行,则将一个int除以另一个int,得到截断为int的结果。例如,1/2会给你0,这不是你的意思(0.5)。

在除法完成之前,您需要使用强制转换将至少一个值转换为double

double average = static_cast<double>(total) / count;

请参阅此处的完整代码。

解决除法问题的其他方法是首先将totalcount存储为double,尽管我发现这很误导,因为它们实际上是整数,或者如果你坚持直接使用50,你可以只使用average = total / 50.050.0double的值)。

由于您是初学者,我还将花点时间建议您不要使用using namespace std;endl,这不仅是出于性能原因,还可以通过将写换行和刷新流这两个不相关的操作分离开来,使代码更加清晰。

使用变量存储总和和计数,并获得平均

int sum = 0;
int count = 0;
double average = 0;
cout << "Calculating Average for: n";
while(inputfile >> col1  >> col2  >> col3 >> col4 >> col5
                >> col6  >> col7  >> col8 >> col9 >> col10 
                >> col11 >> col12 )  { 
    cout << col11 << " ";
    sum += col11;
    ++count;
}
cout << " n";
average = static_cast<double>(sum)/count;
cout << "Sum: "     << sum << "n";
     << "Count: "   << count << "n";
     << "Average: " << average << endl;