为温度计划提供良好的价值

时间:2015-01-31 18:56:24

标签: c++ vector

我使用本书学习C ++ 2个月:使用C ++编程原理和实践。现在我正在阅读关于错误的章节,在一节中,作者谈到了逻辑错误。在使用程序作为示例之前,然后修改版本以了解错误。这是第一个程序:

#include "std_lib_facilities.h"
// find the highest, lowest and averega temperature
int main()
{

vector<double> temps;

for (double temp; cin >> temp;)
temps.push_back(temp);

  double sum = 0;
  double high_temp = 0;
  double low_temp = 0;

for (double x : temps)
{
if (x > high_temp) high_temp = x;
if (x < low_temp) low_temp = x;
sum += x;
}

 cout << "Highest temperature : " << high_temp << '\n';
 cout << "Lowest temperature : " << low_temp << '\n';
 cout << "Average temperature : " << sum / temps.size() << '\n';


}

正如您所看到的,如果我输入一组与8月相关的温度,我将得到错误的输出结果,因为我只输入正值但low_temp将保持0.0,除非数据中有一个温度低于零(夏天不可能!)。

所以作者修改了这个程序:

#include "std_lib_facilities.h"

int main()
{

 vector<double> temps;

 double high_temp = -1000; // initialize to impossibly low 
 double low_temp = 1000; // initialize to impossibly high 
 double sum = 0; 
 int no_of_temps = 0; 

 for (double temp; cin >> temp;) {
 ++no_of_temps; 
sum += temp; 

if (temp > high_temp) high_temp = temp; 
if (temp < low_temp) low_temp = temp; 

 }

cout << "Highest temperature : " << high_temp << '\n';
cout << "Lowest temperature : " << low_temp << '\n';
cout << "Average temperature : " << sum / no_of_temps<< '\n';


}

我的问题在于作者要求我做的练习:

  

查一查。检查一些信息源,为我们程序的min_temp(&#34;最小温度&#34;)和max_temp(&#34;最高温度&#34;)常数选择好的值。这些价值观将决定我们计划的实用性。

这个练习的作者是什么意思?你认为该计划还需要一些改进吗?你会给min_temp和max_temp什么值?用于编写此类程序的解决方案有哪些问题?

1 个答案:

答案 0 :(得分:0)

你应该从这样的常量开始,这样第一次比较总会成功。挑选+/- 1000就可以了,但是当你不需要时,你会人为地限制自己。一个更好的解决方案可能是选择绝对极端的常量:

double high_temp = -std::numeric_limits<double>::infinity();
double low_temp = std::numeric_limits<double>::infinity();

您输入的任何温度都将高于-inf且低于inf,因此比较将成功并做正确的事。