首页 > 解决方案 > 从C中的for循环中找到最大和最小数

问题描述

我正在尝试从 for 循环中找到最大和最小数字。我的代码是这样的:

#include <stdio.h>

int readInts(int maxNumInts, int nums[])
{
    int count = 0;
    while (count < maxNumInts && scanf("%d", &nums[count]) == 1) {
        count++;
    }
    return count;
}

int main()
{
    int nums[6] = { -1, -1, -1, -1, -1, -1 };
    int n = readInts(6, nums);
    int max = nums[0];
    int min = nums[0];
    int x = nums[0];
    int y[1000];
    for (int i = 0; i < 6; i += 2) {
        x = nums[i + 1] - nums[i];
        y[i] = x;
        if (y[i] > max) {
            max = y[i];
        }
        if (y[i] < min) {
            min = y[i];
        }
    }
    printf("%d\n", min);
    printf("%d\n", max);
}

我输入 10 30 60 100 150 210 进行测试,它返回 10 60。它应该是 20 60。看起来 min 总是最小的条目减去 0 ......我哪里做错了?

标签: c

解决方案


您正在尝试找到给定数字集中的数字之间的最小和最大差异。并且您正在将minand初始化max为该组 numbers 的第一个元素num

min由于您使用和比较数字之间的后续差异max,因此这在以下两种情况下不起作用:
a)如果数字之间的最小差异大于nums
b)如果数字之间的最大差异小于的第一个元素nums

为此:

  1. 您必须初始化min为一些可能的最高整数,例如INT_MAX.
  2. 您必须初始化max为一些可能的最低整数,例如INT_MIN.

所以更改以下两行:

int max = nums[0];
int min = nums[0];

int max = INT_MIN;
int min = INT_MAX;

当然,您必须#include <limits.h>在文件的开头包含用于 和 的值的INT_MAXINT_MIN


推荐阅读