找到最小的整数

时间:2014-09-26 00:44:38

标签: c arrays for-loop

所以我觉得我非常接近答案。只是我无法弄清楚我错过了什么。程序用随机数填充数组,然后运行它以找出最小的数字。一旦找到最小的数字,它就会将其与其位置一起打印出来。我的for循环找不到最小的整数。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void main(int argc, char* argv[])
{
    const int len = 8;
    int a[len];
    int smallest;
    int location =1;
    int i;

    srand(time(0));

    //Fill the array
    for(i = 0; i < len; ++i)
    {
        a[i] = rand() % 100;
    }

    //Print the array
    for (i = 0; i < len; ++i)
    {
        printf("%d ", a[i]);
    }
    printf("\n");

    //Find the smallest integer
    smallest = a[0];
    for (i = 1; i < len; i++)
    {
        if (a[i] < smallest)
        {
            smallest = a[i];
            location = i++;
        }
        printf("The smallest integer is %d at position %d\n", smallest, location);
        getchar();
    }
}

2 个答案:

答案 0 :(得分:2)

问题在于:

location = i++;

这一行实际上改变了i的值,这是你用来循环的索引,所以跳过了一些元素 - 基本上跳过了一半。

你可能想要类似下面这样的东西,它可以在不改变i:

的值的情况下进行简单的赋值
location = i + 1; 
//or location = i, 
//depending on whether you want to print the location as 0-based or 1-based

答案 1 :(得分:0)

你有两个问题。其中一个Pete Pei Guoanswer中正确识别。对于我的钱,正确的解决方案是location = i;,但这取决于您要报告的内容。

另一个问题是您的printf()来电正在循环中。你应该:

smallest = a[0];
for (i = 1; i < len; i++)
{
    if (a[i] < smallest)
    {
        smallest = a[i];
        location = i;
    }
}
printf("The smallest integer is %d at position %d\n", smallest, location);
getchar();

我不会为getchar()而烦恼,但我知道使用GUI / IDE开发的人往往需要它来防止窗口因程序退出而消失。