-1

我正在尝试创建一个函数,一旦被调用,它将从数据文件中读取值并给出四个输出:最大正值、最小正值、最大负值和最小负值。如果没有正值,它应该输出“没有正值”,对于负值也是如此。我遇到的主要问题是让它返回正确的最小负值。

这是我到目前为止所拥有的。

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). 有人可以告诉我我错过了什么吗?

注:最小负值是指最接近零的值。最大负值离零最远。

提前致谢!

4

2 回答 2

1

negMinimum 将大于 negMaximum,如 -5 > -30。您还必须创建一个临时变量,否则 negMinimum 将仅等于检查的最后一个大于 negMaximum 的负值。例如,您的数据是 {0,-80,5,-2,6,-8} negMinimum 将等于 -8,因为 -8 < 0 和 -8 > -80。因此,您需要将 x[i] < negMaximum 更改为 x[i] > 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;
   }
于 2013-10-25T08:21:22.547 回答
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;
}
于 2013-10-25T04:50:09.917 回答