如何在while循环中找到max&min-C

时间:2018-10-07 15:48:56

标签: c while-loop double max minimum

我知道这对您来说是一个非常简单的问题,但是对于我作为初学者来说非常困难。为了事情。我必须创建一个程序,该程序将根据需要选择任意数量的数字,然后从中写入最大和最小。数字可以有小数,所以这就是为什么要加倍。直到故障开始,一切都变得很顺利。我的最小和最大值总是输出为0。有人知道为什么吗? 代码:

 main() {
  int a = 0, b = 0, min = 1000, max = 0;
  printf("How many numbers do you want to enter\n");
  scanf("%d", & a);
  b = a;
  double n[b];
  printf("Write those numbers\n");
  for (b = 0; a > b; b++) {
    scanf("%lf", & n[b]);
  }
  b = 0;
  while (1) {
    if (n[b] < n[b + 1])
      max = n[b + 1];
    if (min > n[b])
      n[b] = min;
    b++;
    if (b == a)
      break;
  }
  printf("Minimum: %lf\nMaximum: %lf", min, max);
}

3 个答案:

答案 0 :(得分:5)

存在多个问题:

  1. 您将min定义为1000,如果输入的所有数字都大于该数字怎么办?
  2. minmax也应加倍
  3. n[b + 1]时使用b == a可以达到数组边界

解决此问题的最佳方法是在一个循环中计算最小值/最大值,如下所示:

main() {
    int i, len;
    double tmp, min = NAN, max = NAN; // its better to initialize values to NAN to cover case when len is 0
    printf("How many numbers do you want to enter\n");
    scanf("%d", & len);
    for (i = 0; i < len; ++i) {
        scanf("%lf", & tmp);
        if ((i == 0) || (tmp < min)) min = tmp;
        if ((i == 0) || (tmp > max)) max = tmp;
    }
    printf("Minimum: %lf\nMaximum: %lf\n", min, max);
}

答案 1 :(得分:2)

使用int的转换说明符打印double并不是一个好主意,但是会引起臭名昭著的未定义行为。

编译器可能已经注意到了这一点。如果不是,则增加其警告级别。对于GCC,请使用-Wall -Wextra -pedantic

因此要解决此问题,请使minmaxdouble

  int a = 0, b = 0;
  double min = 1000., max = 0.; /* Such initialisations limit your input. */

或将其保留为int(降低精度),并按原样打印它们,即int

  printf("Minimum: %d\nMaximum: %d\n", min, max);

答案 2 :(得分:0)

我知道我来晚了,但是我认为这是执行此程序的最佳方式

#include <stdio.h>

int main() {
    int a = 0;
    double min;
    double max;
    int counter = 1;
    printf("How many numbers do you want to enter\n");
    scanf("%d", & a);
    double n[a];
    double val;
    printf("Write those numbers\n");
    scanf("%lf", & val);
    min = val;
    max = val;
    while(counter < a)
    {  
        scanf("%lf", & val);
        if(val < min)
        {
            min = val;
        }
        if(val > max)
        {
            max = val;
        }
        counter++;
    }
    printf("Minimum: %lf\nMaximum: %lf\n", min, max);
    return 0;
}

这将读取值,并且不依赖于预设的最小值和最大值,因此如果您按照定义的minn和max来运行它,则可以具有负数和正数的mins和maxs,不可能没有最小值大于1000,这通常不是一个好主意,这样您就可以让min等于任意值,max等于任意值。像一个更好的主意。