用指针取数组中3个数的平均值

Taking the average of the 3 numbers in the array with the pointer

int main()
{
    float dizi[10], *ptr, ort, toplam = 0.0;
    int i;
    ptr = dizi;

    for (i = 1; i <= 3; i++)
    {
        printf("input %d. value : ", i);
        scanf("%f", &*ptr);
        toplam += *ptr;
    }

    for (i = 4; i <= 10; i++)
    {
        *(ptr + i) = toplam / 3;
        printf("%d. value is : %f\n", i, *(ptr + i));
    }
}

程序如下: 例如,我输入的前三个值是2,3,4,它们的平均值'3'显示为数组的第4个元素。之后,它应该取数组的第 2、3、4 个值 '3'、'4'、'4' 的平均值,并将数字 3.66 保存为数组的第 5 个值。这个过程应该一直持续到数组的最后一个元素,即第 10 个值。简而言之,每个元素必须计算为前三个元素值的平均值,并按顺序添加到数组中。我需要用指针来解决这个问题。

您的代码中存在多个问题:

  • 您没有将第二个和第三个数字读入数组的第二个和第三个条目。
  • 您不会在移动和计算下一个条目时更新总和。

这是修改后的版本:

#include <stdio.h>

int main() {
    float dizi[10], *ptr = dizi, sum = 0.0;
    int i;

    for (i = 1; i <= 3; i++) {
        printf("input %d. value: ", i);
        if (scanf("%f", ptr) != 1)
            return 1;
        sum += *ptr;
        ptr++;
    }

    for (i = 4; i <= 10; i++) {
        *ptr = sum / 3;  // store the average
        printf("%d. value is: %g\n", i, *ptr);
        sum -= ptr[-3];  // subtract the first value
        sum += *ptr;     // add the next value
        ptr++;
    }
    return 0;
}

样本运行:

input 1. value: 2
input 2. value: 3
input 3. value: 4
4. value is: 3
5. value is: 3.33333
6. value is: 3.44444
7. value is: 3.25926
8. value is: 3.34568
9. value is: 3.34979
10. value is: 3.31824