2017-03-31 82 views
1

問題:給定的x和y的整數值會在[x,y]區間內生成20個隨機值,並將它們放入數組中。打印陣列。確定最大偶數負數的索引(範圍從0到19)。考慮陣列中可能沒有這樣的數字的可能性。計算所有正奇數的和。您只能通過 數組值一次。您應該定義獨立的函數來生成隨機數並檢查偶數和奇數。操作隨機數組

我所寫的:

#include <stdio.h> 

int random(int min, int max, int arr[]){ 
    int i, j = 1; 
    for(i = 0; i<20; i++){ 
     arr[i] = min + rand() % (max+1 - min);} 
    for(i = 0; i<20; i++){ 
     printf("%d. %d\n", j, arr[i]); 
     j++;} 
    return arr[20];} 

int evenodd(int arr[], int size){ 
    int i, holder, sum, index = 1; 
    holder = arr[i]; 
    for(i = 0; i<20; i++){ 
     if (holder>0){ 
      if (holder%2 == 0){ 
       sum = sum;} 
      else{ 
       sum += i;}} 
     else{ 
      sum = sum;}} 
    printf("\nThe sum of all odd positive numbers is %d.", sum); 
    for(i = 1; i<20; i++){ 
     int top = arr[0]; 
     if (arr[i]<0){ 
      if(arr[i]<top){ 
       top = arr[i]; 
       index = i;} 
      else{ 
       top = top;}} 
     else{ 
      top = top;}} 
    printf("\nThe index of the largest negative number is %d", index);} 

int main() 
{ 
    int min, max; 
    printf("Please input the minimum desired random number: "); 
    scanf("%d", &min); 
    printf("\nPlease input the maximum desired random number: "); 
    scanf("%d", &max); 
    int a[20]; 
    random(min, max, a); 
    evenodd(a, 20); 
} 

它打印出精美,但正奇數之和是錯的,以及最大負數的指標。

回答

0

四件事 1)你沒有初始化奇數的正數爲零。所以你應該這樣做。 2)在計算總和時,你應該做sum + = sum [i]而不是sum + = i;

3)您將索引初始化爲1,而不是0作爲最大負數的索引。如果第一個元素是你的最小負數,你的答案應該是零。現在,對於第一個和第二個元素,您將給出答案爲1.如果您希望範圍從1到20,則可以在打印件中輸出i + 1。我認爲你還必須做,如果(arr [i]>頂部)找到最大的負整數,假設-10大於-20,這通常是這樣的情況

4)你在三個實施仍然不會考慮事實上不存在這樣的數字。我建議做的是初始化你的最大到最大的負整數。 Range of values in C Int and Long 32 - 64 bits。你可以設置你的索引爲-1。將它與整個數組進行比較,如果您的索引最終爲-1。然後你打印出沒有這樣的元素存在。你還必須檢查你正在比較的整數是否是偶數。您可以在一個循環中進行求和和偶數負整數,因爲這兩件事是彼此獨立的。

1

在循環for(i = 1; i<20; i++)找到負數時,通過將top的值重置爲arr[0]開始循環,因此您將始終對數組的第一個值進行比較。也許你想把這個初始化移出循環。

+0

我喜歡OP的(重複)'else {top = top; }'和'sum = sum;'代碼中有很多冗餘,這使得它很難閱讀。 –

1

我看到您的代碼有幾個問題(特別是與您的問題陳述有關),但求和過程不起作用因爲你只是在for循環之前初始化一個變量「holder」。此外,您正在使用未初始化的變量「i」作爲數組arr的索引。這裏可能會出現很多錯誤!

順便說一下,請使用適當的縮進來使您的代碼更具可讀性。