需要在数组中找到最大、最小、平均数 - 没有声明大小

Need to find Max, Min, Avg number in Array - no size declared

所以我有这个数组,我需要找到最小值、最大值和平均值。我已经弄清楚如何获得 Max,我的代码看起来适合最小值,但它不起作用,所以我一定遗漏了一些东西。我还需要找到输入数字的平均值。我在这方面能找到的所有内容都只有在您设置了数组大小时才有效。我为数组设置了最大大小,但它没有被用户输入填充。我已经盯着这个看了好几天了,但还是想不通。

我知道平均来说我需要类似的东西(在顶部添加声明),但我不知道如何让它工作:

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

在这里你做对了:

 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. Dont decrement i in the while loop (Dont do this i = i - 1;) That way, i 表示输入的数字的数量,而不是数字的数量输入 -1(您需要将 x <= i 修改为 x < 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);

其实你有分数

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

我删除的 else 语句应该可以解决问题。我也会一直使用

for(int var = 0; var < numOfEdges; var++) 在任何循环结构中。以这种方式遵循逻辑更容易:您已经计算了边的数量 (numOfEdges),但是由于您从索引 0 开始,因此您的循环仅进入 numOfEdges-1。