当前位置: 首页 > 知识库问答 >
问题:

动态矩阵分配程序

傅振濂
2023-03-14

我正在学习C。我有一个程序,可以动态创建和填充两个矩阵X和Y,使用随机数使用rand(),如下所示

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

void main(){

 int i, j, k, m, n;
 double **x;
 double **y;
 printf("Enter a number as the size of two square matrices\n");
 scanf("%d", &m);
 x = (double**)malloc(m * sizeof(double));  
 y = (double**)malloc(m * sizeof(double));
 /* initialize random seed: */
 srand(time(NULL));
 for(i = 0; i < m; i++) {
    x[i] = (double*)malloc(m * sizeof(double));
    y[i] = (double*)malloc(m * sizeof(double));
    for(i = 0; i < m; i++) {
        for(j = 0; j < m; j++) {
            x[i][j] = rand();
            y[i][j] = rand();
        }
        printf("\n");
    }
  }
  printf("\n\n");
}

当我运行这个程序并给出2作为我的矩阵的大小时,我看到“分离故障”是错误。请注意,我们的想法是用双精度类型的随机元素填充两个矩阵。如果上面的代码是正确的,请告诉我。

更正:编辑1

 x = (double**)malloc(m * sizeof(double*)); 
 y = (double**)malloc(m * sizeof(double*));
 /* initialize random seed: */
 srand(time(NULL));
 for(i = 0; i < m; i++) {
    x[i] = (double*)malloc(m * sizeof(double));
    y[i] = (double*)malloc(m * sizeof(double));

    for(j = 0; j < m; j++) {
        x[i][j] = rand();
        y[i][j] = rand();
    }
    printf("\n");

  }
  printf("\n\n");
}

以上功能现在正常工作。需要解释x=(double**)malloc(m*sizeof(double*));并且x[i]=(double*)malloc(m*sizeof(double));

为什么*用于x=(双**)malloc(m*sizeof(双*))中的sizeof(双*);

编辑2

void main(){

 int i, j, k, m, n; 
 printf("Enter a number as the size of two square matrices\n");
 scanf("%d", &m);

 double (*x)[m] = malloc(sizeof(double[m][m]));
 double (*y)[m] = malloc(sizeof(double[m][m]));
 /* initialize random seed: */
 srand(time(NULL));
 for(i = 0; i < m; i++) {
    for(j = 0; j < m; j++) {
        x[i][j] = rand();
        y[i][j] = rand();
    }
    printf("\n");

  }
  printf("\n\n");
}

根据Jens Gustedt矩阵分配更改…我已删除

 double **x;
 double **y;
 x = (double**)malloc(m * sizeof(double*)); 
 y = (double**)malloc(m * sizeof(double*));
 x[i] = (double*)malloc(m * sizeof(double));
 y[i] = (double*)malloc(m * sizeof(double));

共有1个答案

金珂
2023-03-14

这些只是假的矩阵,这项技术属于博物馆。在现代C语言中,从C99开始,只需将2D矩阵分配为double(*matrix)[m]=malloc(sizeof(double[m][m]) 。因此,只需对整个矩阵调用一次malloc,就可以将其全部存储在连续内存中
–Jens Gustedt

 类似资料:
  • 是否可以将范围分配给矩阵。如果将以下零矩阵视为绘图的“网格”: 你能把这个矩阵当作一个网格,这样每个x轴的零点都可以看作一个范围吗?例如,是一个范围是一个范围等。 范围思想也可以应用于列吗? 这样做的目的是,我可以读取单元阵列数据,我已经组织到零矩阵的范围,以产生一个二维直方图。

  • 我在查看一些代码时发现了以下内容: 有什么区别呢?顺便说一句:我对矩阵很陌生

  • 我有一个家庭作业,要求我用用户输入生成一个n×n矩阵。我试过几种解决办法,但似乎都不管用。我想对你们中的许多人来说,这是一个相对简单的任务。 这是分配文本:编写一个方法,使用以下签名显示一个n×n矩阵:public static void printMatrix(int n)每个元素都是0或1,这是随机生成的。编写一个测试程序,提示用户输入n,并显示n×n矩阵。 我最近的尝试如下(显然我还没有调用

  • 请,我想找到每行只有一个值的最大和。我已经用暴力做出了决议,它是O(N^5)。现在我想找到一种使用动态规划的方法或另一种降低复杂性的方法。 例如: 矩阵: 5套解决方案: > 100 90 70 60 50 = 370 100 90 69 60 50 = 369 100 90 70 60 45 = 365 100 90 65 60 50 = 365 100 90 69 60 45 = 364 总数

  • 给定一个矩阵。您需要打印矩形中左上角和右下角的所有数字的总和。 我使用自顶向下的动态规划方法来解决这个问题。查看我的代码。 输入 输出 预期产出 但当输入查询时,这会抛出非常随机的数字。我没有得到我在这里缺少的东西。有人能帮忙吗? 谢谢✌️

  • 着色器语言中通过关键字mat2、mat3、mat4分别声明一个2x2矩阵、3x3矩阵、4x4矩阵,通过内置函数mat2()、mat3()、mat4()分别创建一个2x2矩阵、3x3矩阵、4x4矩阵。 关键字 数据类型 mat2 2x2矩阵,4个元素 mat3 3x3矩阵,9个元素 mat4 4x4矩阵,16个元素 声明变量 关键子mat4声明一个4x4矩阵 mat4 matrix4; 构造函数赋