c - 使用 C 函数填充一维数组

标签 c arrays function

大家好,我正在尝试使用 C 函数 10 个元素填充 10 到 20 之间的随机数,并在平均 10 个元素并打印到屏幕后进行一维数组填充,我不太了解函数的帮助...

 int main()  {

       int m[ 10 ]; 
       int i,j;

       for ( i = 1; i < 11; i++ )   
       {
          m[ i ] = i + 0;   
       }

       for (j = 1; j < 11; j++ )    
       {
          printf("Element[%d] = %d\n", j, m[j] );
       }

       return 0;

}

最佳答案

以下内容应该有所帮助 - 它解决了循环索引的问题(从 0 到 9,而不是 1 到 10),并生成 10 到 20 之间的随机数。有一个小错误 - 使用模数运算符得到分布略有不均匀。如果你足够关心,你可以创建一个函数来消除上面的随机数,比如 32758。那么它将是“完全公平的”。

编辑我修改了这个程序,将其分为多个函数 - 一个生成数组,另一个打印数组,第三个函数获取数组的平均值。它还包括一个自定义函数,可以进行“公平”随机分布。我认为你的教授会认为你有帮助(如果他用谷歌搜索代码中的任何短语,他将登陆此页面)。因此,以此为灵感,然后编写自己的代码。从例子中学习是好的;抄袭是不好的。

编辑修改了fillArray函数。现在使用主程序中分配的空间,而不是在函数本身中创建空间。稍微简单一点。

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

// function declarations
int* fillArray(int* a, int n, int llim, int ulim);
float arrayAverage(int *a, int nElements);
void arrayPrint(int *a, int n);
int fairRand(int, int);

int main(int argc, char* argv[])  {

   int m[10];
   float av;
   m = fillArray(m, 10, 10, 20); // note that 'm' is a pointer (int*) to the array m[]
   av = arrayAverage(m, 10);
   arrayPrint(m, 10);
   printf("The average is %.2f\n", av);
   return 0;
}

int* fillArray(int *a, int n, int llim, int ulim) {
  // given an array a with size n
  // fill each element in the array with a random element
  // between llim and slim (inclusive)
  int i;

   for ( i = 0; i < n; i++ )
   {
      a[ i ] = fairRand(llim, ulim); // calling our user-defined function
   }
   return a;
}

float arrayAverage(int *a, int n) {
  // returns the sum of values in a[n] divided by n
  int j;
  double s=0.0;
   for (j = 0; j < n; j++ )
   {
     s += a[j];
   }
   return (float)(s / (double) n);

}

void arrayPrint(int *a, int n) {
  // prints each element in the array m[n]
  int  j;
   for (j = 0; j < n; j++ )
   {
      printf("Element[%d] = %d\n", j, a[j] );
   }
}

int fairRand(int a, int b) {
  // generates fair random number between a and b, inclusive
  int diff = b - a + 1;
  int r;
  int largest = diff * (RAND_MAX / diff);
  // this is the "magic" line: keep generating random numbers
  // until the number generated fits in the interval that has equal number
  // of each possible value after the modulo operation:
  while( (r = rand()) >= largest) {
    // keep going around...
  } ;

  // we now have a "fair" random number r
  return a +  r % diff;
}

关于c - 使用 C 函数填充一维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20275955/

相关文章:

php - PHP/SQL 最大数组大小问题的替代解决方案

javascript - 从数组中获取值

javascript - 为什么javaScript中的这个循环函数不是每次都返回0?我将如何在 python 中做类似的事情?

c++ - 与我的 abs() 相比,C++ math.h abs() 有什么不同

c - 为什么整数在溢出时会有不同的行为

c - 当我在 makefile 中使用 "gcc"时,制作完成后,我得到了 "cc"输出

c - 分配的优先级

c - 在 linux 中观察共享映射文件内存

java - 2048 游戏的随机单元格中的随机数

javascript - 调用从 Ajax 响应返回的 JavaScript 函数