【发布时间】:2015-10-06 10:03:19
【问题描述】:
我一直在研究这段代码,它在 numArray 中生成一个随机数数组,然后将其打乱,将其添加到数组中并打印出数组。这是我完成的代码。
#include <stdio.h>
#include <stdlib.h>
#define SEED 7451
#define ARRAY_SIZE 25
#define LOOPS 10
void InitializeArray(int *numArray, const int arrayLength);
void ShuffleArray(int *numArray, const int arrayLength);
void printArray(int *numArray, const int arrayLength);
int main()
{
//informational message
printf("This Program creates permutations of an array of numbers/n");
//declare numArray with ARRAY_SIZE values as int
int numArray[ARRAY_SIZE];
//seed the random number generator
srandom(SEED);
int count;
int arrayLength= sizeof(numArray); //sizeof(numArray)/sizeof(numArray[0]);
//LOOPED 10 times, use the LOOPS variable
for (count = 0; count < LOOPS; count++){
//call InitializeArray
InitializeArray(numArray,arrayLength);
//call printArray Function to print out normal Array
printf("Initial Array: \n");
printArray(numArray,arrayLength);
//call ShuffleArray to create permutation
ShuffleArray(numArray,arrayLength);
//call printArray Function to print out the shuffled list.
printf("Shuffled Array: \n");
printArray(numArray,arrayLength);
}
return 0;
}
void InitializeArray(int *numArray, const int arrayLength)
{
//adds the values in ARRAY_SIZE to the numArray
int i;
for (i=0; i< ARRAY_SIZE;i++)
numArray=random()%(ARRAY_SIZE+1);
}
void ShuffleArray(int *numArray, const int arrayLength)
{
int i,j,temp;
for(j = 1; j < arrayLength; j++){
temp=numArray[j];
i=j-1;
while((i >= 0) && (numArray[i] > temp)){
numArray[i+1]=numArray[i];
i--;
}
numArray[i+1]=temp;
}
}
void printArray(int *numArray, const int arrayLength)
{
int i; // initialize counter
for(i = 0; i < arrayLength; i++)
{
printf("%d \n",numArray[i]);
}
}
由于某种原因,我的随机数生成器不断给我错误。
numArray=random()%(ARRAY_SIZE+1);
给我一个错误。它说有我不明白的铸造错误。谁能帮我修复随机数生成器。
【问题讨论】:
-
应该是
numArray[i]=random()%(ARRAY_SIZE+1);? -
for (i=0; i< arrayLength;i++) *numArray++=random()%(ARRAY_SIZE+1); -
除上述之外,您计算
arrayLength的方式将超出范围。另外,既然是常数ARRAY_SIZE,为什么还要计算呢?
标签: c arrays random permutation random-seed