2013-10-19 58 views
0

我只是一個初學者與C所以請裸我的...C編程的最小和最大的陣列

我想寫一個程序,填充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 

回答

2

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 
+1

'min'和'max'應該*兩者*最初設置爲與'a [0]'相同的隨機數;不只是'min'。即'a [0] = min = max = random()%100;' – WhozCraig

+0

太棒了!謝謝你@sukhvir,我喜歡你如何把你的代碼放在這裏我可以比較我的, –

+0

@SalZ。你是最受歡迎的朋友 – sukhvir

1

問題是你的代碼片段

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

您正在分配a[0]max和在初始化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 
     ... 
+1

您可以一次完成此操作。在循環之外,'a [0] = min = max = random()%100;'。唯一需要改變OP代碼的其他事情是將發生器循環的啓動時間設置爲1而不是0.無論如何,這仍然可以工作,所以+1。 – WhozCraig

+0

@WhozCraig;現在編輯。 – haccks

2

你的問題就在這裏:本身已初始化

int a[11]; 

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

您使用a[0]初始化minmax,以前a[0]

初始化a[0],然後將minmax設置爲其值,然後從那裏繼續。

+0

此外,對於一些學習者來說,分配是很困難的,他們通常認爲從現在開始他們定義了兩個相同的東西。你真的只是從一個內存插槽複製一個值到另一個內存插槽。隱式指針/引用可能會混淆某些語言中的問題,因爲兩個變量可以引用相同的內存插槽,因此一個變量會影響另一個,但鏈接仍然可以通過更改指針來中斷。在聲明性/邏輯範式(特別是Prolog)中有語言,在這裏你可以定義兩個變量從此處相等 - 這個動作稱爲「統一」。 – Steve314

1

首先要初始化min & max垃圾值 &那麼你將它們與比較其他數組元素?

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

  • 分鐘&最大值設置爲[0](爲了簡便起見)。

  • 然後開始比較與陣列的其他元素的最大值。

試試下面的代碼:

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) ; 
1

只爲選擇,因爲你已經有4個正確答案。

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

  • 初始化它們得到的值[0](A [0]已收到其價值後;))。
  • 初始化分鐘爲0,最大值爲100,因爲你知道你的值不能小於0或大於100
  • 在您的測試中添加一個額外的條件:if (i == 0 || a[i] > max)和從0
  • 啓動循環

我提供的另外兩種選擇允許您處理數據尚未提供的情況。例如,如果這些值來自用戶或網絡或其他。

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; 
}