2015-04-05 37 views
0

我想計算一個從0-6出現的數字出現在給定的數組中,該數組具有從隨機數生成器生成的值。但是,我的代碼只返回'0'而不是統計數字出現在數組中的次數。我對此很陌生,有人可以幫助我嗎?如何計算給定數組中打印'0-6'之間的隨機數的次數?

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

int main(void) 
{ 
    int array[7]; 
    int i; 
    int zero=0; 
    int one=0; 
    int two=0; 
    int three=0; 
    int four=0; 
    int five=0; 
    int six=0; 

    for (i=0; i<=7; i++) 
      array[i] = i; 

    srand((unsigned)time(NULL)); 
    for (i=0; i<=7; i++) 
    { 
      int index1 = i; 
      int index2 = rand()%7; 

      int temp; 
      temp = array[index1]; 
      array[index1] = array[index2]; 
      array[index2] = temp; 



    if(i==48){zero++;} 

    else{if(i==49){one++;} 

    else{if(i==50){two++;} 

    else{if(i==51){three++;} 

    else{if(i==52){four++;} 

    else{if(i==53){five++;} 

    else{if(i==54){six++;} 

    }}}}}}} 

    for (i=0; i<=7; i++){ 
    printf("array[%d] = %d\n",i,array[i]);} 
    printf("Number of times each number came up is:\n"); 
    printf("Zero:%d\n", zero); 
    printf("One:%d\n", one); 
    printf("Two:%d\n", two); 
    printf("Three:%d\n", three); 
    printf("Four:%d\n", four); 
    printf("Five:%d\n", five); 
    printf("Six:%d\n", six); 




    return(0); 
    } 
+2

0)'I < = 7'應該是'i <7'1)'i == 48'總是爲false,因爲對於這種類型的行:'else {if(i = 0; i <= 7; i ++)' – BLUEPIXY 2015-04-05 21:19:58

+0

' = 54){six ++;}'else和if之間的'{'不需要,一個空格將會執行,那麼大部分後綴'}的字符串都可以被刪除。請爲了便於閱讀/清晰起見,在每個大括號'{'和每個大括號前面加上unindent(相同數量)'後縮進(例如4個空格)'}'確保不要使用製表符縮進,因爲不同的編輯器/文字處理器經常有不同的選項卡設置使得代碼在不同的環境中幾乎不可讀。 I.E.使用空格進行縮進 – user3629249 2015-04-05 21:47:00

+0

在打印語句組 – user3629249 2015-04-05 21:51:36

回答

0
#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

#define MAX_RAND_NUMBERS (1000) 

int main(void) 
{ 

    int i; 
    int randValue = 0; 
    int array[7] = {0}; // initialize array counters to 0 

    srand((unsigned)time(NULL)); // initialize rand() function 

    for (i=0; i<MAX_RAND_NUMBERS; i++) 
    { 
     randValue = rand()%7; 

     array[randValue]++; 
    } // end for 


    printf("total number of random numbers (limited range: 0...6): %d\n", MAX_RAND_NUMBERS); 
    printf("Number of times each of the limited range numbers occurred is:\n"); 
    for (i=0; i<7; i++) 
    { 
     printf("number: %d, occurrence count: %d\n",i,array[i]); 
    }  


    return(0); 
} // end function: main 
+0

我用0..6包含而不是介於0和6之間 – user3629249 2015-04-05 22:19:18

0

首先,如上面提到的一個註釋你的語句:

爲(I = 0;我< = 7;我++)

它有一個錯誤,因爲在實際上,它從0開始,一直到7,包括7.這意味着你實際上有8個職位(0 - > 7)而不是(0 - > 6),這是你想要達到的目標。因此,它應該是:

爲(I = 0;我< 7;我++)

即不然而主要問題。你在你的問題說:

我想算的次數從0-6號出現一個給定的數組必須從一個隨機數生成器生成的值

在下面的代碼:

for (i=0; i< 7; i++) 
     array[i] = i;` 

您的數組元素不會是隨機數,因爲您爲它們分配了非常確定的數字。更具體地說,你的數組將是這樣的: [0,1,2,3,4,5,6]。

要指定隨機數的數組,我會做這樣的事情:

srand(time(NULL)); 
for(i = 0; i < 7; ++i) { 
    array[i] = rand()%7; // this will generate numbers in the range of [0,6] 
} 

好了,現在你就像你想的隨機數的數組。所以讓我們試着對它們進行計數。我會嘗試實現一個幽靈陣列:

int apparition[7] = {0}; // this statement will initialize all values to 0 
for(i = 0; i < 7; ++i) { 
    apparition[array[i]]++; 
} 

上面的代碼做以下的事情:它遍歷號的數組,每個價值它增加的是具體的幽靈數組元素。假設你有數組[i] = 6,然後幻影[6] = 1,所以你已經計算了一個幽靈。

您的代碼:

if(i==48){zero++;} 

else{if(i==49){one++;} 

else{if(i==50){two++;} 

else{if(i==51){three++;} 

else{if(i==52){four++;} 

else{if(i==53){five++;} 

else{if(i==54){six++;} 

我想你認爲48是0的ASCII表示,對不對? 這是不正確的,因爲你在該表中看到的0是'0',它實際上是一個char值,而不是一個整數值。 相反,你應該做的

if(array[i] == 0) {zero++}; 

如果您選擇實施幻影陣,你可以打印這樣的:

for(i = 0; i < 7; ++) { 
    printf("%d appears: %d times\n", i, apparition[i]); 
} 

希望它可以幫助:-)

+0

美麗。謝謝。 – 2015-04-05 22:35:29