2016-06-13 58 views
0

所以我有這個數組,我需要找到最小值,最大值和平均值。我已經想出瞭如何獲得最大值,我的代碼看起來是最低限度的,但它不起作用,所以我必須錯過一些東西。我還需要找到輸入數字的平均值。我所能找到的所有東西只有當你擁有數組集合的大小時纔有效。我爲數組設置了最大大小,但不會被用戶輸入填充。我一直在盯着和測試這幾天,但仍然無法弄清楚。需要查找數組中的最大值,最小值,平均值數 - 沒有聲明大小

我知道對於一般的我需要這樣的東西(在頂部加declartions),但我無法弄清楚如何得到它的工作:

for (i = 0; i < numOfGrades; i++) { 
    sum += grades[i]; 
    } 
avg = (double) sum/numOfGrades; 

這裏是其餘我代碼:

#include <stdio.h> 

int main(){ 

int grades [100]; 
int i = 0; 
int small, big, input; 

printf("Enter a series of grades. When done, enter any number above 100.\n\n"); 

while (i <= 100) { //while loop to set maximum for array 
    printf("Enter grade:"); 

    if (scanf("%d", &input) == 1) { 
     if (input >= 0 && input <=100) { 
      grades[i] = input; //if good, add to array 
      i++; 
      } 
     else { 
      printf("\n\nExiting entry.\n"); 
      printf("\n\nGrades entered:\n\n"); 
      i = i - 1; 
      break; //exiting loop 
      } 
     } 
    } 
int x, y; 
    for (x = 0; x <= i; x++) { 
     printf("Grade: %d\n", grades[x]); //print array 
     } 
    big = small = grades[0]; 
    for (y = 0; y < i; y++) { 
     if (grades[y] > big) { 
      big = grades[y]; 
      } 
     else if (grades[y] < small) { 
      small = grades[y]; 
      } 
     } 
    printf("Highest number : %d\n", big); 
    printf("Smallest number: %d\n", small); 

    return 0; 
} 
+0

如果*初始化*一些值數組(這讓我們說,不能有效的檔次),你可以很容易地識別,當你到達「結束」 ... – StoryTeller

+0

也許1)'我<= 100' -->'I <100' 2)刪除'I = I - 1;'。 3)'x <= i;' -->'x chux

+0

對於你的平均代碼,'numOfGrades'只是'while'循環中的'i'。看看我最終設置的是:用戶輸入的分數。您只需從0循環到該點即可獲得輸入成績的總和。 – computerfreaker

回答

1

在這裏,你做正確的事情:

for (x = 0; x <= i; x++) { 

因爲x <= i會帶您從0到i的值。然後在你的min/max環你這樣做:

for (y = 0; y < i; y++) { 

所以你從0到到i-1。您有2個選項:

  1. 使上述循環更正爲y <= i
  2. 不要在while循環遞減i(不這樣做i = i - 1;)這樣一來,i代表數字輸入的數字的數量,而不是輸入的號碼-1(你將需要修復的x <= ix < i)。

這是一個活生生的例子。 http://ideone.com/ZEaDue

計算平均值,你正在做正確的事情,你可以重新使用i雖然:

int sum = 0, avg = 0; 
for (y = 0; y < i; y++) { 
    sum += grades[y]; 
} 
avg = (double) sum/i; 
printf("Avg: %d\n", avg); 
+0

這是驚人的幫助和工作奇妙,除了一個小細節,我需要離開'x <= i'而不是'x

+0

@PhilipHudson,然後使用選項1. –

+0

我仍然不得不擺脫'我=我 - 1' –

1

其實你有成績的

if (scanf("%d", &input) == 1) { 
     if (input >= 0 && input <=100) { 
      grades[i] = input; //if good, add to array 
      i++; 
      } 
     else { 
      numOfGrades=i; 
      printf("\n\nExiting entry.\n"); 
      printf("\n\nGrades entered:\n\n"); 
      i = i - 1; 
      break; //exiting loop 
      } 

對於數最低限度,你的邏輯應該是這樣的:

for (y = 0; y < numOfEdges; y++) { 
    if (grades[y] > big) { 
     big = grades[y]; 
     } 
    if (grades[y] < small) { 
     small = grades[y]; 
     } 
    } 

T他其他陳述我刪除應該做的伎倆。此外,我總是在任何循環結構的使用

for(int var = 0; var < numOfEdges; var++)。這是easyer遵循的邏輯是這樣的:你已經算邊緣(numOfEdges)的數量,但你的循環只到numOfEdges-1,因爲你開始與指數0

相關問題