0

我正在尝试编写一个程序,用 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 ) ;
} 

输出:

16
28
27
58
8
53
76
35
27
19
41
Min: 8
Max: 152908968
4

7 回答 7

2

你的问题就在这里:

int a[11];

int min = a[0];
int max = a[0];

您正在使用,在本身被初始化a[0]之前进行初始化。minmaxa[0]

Initialize a[0],然后设置minmax为其值,然后从那里继续。

于 2013-10-19T06:05:30.617 回答
2

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
于 2013-10-19T06:06:09.293 回答
1

问题是你的代码片段

int min = a[0];
int max = a[0];  

您正在分配a[0]maxmin之前初始化的元素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  
        ...
于 2013-10-19T06:05:26.830 回答
1

首先,您使用垃圾值min初始化&然后将它们与数组的其他元素进行比较?max

  • 首先为数组的每个元素赋值

  • 最小值和最大值设置为 a[0](为简单起见)。

  • 然后开始将 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 ) ;
于 2013-10-19T06:06:28.017 回答
1

只是作为替代方案,因为您已经得到 4 个正确答案。

为了初始化您的变量minmax,您可以:

  • 初始化它们以获取 a[0] 的值(在 a[0] 收到它的值之后;))。
  • 将 min 初始化为 0,将 max 初始化为 100,因为您知道您的值不能小于 0 或大于 100。
  • 在您的测试中添加一个额外的条件:if (i == 0 || a[i] > max)并从 0 开始您的循环。

我提供的另外两个替代方案允许您处理数据尚不可用的情况。例如,如果这些值来自用户或网络或其他什么。

于 2013-10-19T07:42:00.477 回答
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;
}
于 2014-01-29T16:24:26.583 回答
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
于 2018-07-16T16:04:00.327 回答