我正在尝试编写一个程序,填充一个阵列,其中有11个点,随机数介于1-100之间。似乎随机的东西工作,最小的工作,但最大的我得到疯狂的高数字,甚至不是数组中抛出的11个数字的一部分。
不太确定问题是什么,但我很确定这是一个非常简单的东西,我正在寻找过去。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main( void )
{
int i = 0;
int a[11];
int min = a[0];
int max = a[0];
srandom( (unsigned) time(NULL) );
for (i=0;i<11;i++)
{
a[i]=random( ) % 100 ;
printf("%d\n", a[i]);
if (a[i] > max)
{
max = a[i];
}
else if (a[i] < min)
{
min = a[i];
}
}
printf("Min: %d\n", min);
printf("Max: %d\n", max);
return ( 0 ) ;
}
OUTPUT:
16
28
27
58
8
53
76
35
27
19
41
Min: 8
Max: 152908968
max初始化为一个非常高的值。初始化max为0;
int max = 0;
这是固定代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main( void )
{
int i = 0;
int a[11];
int min = 0;
int max = 0;
srandom( (unsigned) time(NULL) );
a[0]=random( ) % 100 ;
min = a[0];
for (i=1;i<11;i++)
{
a[i]=random( ) % 100 ;
printf("%d\n", a[i]);
if (a[i] > max)
{
max = a[i];
}
if (a[i] < min)
{
min = a[i];
}
}
printf("Min: %d\n", min);
printf("Max: %d\n", max);
return 0;
}
输出:
Notra:Desktop Sukhvir$ ./try
82
91
33
8
60
48
60
6
59
62
60
Min: 6
Max: 91
你的问题就在这里:
int a[11];
int min = a[0];
int max = a[0];
在a[0]
本身已初始化之前,您正在使用min
初始化max
和a[0]
。
初始化a[0]
,然后将min
和max
设置为其值,然后从那里继续。
首先,你用垃圾值初始化min
和max
,然后你将它们与数组的其他元素进行比较?
请尝试以下代码:
int main( void )
{
int i = 0;
int a[11];
int min;
int max;
srandom( (unsigned) time(NULL) );
for (i=0;i<11;i++)
a[i]=random( ) % 100 ;
min = a[0];
max = a[0];
for (i=1;i<11;i++)
{
printf("%d\n", a[i]);
if (a[i] > max)
{
max = a[i];
}
else if (a[i] < min)
{
min = a[i];
}
}
printf("Min: %d\n", min);
printf("Max: %d\n", max);
return ( 0 ) ;
问题是您的代码段
int min = a[0];
int max = a[0];
在初始化a[0]
的元素之前,你将max
分配给min
和a
。首先初始化数组的元素,然后可以将其元素分配给其他变量。
int min ;
int max ;
srandom( (unsigned) time(NULL) );
min = max = a[0] = random() % 100 + 1;
for (i = 1; i < 11; i++)
{
a[i]=random( ) % 100 + 1; // to generate numbers between 1 to 100
...
只是为了替代,因为你已经有4个正确的答案。
要初始化变量min
和max
,您可以:
if (i == 0 || a[i] > max)
并从0开始循环。我提供的另外两个备选方案允许您处理数据尚不可用的情况。例如,如果值来自用户或网络或其他。
//Just another version...
void minArray(int v[])
{
int m=100,len=0; //for max, put m=0
for(int i=0;v[i];i++)
len++;
for(int i=0;i<len;i++)
if(v[i]<m) //for max, change '<' to '>'
m=v[i];
printf("%d",m);
}
int main(void)
{
int v[100]={5,2,3,4,22,5};
minArray(v);
return 0;
}
你的问题在于最小值和最大值。您正在为它们分配您不知道的值。您正在使用大于0且小于100的值填充数组。因此,为什么不将min的值设置为100,将max设置为0.这样,只要程序找到大于或小于min或max的数字。该计划将改变他们的价值观。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main( void )
{
int i = 0;
int a[11];
int min = 100;
int max = 0;
srandom( (unsigned) time(NULL) );
for (i=0;i<11;i++)
{
a[i]=random( ) % 100 ;
printf("%d\n", a[i]);
if (a[i] > max)
{
max = a[i];
}
else if (a[i] < min)
{
min = a[i];
}
}
printf("Min: %d\n", min);
printf("Max: %d\n", max);
return ( 0 ) ;
}
输出:
gcc version 4.6.3
36
47
42
64
21
78
66
23
44
20
95
Min: 20
Max: 95