簡體   English   中英

C編程數組的最小值和最大值

[英]C Programming min and max of array

我正在嘗試編寫一個程序,該程序用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

您的問題就在這里:

int a[11];

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

您正在使用a[0]初始化minmax ,然后再初始化a[0]本身。

初始化a[0] ,然后將minmax設置為其值,然后從此處繼續。

將max初始化為一個非常高的值。

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 min = a[0];
int max = a[0];  

您要在初始化a元素之前為maxmin分配a[0] 首先初始化數組的元素,然后可以將其元素分配給其他變量。

 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  
        ...

首先,您要使用垃圾值初始化minmax ,然后將它們與數組的其他元素進行比較?

  • 首先為數組的每個元素分配值

  • 最小值和最大值設置為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 ) ;

僅作為替代選擇,因為您已經獲得了4個正確答案。

為了初始化變量minmax ,您可以:

  • 初始化它們以獲取a [0]的值(在a [0]收到其值之后)。
  • 將min初始化為0,將max初始化為100,因為您知道自己的值不能小於0或大於100。
  • 在測試中添加一個額外條件: 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM