我使用本书学习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什么值?用于编写此类程序的解决方案有哪些问题?
答案 0 :(得分:0)
你应该从这样的常量开始,这样第一次比较总会成功。挑选+/- 1000就可以了,但是当你不需要时,你会人为地限制自己。一个更好的解决方案可能是选择绝对极端的常量:
double high_temp = -std::numeric_limits<double>::infinity();
double low_temp = std::numeric_limits<double>::infinity();
您输入的任何温度都将高于-inf
且低于inf
,因此比较将成功并做正确的事。