大家好我试图做一维数组填充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 :(得分: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