c - 如何在 while 循环中找到最大值和最小值 - c

标签 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);
}

最佳答案

存在多个问题:

  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);
}

关于c - 如何在 while 循环中找到最大值和最小值 - c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52690216/

相关文章:

c - 优化parser函数c程序

c - 在 C 中使用 while(1) 循环作为临时状态机?

php - 在 php 中使用 while 循环创建图像表,最后一个条目回显到错误的位置

c++ - 如何用双C++替换字符串的一部分

Java 最大打印 double 和整数

c - MATLAB 编码器精度

c - 链接器脚本不起作用?

Java分割一个字符串并将其中一个转换为double

c - #if defined(WIN32) 和 #ifdef(WIN32) 的区别

C++ While 循环在数组为零时停止