【问题标题】:How to use arrays to find average, minimum and maximum with pointers如何使用数组通过指针查找平均值、最小值和最大值
【发布时间】:2020-11-23 05:21:32
【问题描述】:

函数arrayAvgMinMax 应该通过传入的指针返回平均值、最小值和最大值。平均值也应该使用正常的返回机制返回。在您的代码中不使用库函数。

ArrayAvgMinMaxMain.c

#include <stdio.h>
#include <stdlib.h>

double arrayAvgMinMax(double array[], int length, double *avg, double *min, double *max);

int main(int argc, char **argv) {
   int length = 200;
   double avg, min, max;
   double lowRange=0, highRange=1;
   double divisor = (double) RAND_MAX;
   int i;
   
   if(argc > 1)
      length = atoi(argv[1]);
   if(argc > 2) {
      lowRange = atoi(argv[2]);
      highRange = atoi(argv[3]);
   }
    
   //Initialize values to make it clear if they are not changed.
   avg = min = max = 99999.9999;
 
   double *array = calloc(length, sizeof(double)); 
   srand(131313); // Set the starting seed so we always get the same results
   
   for(i = 0; i < length; ++i)
      array[i] = lowRange + (highRange-lowRange)*rand()/divisor;
   
   double average = arrayAvgMinMax(array, length, &avg, &min, &max);
   
   printf("avg=%f (%f), min=%f, max = %f\n", avg, average, min, max);
   return 0;
}

ArrayAvgMinMaxFunction.c 只编辑这个函数

只有一个for循环来提高效率

#include <stdio.h>

double arrayAvgMinMax(double array[], int length, double *avg, double *min, double *max) {
    //one for loop
    int i;
    int sum;
    min=max=&array[i];
    for(i = 0; i < length; i++) {
        if(min > array[i]){
            min = &array[i];
        }
        if(max<array[i]) {
            max = &array[i];
        }
        sum = sum + array[i];
        avg = (double)sum/(i+1);
    }
    
    return 0;
}

输入:10000000 100 200

输出:avg=149.991665 (149.991665),min=100.000010,max = 199.999993

【问题讨论】:

  • i 在代码执行时未初始化 min=max=&amp;array[i]; — 将 i 替换为 0(零)。不要在每次迭代时计算avg——在循环之后计算一次。 avg 是一个指针;你应该得到avg = (double)sum/(i+1); 的编译错误——*avg 是正确的。您将double 的值汇总为int;这不好。 minmax 也是指针;您应该在赋值和引用中使用*min*max(或为最小值和最大值创建局部变量(double l_min, l_max;),然后使用它们直到最后,分配*min = l_min; *max = l_max; 等。

标签: arrays c


【解决方案1】:

您对arrayAvgMinMax 函数的avgminmax 参数所做的是模拟按引用传递。为此,您必须记住指针指向变量,并且您需要设置这些变量的。这意味着您需要取消引用指针以获取它们指向的变量。

所以任务

min=max=&array[i];

没有意义(即使 i 已初始化)。像min &gt; array[i] 这样的比较也没有,您将指针 min array[i] 进行比较。

你需要做例如

*min = *max = array[0];

并使用例如*min &gt; array[i].

【讨论】:

  • 我认为这是有道理的,感谢您的建议,我会去解决这个问题
猜你喜欢
  • 2014-06-11
  • 2020-06-17
  • 1970-01-01
  • 2013-12-23
  • 2021-01-15
  • 2016-12-29
  • 2015-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多