用C函数填充一维数组

时间:2013-11-28 23:02:41

标签: 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;

}

4 个答案:

答案 0 :(得分:1)

以下应该有所帮助 - 它解决了循环索引的问题(从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;
}

答案 1 :(得分:0)

#include <stdlib.h>
...
for ( i = 1; i < 11; i++ )   
    m[ i ] = 10 + rand() % 11;   

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

double average = (double) sum / (double) size;
printf("Average = %lf\n", average);

答案 2 :(得分:0)

在他的回答中发布的代码Bit Fiddling Code Monkey应该有效。你的问题还包括打印出来,所以我只需要在你的上下文中重写他的代码:

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;
}

答案 3 :(得分:0)

你可以使用rand函数。这是如何确定随机数范围的一个小小的澄清。我们有很好的解决方案。所以我不想在这里写代码。

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

a = 10 b = 20 value = a + rand()%(b-a + 1)

这会给你

10 + rand()%11;

希望这会有所帮助

Tharanga Abeyseela