递归函数计算从int数组中取三个元素的平均值

时间:2015-08-22 19:16:41

标签: c recursion

用三个元素计算平均值,并用平均结果替换这些元素。

示例数组[1,2,7,-2,5,0, 2,8] 转化后[3,3,3,1,1,1,5,5]

出了点问题,我无法让它发挥作用。

#include <stdio.h>

int main ( )    {
    int n, c[n];
    int *avg;
    int pom=0;

    printf("Enter lenght of array\n");

    scanf("%d",&n);

    printf("Enter elements");

    for(i = 0;i < n; i++)
        scanf("%d",c[i]);

    avg=Average(c , n, pom);

    for(i = 0; i < n; i++)
        printf("Avg elements= %d",*(avg+i))
    return 0;
}

int Average(int arr[], int size, int z)
{
    int k, l, m, Asum;

    if (size < 0) {
        return arr;
    } else {
        k=arr[z];
        l=arr[z+1];
        m=arr[z+2];

        Asum=(k + l + m)/3;

        arr[z]=Asum;
        arr[z+1]=Asum;
        arr[z+2]=Asum;
    }

    return Average(arr,size--,z++);
}

2 个答案:

答案 0 :(得分:2)

int n, c[n];是个问题。 n未初始化,因此数组的大小是谁知道什么?这是未定义的行为。

相反

int main(void) {
  int n;
  int *avg;
  int pom=0;

  printf("Enter length of array\n");
  if (scanf("%d",&n) != 1) return -1;
  int c[n];

  for(i = 0;i < n; i++)
    // scanf("%d",c[i]);
    scanf("%d",&c[i]);  // pass the address of an `int`

也可能是其他问题。

答案 1 :(得分:1)

首先尝试简单输入,想象当您只输入1个数字时会发生什么,Average函数会做什么?不要运行代码,而是尝试在头脑中或用铅笔和纸张执行代码。如果您认为该程序只需要使用三个或更多数字,请尝试三个。

严肃的程序会明确拒绝无效的输入。