0

0 から 2 の間の乱数を生成する関数があり、ポインタを使用したいのですが、とにかく実行できませんでした。最初に乱数を生成し、次に多次元配列を出力して、生成されたものを確認したいだけです(ポインターを使用して)配列に乱数を割り当ててから、ポインターを使用してそれらを再度印刷します

int **RandomizedMatrix; //integer multidimensional array        
int ***AdressOfMatrix =  &RandomizedMatrix; //assigning the adress of matrix to an integer pointer

void RandomizedMatrixGenerator(int LineNumber,int ColumnNumber,int ***AdressOfMatrix)
{            
    int i,j;
    for (i=0; i<LineNumber*ColumnNumber; i++)
    {
        **AdressOfMatrix = rand()%2;        
    }
    for (i=0; i<LineNumber; i++)
    {
        for (j=0; j<ColumnNumber; j++) 
        {                    
           printf("%d",***(AdressOfMatrix+i)+j);
        }
        printf("\n");
    }
}
4

2 に答える 2

0

私が理解していることが正しければ、2次元配列を1と0で埋めて、それを行うことができます

    void randmtrgen(int row,int column,int **mtr){
    int i,j;
    for (i=0;i<row;i++){
        for (j=0;j<column;j++){
            mtr[row][column]=rand()%1+1;
            }
        }
    }

それはあなたが望むようにあなたの行列を埋めます。角括弧が苦手な場合は逆参照演算子を使用しないことをお勧めします。逆参照演算子を使用したい場合は、その行を使用できます

    *(*(mtr+row)+column)=rand()%1+1;
于 2012-10-24T19:22:35.380 に答える
0

for()OK、乱数を割り当てるには 2 つのループが必要です。

for (i=0; i<LineNumber*ColumnNumber; i++)
{
     **AdressOfMatrix = rand()%2;
} 

これが行うことは、行列の最初の要素に数値を割り当てるLineNumber*ColumnNumber回数だけです。このようにしたい場合は、割り当て中に行と列をインクリメントする必要があります。

また、シードしていないため、「乱数」はランダムにはなりません。やりたいことの例を次に示します。

  srand((unsigned) time(NULL));  // Seed the random number generator

  for(row = 0; row<LineNumber; row++){
     for(col = 0; col<ColumnNumber; col++){
        ran = rand()%100;           // Generate a randome numer 1-99
        *(*(matrix+row)+col) = ran; // assign a random number to the element
     }
  }

  for(row = 0; row<LineNumber; row++) {
      for(col = 0; col<ColumnNumber; col++){
         printf("[%d]", *(*(matrix+row)+col));  //Display the random number
      }
      printf("\n");
  }

したがって、4x3 行列が与えられると、次のような出力が得られます。

[99][33][38]
[59][2][28]
[50][39][2]
[85][45][99]
于 2012-10-24T19:11:41.483 に答える