【问题标题】:2d array rand function multiplication二维数组 rand 函数乘法
【发布时间】:2023-03-06 21:00:01
【问题描述】:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

#define ROWS 2
#define COLS 3
#define ROW 3
#define COL 4
int main(void) 
{

    int e, f;

    srand((unsigned)time(NULL));

    int A[ROWS][COLS];

    int a; int b;
    for (a = 0; a < ROWS; ++a)
    {
        for (b = 0; b < COLS; ++b)
        {
            printf("%d ", A[a][b] = rand() % 9 + 1);

        }
        printf("\n");
    }

    printf("-------------------------\n");

    int B[ROW][COL];

    int c; int d;
    for (c = 0; c < ROW; ++c)
    {
        for (d = 0; d < COL; ++d)
        {
            printf("%d ", B[c][d] = rand() % 9 + 1);
        }

        printf("\n");
   }

   return 0;
}

此代码使用 rand 函数。制作二维数组。 [int A,int B]

我想在二维数组中使用随机值进行乘法运算。

我想制作另一个二维数组。和 int A * int B 前任) int C= int A*int B (二维数组)

【问题讨论】:

  • 对不起.. 我想要 int A(2d array) * int B(2d array)
  • 您是在问如何执行二维矩阵乘法? (即 AxB ?)
  • 是的。对不起,沟通不好
  • 阅读我上一条评论中的链接。它通过示例说明了矩阵乘法。只需使用那里的算法来编写您的 C 代码。尽管有 these.,但没有用于矩阵乘法的标准 C 库

标签: c arrays


【解决方案1】:

你可以在网上找到大量用于矩阵乘法的 C 示例,所以我的第一个建议是先做一些探索!

无论如何,一个简单的解决方案是:

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

#define ROWS 2
#define COLS 3
#define ROW 3
#define COL 4
int main(void) 
{
    int A[ROWS][COLS];
    int B[ROW][COL];
    int C[ROWS][COL];
    int i, j, k;

    srand((unsigned)time(NULL));

    for (i = 0; i < ROWS; ++i)
    {
        for (j = 0; j < COLS; ++j)
        {
            printf("%d ", A[i][j] = rand() % 9 + 1);
        }
        printf("\n");
    }

    printf("-------------------------\n");

    for (i = 0; i < ROW; ++i)
    {
        for (j = 0; j < COL; ++j)
        {
            printf("%d ", B[i][j] = rand() % 9 + 1);
        }
        printf("\n");
    }

    printf("-------------------------\n");

    if (COLS != ROW) {
        printf("Unable to multiple the 2 matrixes!\n");
        return -1;
    }

    for (i = 0; i < ROWS; i++) {
        for (j = 0; j < COL; j++) {
            int tmp = 0;
            for (k = 0; k < COLS; k++) {
                tmp += A[i][k] * B[k][j];
            }
            printf("%d ", C[i][j] = tmp);
        }
        printf("\n");
    }

    return 0;
}

当然需要检查第一个矩阵的列数是否与第二个矩阵的行数匹配。

我还简化了您使用的一些变量,因为它们不是必需的。

【讨论】:

    【解决方案2】:

    来自 this page describing matrix multiplicationthis 说明了 2D 矩阵:(您需要推断矩阵维度的其他顺序)

    在 C 代码中,矩阵乘法的直接实现如下:(假设存在 AB,并且填充类似于您的代码示例中的那些,但限制为 2X2 矩阵顺序。)

    int C[2][2];
    
    C[0][0] = A[0][0]*B[0][0]+
              A[0][1]*B[1][0]
    C[0][1] = A[0][0]*B[0][1]+
              A[0][1]*B[1][1]
    C[1][0] = A[1][0]*B[0][0]+
              A[1][1]*B[1][0]
    C[1][1] = A[1][0]*B[0][1]+
              A[1][1]*B[1][1]  
    

    此实现不包含循环,也不是针对一般情况的解决方案。但是,AB 的索引以这种方式排列时会显示具有启发性的模式,并且可能有助于了解为 2D 矩阵乘法的通用解决方案创建步骤的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-15
      • 1970-01-01
      • 2014-02-28
      • 2022-01-24
      相关资源
      最近更新 更多