这是我编写的程序。 该程序正确生成随机数,但是当我执行该代码时,代码将产生以下输出:
给定数组中存在的最大元素是:-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;
}
答案 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] 用随机创建的值之一填充。