用C函数填充一维数组

用C函数填充一维数组,c,arrays,function,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++ )

大家好,我正在尝试用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;
}

在他的答案中贴出的“代码猴子”应该有用。您的问题还包括打印出来,所以我将根据您的上下文改写他的代码:

int main()  
{
    int m[ 10 ]; 
    int i,j;
    int sum = 0, average;

    srand(time(NULL));              // Randomize seed

    for(int i = 0; i < 10; i++)
    {
        m[i] = (rand() % 11) + 10; // Get a random number in the range 10 to 20
        sum += m[i];               // Get sum
    }

    average = sum / 10;            // Get average

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

您可以为此使用rand函数。这是一个关于如何确定随机数范围的小说明。我们在上面有很好的解决方案。所以我不想在这里写代码

如果要生成10-20之间的数字,可以使用以下公式

a=10 b=20 值=a+rand%b-a+1

这会给你

10+11兰特

希望这有帮助


Tharanga Abeyseela

如今,边界似乎很难划分。int m[10];声明一个包含10个整数的数组,这意味着您最多可以使用m[0],包括m[9],但不能再使用。没有m[10],正如你的循环尝试的那样。我认为你在语言上有点挣扎。你是说我想用10到20之间的10个随机数填充10个元素的数组,然后取这10个数字的平均值,并将这些数字及其平均值打印到屏幕上?您需要查看的函数是rand,但您必须对其进行缩放,因为它生成的数字超出了您感兴趣的范围。请参阅参考rand和sranduse一些教程,然后将其10个元素的随机数{10,11,12,13,14,15,16,17,18,19}与此10个元素M[i]=10+rand%11联系起来;为什么我们要给%11?10,11,12。。。20是11个数字换句话说,表达式mod 11产生0到10的数字inclusivevoid main void我必须用于函数?!?!实际上什么是函数意味着没有任何解释,如果代码以void main void开头,这意味着一个与int main不同的函数??如果你要发布一个实际的家庭作业问题,你必须准备好展示你做了什么,特别是你在哪里挣扎。别让人觉得你在帮我做作业,你会没事的。例如,获得一些指导。
int main()  
{
    int m[ 10 ]; 
    int i,j;
    int sum = 0, average;

    srand(time(NULL));              // Randomize seed

    for(int i = 0; i < 10; i++)
    {
        m[i] = (rand() % 11) + 10; // Get a random number in the range 10 to 20
        sum += m[i];               // Get sum
    }

    average = sum / 10;            // Get average

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