2016-06-13 47 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

相关问题