2016-02-22 48 views
0

这里是使用rand()函数的随机数矩阵乘法的代码。程序的输出给出非常大的值作为矩阵元素。矩阵使用rand()函数随机数的乘法

为什么不生成任何小的随机数?

这是输出当N = 3

输入N的值:3

最终矩阵:

259448206-96933429-936226671 
-409898077185182340844598571 
-1916994436-653447116470937338 

程序:

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

int main() 
{ 
    time_t t; 
    int **ptr1, **ptr2, **ptr3; 
    int N, col1, row2, col2; 
    srand ((unsigned) time (&t)); 
    int i, j, k; 
    printf ("\nEnter the value of N : "); 
    scanf ("%d", &N); 
    ptr1 = (int **) malloc (sizeof (int *) * N); 
    ptr2 = (int **) malloc (sizeof (int *) * N); 
    ptr3 = (int **) malloc (sizeof (int *) * N); 

    for (i = 0; i < N; i++) 
     ptr1[i] = (int *) malloc (sizeof (int) * N); 
    for (i = 0; i < N; i++) 
     ptr2[i] = (int *) malloc (sizeof (int) * N); 
    for (i = 0; i < N; i++) 
     ptr3[i] = (int *) malloc (sizeof (int) * N); 

    for (i = 0; i < N; i++) { 
     for (j = 0; j < N; j++) { 
      ptr1[i][j] = rand(); 
     } 
    } 

    for (i = 0; i < N; i++) { 
     for (j = 0; j < N; j++) { 
      ptr2[i][j] = rand(); 
     } 
    } 

    for (i = 0; i < N; i++) { 
     for (j = 0; j < N; j++) { 
      ptr3[i][j] = 0; 
      for (k = 0; k < N; k++) 
       ptr3[i][j] = ptr3[i][j] + ptr1[i][k] * ptr2[k][j]; 
     } 
    } 

    /* Printing the contents of third matrix. */ 

    printf ("\n\nFinal Matrix :"); 
    for (i = 0; i < N; i++) { 
     printf ("\n\t"); 
     for (j = 0; j < N; j++) 
      printf ("%4d", ptr3[i][j]); 
    } 

    printf ("\n"); 
    return (0); 
} 
+2

你有没有检查'RAND_MAX'有多大? – EOF

+0

使用模运算符得到较小的值(例如rand()%100)。虽然这种方式稍微不均匀分布,但这不应该成为一个问题。 – Ctx

+0

'ptr3 [i] [j] + ptr1 [i] [k] * ptr2 [k] [j]'很容易溢出,'RAND_MAX'可能很大。使用一些分隔符,如空格'printf(“%4d”,ptr3 [i] [j]);' – chux

回答

0

使用模运算符来获得更小的值(例如rand()%100) 。虽然这种方式稍微不均匀分布,但这不应该成为一个问题。 - Ctx