计算数组的平均值

时间:2016-05-29 09:14:21

标签: c

#include<stdio.h>
#include<stdlib.h>
double mean(int i, int arr[])
{
    int j, sum = 0;
    for (j = 0; j < i; j++)
    {
        sum = arr[j] + sum;
    }
    return (float)sum/i;
}
int main()
{
    int arr[100] = { NULL };
    int i, n, sum = 0;
    printf("How many numbers would you like to enter?");
    scanf_s("%d", &n);
    while (n > 100 || n < 0)
    {
        printf("Amount of numbers should be less than 0 and more than 100\n");
        scanf_s("%d", &n);
    }
    for (i = 0; i < n; i++)
    {
        scanf_s("%d", &arr[i + 1]);
    }
    printf("%f", mean(i-1, arr[i]));
    system("pause");
}

当我运行代码时,它会给我一个读访问错误。问题在于我创建的mean()函数,但我不知道出了什么问题。帮助

2 个答案:

答案 0 :(得分:6)

  

当我运行代码时,它会给我一个读访问错误。问题出在mean()函数

虽然mean()函数会产生读访问错误,但实际问题在于:

printf("%f", mean(i-1, arr[i]));

你没有将一个数组传递给你的函数,但是它的元素(它是一个超过写入结尾的元素,所以即使你传递的值也是未定义的)。

您需要传递i这个长度,因为您的mean()将其视为独占上限,您还需要为该数组传递arr

printf("%f", mean(i, arr));

读取数据时的索引问题也需要修复 - 您需要删除+ 1

scanf_s("%d", &arr[i]);
//                 ^

答案 1 :(得分:2)

试试这个:

#include<stdio.h>
#include<stdlib.h>
double mean(int i, int arr[])
{
    int j, sum = 0;
    for (j = 0; j < i; j++)
    {
        sum = arr[j] + sum;
    }
    return (float)sum/i;
}
int main()
{
    int arr[100] = { 0 };
    int i, n, sum = 0;
    printf("How many numbers would you like to enter?");
    scanf("%d", &n);
    getchar();
    while (n > 100 || n < 0)
    {
        printf("Amount of numbers should be more than 0 and less than 100\n");
        scanf("%d", &n);
        getchar();
    }
    for (i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
        getchar();
    }
    printf("%lf", mean(n, arr));
    getchar();
}

您对mean功能的调用是错误的。您必须传递整个数组,而不仅仅是一个元素。将arr[i]更改为arr

我做了其他的小修改,使其在我的系统上运行。如果它对你有效,那么很好。