我正在尝试创建一个函数,一旦被调用,就会从数据文件中读取值并给出四个输出:最大正值,最小正值,最大负值和最小负值。如果没有正值,则应输出“无正值”,对于负值则相同。 我遇到的主要问题是让它返回正确的最小负值。
这是我到目前为止所拥有的。
void maxMinimum (double x[], int n)
{
int i;
double posMaximum;
double posMinimum;
double negMaximum;
double negMinimum;
double max;
double min;
posMaximum = x[0];
for (i=0; i <= n-1; i++)
{
if(x[i] > posMaximum)
posMaximum = x[i];
}
cout << " Maximum positive value = " << fixed << setprecision(2) << setw(8) << right << posMaximum << endl;
posMinimum = x[0];
for (i=0; i <= n-1; i++)
{
if(x[i] < posMinimum) if(x[i] > 0.0)
posMinimum = x[i];
}
cout << " Minimum positive value = " << fixed << setprecision(2) << setw(8) << right << posMinimum << endl;
negMaximum = x[0];
for (i=0; i <= n-1; i++)
{
if(x[i] < negMaximum) if(x[i] < 0.0)
negMaximum = x[i];
}
cout << " Maximum negative value = " << fixed << setprecision(2) << setw(8) << right << negMaximum << endl;
negMinimum = x[0];
for (i=0; i <= n-1; i++)
{
if (x[i] < 0.0 && x[i] < negMaximum)
negMinimum = x[i];
}
cout << " Minimum negative value = " << fixed << setprecision(2) << setw(8) << right << negMinimum << endl << endl;
max = x[0];
for (i=0; i <= n-1; i++)
{
if(x[i] > max)
max = x[i];
}
min = x[0];
for (i=0; i <= n-1; i++)
{
if(x[i] < min)
min = x[i];
}
if(max < 0.0)
cout << " No positive values" << endl;
if(min >= 0.0)
cout << " No negative values" << endl << endl;
}
执行时,该函数将返回最小负值的正值。由于if (x[i] < 0.0 && x[i] < negMaximum)
,对我来说没有任何意义。有人可以告诉我我错过了什么吗?
注意:最小负值是指最接近零的值。最大负值离零最远。
提前致谢!
答案 0 :(得分:1)
negMinimum将大于negMaximum,如-5&gt; -30。您还必须创建一个临时变量,否则negMinimum将仅等于检查的最后一个负值大于negMaximum。 例如,您的数据是{0,-80,5,-2,6,-8},因为-8&lt; 0,因此,最小值将等于-8。 0和-8&gt; -80。 所以你需要改变x [i]&lt; negMaximum to x [i]&gt; negMaximum并引入一个变量作为每个循环的新检查条件。
negMinimum = x[0];
double temp = negMaximum
for (i=0; i <= n-1; i++)
{
if ((x[i] < 0.0) && (x[i] > temp))
{
negMinimum = x[i];
temp = negMinimum;
}
答案 1 :(得分:0)
尝试简化您的设计。即尝试写出这样的四种方法
double minPositive;
void nextValueForMinPositive(double next);
void maxMinimum(double x[], int n) {
if (n <= 0) return;
minPositive = x[0]; //std::numeric_limits<double>::max();
std::for_each(x, x + n, nextValueForMinPositive);
}
void nextValueForMinPositive(double next) {
if (next > 0.0 && next < minPositive)
minPositive = next;
}