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