查找整数数组中的最小数字

时间:2011-01-17 07:08:43

标签: c

我写了一个小程序,它从用户那里获取5个数字并存储它们 在整数数组中。该数组被传递给一个函数。该函数用于查找数组中的最小数字并将其打印出来。由于输出不正确,我不知道为什么。该函数始终打印出数组的第一个元素,该元素应该是最小的数字但不是。

#include <stdio.h>

void smallestint (int intarray [], int n)

{
    int i;
    int temp1 = 0;
    int temp2 = 0;

    for(i = 0; i < n; i ++)
    {

        if (intarray [i] < temp1)
        {
            intarray [i-1] = intarray [i];
            temp2 = intarray[i];
            intarray[i] = temp1;
            temp1 = temp2;
        }
        else 
            temp1 = intarray[i];
    }

    printf("%d\n", intarray[0]);
}

int main ()

{
    const int n = 5;
    int temp = 0;
    int i;
    int intarray [n];

    printf("Please type in your numbers!\n");

    for(i = 0; i < n; i ++)
    {
        printf("");
            scanf("%d", &temp);         
        intarray[i] = temp;

    }

    smallestint (intarray, n);


    getchar();
    getchar();
    return 0;
}


我已更新了我的代码。现在我在for循环之前初始化临时值。但它仍然无法正常工作。

5 个答案:

答案 0 :(得分:8)

如果您只想打印出数组中最小的元素,这是最基本的方法:

#include <limits.h>
#include <stdio.h>

int smallest(int* values, int count)
{
        int smallest_value = INT_MAX;
        int ii = 0;
        for (; ii < count; ++ii)
        {
                if (values[ii] < smallest_value)
                {
                        smallest_value = values[ii];
                }
        }
        return smallest_value;
}

int main()
{
        int values[] = {13, -8, 237, 0, -3, -1, 15, 23, 42};
        printf("Smallest value: %d\n", smallest(values, sizeof(values)/sizeof(int)));
        return 0;
}

答案 1 :(得分:1)

最少量的代码必须使用LINQ:

var example_arr = new [] {3,49, 12, 11, 78, 1};
var smallest = example_arr.Select(t=>t).Concat(new[]{INT_MAX}).Min();

答案 2 :(得分:0)

你在循环的每次迭代中重新初始化你的临时变量。

您应该将当前最小的数字存储在循环中(初始化为数组的第一个元素),然后检查它。

答案 3 :(得分:0)

必须使用非常大的值(例如,temp1)在循环外部初始化

INT_MAX变量。

答案 4 :(得分:0)

如果你只想返回最小的数字 - 不要费心排序数组。

无论如何,

  • 在第一次迭代中,你将数组的第一个元素放在索引-1中(在C中是“合法的” - 但它不是你想要做的......):intarray [i-1] = intarray [i]。你应该从1开始你的循环。

  • 你在每次迭代时都会遍历temp1的值(因为你在循环中将它初始化为0)。我建议你在循环之外初始化它。

顺便说一句,如果你将循环之前的变量temp1初始化为intarry [0](而不是0),你也可以支持负数。