使用数组编写C程序,以从100个随机数的列表中找到最大和最小的数

时间:2018-12-04 18:49:09

标签: c

这是我编写的程序。 该程序正确生成随机数,但是当我执行该代码时,代码将产生以下输出:

给定数组中存在的最大元素是:-858993460

给定数组中存在的

最小元素是:-858993460

int main()
{
    int randnumber;
    int a[100], i, large, small;

    for (i = 1; i <= 100; i++)
    {
        randnumber = rand() % 100 + 1;
        printf("%d  ", randnumber);
    }
    for (i = 0; i < randnumber; i++)
    {
        a[randnumber];
    }
    large = small = a[0];
    for (i = 1; i < randnumber; i++)
    {
        if (a[i] > large)
        {
            large = a[i];
        }
        else if (a[i] < small)
        {
            small = a[i];
        }
    }
    printf("\n largest element present in the given array is : %d", large);
    printf("\n smallest element present in the given array is : %d", small);

    return 0;
}

3 个答案:

答案 0 :(得分:1)

您的许多循环都没有按照您的想法进行。

for (i = 1; i <= 100; i++)
{
    randnumber = rand() % 100 + 1;
    printf("%d  ", randnumber);
}

那只会设置randnumber并打印100次。每次randnumber都会被覆盖。

for (i = 0; i < randnumber; i++)
{
    a[randnumber];
}

那什么也没做。从技术上讲,它从0循环到randnumber无所作为。它不会初始化a

for (i = 1; i < randnumber; i++)
{
    if (a[i] > large)
    {
        large = a[i];
    }
    else if (a[i] < small)
    {
        small = a[i];
    }
}

这会搜索a的最大值和最小值,但它会从0到randnumber进行搜索。它需要从0到99,即a的大小。但是a尚未初始化,因此到处都是垃圾。这就是为什么您得到奇怪的结果的原因。


错误是您需要从0迭代到a的大小。您需要将前两个循环放在一起以初始化a。而且您需要播种rand,否则它将始终产生相同的数字。

// Seed the random number generator.
// Note this is a terrible seed.
srand((unsigned int)time);

// Fill a with random numbers.
for (i = 0; i < 100; i++)
{
    randnumber = rand() % 1000 + 1;
    a[i] = randnumber;
}

large = small = a[0];
for (i = 1; i < 100; i++)
{
    if (a[i] > large)
    {
        large = a[i];
    }
    else if (a[i] < small)
    {
        small = a[i];
    }
}

我还将随机范围提高到1000。如果您从1到100的赔率中选择100个随机数,则最小的将是1,最大的将是100。不是很有趣。

答案 1 :(得分:0)

您需要输入i = 0,因为数组从0开始。或者您可以输入a [i-1]。我建议我= 0。

删除具有“ a [randomnumber]”的第二个for循环。

添加“ a [i] =随机数;”到第一个循环,以便在生成随机值时在数组中对其进行设置。

int main()
{
int randnumber;
int a[500], i, large, small;

for (i = 0; i < 500; i++)
{
    randnumber = rand() % 100 + 1;
    printf("%d  \n", randnumber);
    a[i] = randnumber;

}
large = small = a[0];
for (i = 0; i < 500; i++)
{
    if (a[i] > large)
    {
        large = a[i];
    }
    else if (a[i] < small)
    {
        small = a[i];
    }
}
printf("\n largest element present in the given array is : %d", large);
printf("\n smallest element present in the given array is : %d", small);

return 0;
}

答案 2 :(得分:0)

当前,数组永远不会填充随机数。它正在从数组中读取“垃圾”值,以找到最大和最小的数字。

for (i = 0; i < 100; i++)
{
    randnumber = rand() % 100 + 1;
    printf("%d  ", randnumber);
    a[i] = randnumber;
}

另外,当 i = 1 时,这会给 a [0] 赋予一个并非随机创建的值。将其更改为 i = 0 可使 a [0] 用随机创建的值之一填充。