【问题标题】:Multiply a generated array by value x and find the average将生成的数组乘以值 x 并找到平均值
【发布时间】:2021-09-08 14:39:41
【问题描述】:

这是我正在使用的当前代码:

#include<stdio.h>

int main()
{
   //1
    int NUM[] = {1,2,3,4,5,6,7,8,9,10};
    int i,j,k;
    int len = sizeof NUM / sizeof * NUM;

    //3
    int ODD[len];
    int EVEN[len];

    //4
    j = 0;
    k = 0;

    //5
    int sum = 0;
    int average;

    for(i = 0; i<10 ; i++){
        //5
        if(NUM[i]%2 == 0){
            EVEN[j] = NUM[i];
            j++;
        }else{
            ODD[k] = NUM[i];
            k++;
        }
    }


    //6
    printf("Even numbers : ");
    for(i = 0;i<j; i++){
        printf("%d ",EVEN[i]);
    }

    printf("\nOdd numbers : ");
    for(i = 0;i<k; i++){
        printf("%d ",ODD[i]);
    }

    printf("\nFrequency of EVEN array is :");
    for(i = 0;i<j; i++){
        sum = sum + EVEN[i];
        average = sum / j;
        printf("%d ",average);
    }

    printf("\n");
}

输出:

Even numbers : 2 4 6 8 10 
Odd numbers : 1 3 5 7 9 
Frequency of EVEN array is :0 1 2 4 6

我要做的是将生成的 EVEN[i] 数组乘以 0.02,然后找到该新数组的均值/平均值并将其反转。在公式中,它将是 1 /mean(EVEN[i]*=0.02)。我坚持使用提到的操作来操作 EVEN[i] 数组。

编辑 1: 我的平均代码:


    double Arr[i];
    for(i=0;i<j;i++){
    Arr[i] = EVEN[i]*0.02;
    printf("%f ", Arr[i]);
    }

    printf("\nAverage of EVEN array is :");
    size_t n = sizeof(Arr)/ sizeof (Arr[0]);
    for(i = 0;i<j; i++){
        sum = sum + Arr[i];
    }
        average = sum / n;
        // printf("%d ",n);
        printf("%f ",average);
        return 0;
}

输出:

Average of EVEN array is :0.000000 

不知道为什么显示为 0。

【问题讨论】:

  • 看起来不像 C!当您将它们声明为 int ODD[len]; 时,C 不支持动态数组大小
  • @ShipluMokaddim:这是自 C99 以来的 C 功能,称为 VLA :)
  • 你需要double EVEN[] 而不是int
  • @pmg: "new" :-) 那个时代的新生儿现在正在编写自己的编程语言。
  • 我一定是老了。 C99中的99已经22岁了!

标签: arrays c average element multiplication


【解决方案1】:

对于由 Even[i]*0.02 项组成的新数组

double Arr[j];
for(let i=0;i<j;j++){
    Arr[i] = Even[i]*0.02;
}

现在对于逆数组,你可以简单地做

double Arr2[j];
for(let i=0;i<j;j++){
    Arr2[i] = 1/Arr[i];
}

或者如果你想直接执行这个,你可以这样做

double Arr[j];
for(let i=0;i<j;j++){
    Arr[i] = 1/(Even[i]*0.02);
}

还是我从你的问题中遗漏了什么?

【讨论】:

  • 如何找到 Arr[i] 的平均值?当我在我的代码中尝试时,它给了我一个数组,而它应该只是一个奇异值。
  • @AshtonStark 只需创建一个新变量,并将 arr 的总和除以其长度,所以基本上取 sum=0,将 arr[i] 添加到每个 i =0 到 N 的总和中,然后只需将总和除以 N 得到平均值
  • 这就是我在上面的代码中所做的,但我得到的是一个数组而不是一个奇异值
  • @AshtonStark 这不是您在上面的代码中所做的。您可能想在sum = sum + EVEN[i]; 之后关闭块},而不是在printf 之后关闭
  • @Gerhardh 我已经解决了这个问题,但我的平均值仍然为 0。
猜你喜欢
  • 2021-05-18
  • 2017-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多