我的初学者c ++任务, 我有一个12列数字的文件,有50行。
我被要求找到第11列数字的平均值并将其显示在标准输出上。
它是一个初学者课程,所以不允许像矢量这样的高级主题。
我试图为每个coloumn创建12个变量,并使用while循环读取第11个coloumn,但无法弄清楚如何将所有11th coloumn的数字添加到该变量中。
我使用的while循环是这样的:
while(inputfile >> col1 >> col2>> col3>> col4>> col5>> col6>> col7>>
col8>> col9>> col10>> col11>> col12 )
{ cout<< col11 << endl; }
旁注:上面的所有col都是int变量。 inputfile
是ifstream
文件对象
上面的循环将打印出整个coloumn 11,但我无法弄清楚如何添加50行(即50个数字)中的整个颜色11来找到平均值(将总数除以50)
上述方法也可能出错
对此事的任何帮助将不胜感激。
很快就会有回应。
提前致谢。 :)
答案 0 :(得分:0)
使用变量存储总和和计数并获得平均值
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;
答案 1 :(得分:0)
由于唯一的答案是错误的,评论可能错过了重要的线索......
您需要保留collumn 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;
请参阅完整代码here。
关于除法问题的其他方法是首先将total
或count
存储为double
,尽管我发现它们具有误导性,因为它们实际上是整数,或者如果你坚持使用50,你可以average = total / 50.0
(50.0
是double
值。)
由于您是初学者,我还会花一点时间建议您反对using namespace std;
和use of endl
,不仅仅是出于性能原因,而且还要通过分离编写换行符和刷新流的无关行为。