【问题标题】:Taking the average of the 3 numbers in the array with the pointer用指针取数组中3个数的平均值
【发布时间】:2022-01-11 19:49:58
【问题描述】:
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 个值。简而言之,每个元素必须计算为前三个元素值的平均值,并按顺序添加到数组中。我需要使用指针来解决这个问题。

【问题讨论】:

  • &amp;*ptr 只是ptr。而*(ptr+i) ptr[i]一样更容易阅读...
  • 而 C 数组索引是基于 0 的,而不是 1。您将离开 dizi 数组的末尾。
  • “我需要用指针来解决这个问题。”...那里有问题吗?有什么问题可以描述吗?
  • 第一个循环中还有另一个主要错误。仔细想想它在做什么。
  • 我明天要去参加考试,这是一个可能的问题。在问题中,要求使用指针进行解决。由于我认为在考试中会一样,所以我正在寻找带有指针的解决方案。

标签: c loops for-loop pointers


【解决方案1】:

您的代码存在多个问题:

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

这是修改后的版本:

#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

【讨论】:

  • 你解释得很好,非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-19
  • 1970-01-01
  • 2019-06-27
  • 1970-01-01
  • 1970-01-01
  • 2016-03-13
相关资源
最近更新 更多