如何在while循环中找到max和min - c

Duš*_*háč 0 c double max minimum while-loop

我知道这对你来说非常简单,但对我来说,作为初学者非常努力.为了得到的东西.我必须创建程序,它将获取我想要的数量,然后从它们写入最大值和最小值.数字可以有小数,所以这就是为什么加倍.就我的故障而言,一切都很顺利,直到周期开始.最小和最大值的输出总是为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);
}
Run Code Online (Sandbox Code Playgroud)

Iły*_*sov 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);
}
Run Code Online (Sandbox Code Playgroud)