串联2矩阵 [英] concatenate 2 matrices

查看:99
本文介绍了串联2矩阵的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个矩阵动态分配,我想创造一个又一个这是第一个矩阵但旁边另一个副本。例如,我有矩阵:


11
22

我的新的矩阵将是:


1 1 1 1
2 2 2 2

我怎样才能将它们连接起来?这是我的code在C:

 #包括LT&;&stdio.h中GT;
#包括LT&;&CONIO.H GT;
#包括LT&;&stdlib.h中GT;INT ** create_matrix(INT行,诠释山口)
{
    INT **矩阵=的malloc(sizeof的为(int *)*行);
    INT I;
    对于(i = 0; I<排;我++)
    {
        矩阵[I] =的malloc(sizeof的(INT)* COL);
    }
    返回矩阵;
}无效matrix_input(INT **矩阵,诠释行,诠释山口)
{
    INT I,J;
    输出(输入矩阵的元素:\\ n);
    对于(i = 0; I<排;我++)
    {        为(J = 0; J<西; J ++)
        {
            scanf函数(%d个,&安培;矩阵[I] [J]);
        }
    }
}INT ** extend_matrix(INT **矩阵,诠释行,诠释山口)
{
    INT K,J;
    INT I;
    INT ** extend_matrix =的malloc(sizeof的为(int *)*行);
    对于(K = 0; K<排排+; k ++)
    {
        extend_matrix [K] =的malloc(sizeof的(INT)* COL);
    }
    extend_matrix =矩阵;
    extend_matrix =(INT **)的realloc(extend_matrix,(行+行)* sizeof的为(int *));
    extend_matrix [J] =矩阵[J]。
    对于(i = 0; I<排;我++)
    {
        extend_matrix [K] =矩阵[I];
    }
}无效print_matrix(INT **矩阵,诠释行,诠释山口)
{
    INT I,J;
    对于(i = 0; I<排;我++)
    {
        为(J = 0; J<西; J ++)
        {
            的printf(%d个,矩阵[I] [J]);
        }
        的printf(\\ n);
    }}无效print_extend_matrix(INT ** extend_matrix,诠释行,诠释山口)
{
    INT K,J;
    对于(K = 0; K<排排+; k ++)
    {
        为(J = 0; J<西; J ++)
        {
            的printf(%d个,extend_matrix [K] [J]);
        }
        的printf(\\ n);
    }
}INT主要(无效)
{
    INT **矩阵;
    INT ** extend_matrix;
    INT行,列;
    输出(输入COLS的行数:);
    scanf函数(%I%I,&安培;行&安培; COL);
    矩阵= create_matrix(行,列);
    matrix_input(矩阵,行,列);
    print_matrix(矩阵,行,列);
    print_extend_matrix(extend_matrix,行,列);
    残培();
    返回0;
}


解决方案

虽然@NPE建议你一个更好的办法。如果你想在分配内存extend_matrix()

错误在code(阅读评论的)

  INT ** extend_matrix =的malloc(sizeof的为(int *)*行);
                                           ^在行
对于(K = 0; K<排排+; k ++)
                    ^其中,作为环是排排+
{
    extend_matrix [K] =的malloc(sizeof的(INT)* COL); //所以这导致错误,
                                                  //段故障
}

第二,你的观念是错误的复制存储:

  extend_matrix =矩阵;

在这行要分配矩阵 extend_matrix 的错误。你需要在这里循环从矩阵[] [] 每个元素复制到 extend_matrix [] [] 。 (但首先纠正你的内存分配code 的)

I have a matrix dynamically allocated and I want to create another one which is the first matrix but with another copy beside. for example,I have the matrix:

11
22

My new matrix will be:

1 1 1 1
2 2 2 2

How can I concatenate them? This is my code in C:

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

int **create_matrix(int row, int col)
{
    int **matrix = malloc(sizeof (int*)*row);
    int i;
    for (i = 0; i < row; i++)
    {
        matrix[i] = malloc(sizeof (int)*col);
    }
    return matrix;
}

void matrix_input(int **matrix, int row, int col)
{
    int i, j;
    printf("enter the elements of the matrix:\n");
    for (i = 0; i < row; i++)
    {

        for (j = 0; j < col; j++)
        {
            scanf("%d", &matrix[i][j]);
        }
    }
}

int **extend_matrix(int **matrix, int row, int col)
{
    int k, j;
    int i;
    int **extend_matrix = malloc(sizeof (int*)*row);
    for (k = 0; k < row + row; k++)
    {
        extend_matrix[k] = malloc(sizeof (int)*col);
    }
    extend_matrix = matrix;
    extend_matrix = (int**) realloc(extend_matrix, (row + row) * sizeof (int*));
    extend_matrix[j] = matrix[j];
    for (i = 0; i < row; i++)
    {
        extend_matrix[k] = matrix[i];
    }
}

void print_matrix(int **matrix, int row, int col)
{
    int i, j;
    for (i = 0; i < row; i++)
    {
        for (j = 0; j < col; j++)
        {
            printf(" %d ", matrix[i][j]);
        }
        printf("\n");
    }

}

void print_extend_matrix(int **extend_matrix, int row, int col)
{
    int k, j;
    for (k = 0; k < row + row; k++)
    {
        for (j = 0; j < col; j++)
        {
            printf("%d", extend_matrix[k][j]);
        }
        printf("\n");
    }
}

int main(void)
{
    int **matrix;
    int **extend_matrix;
    int row, col;
    printf("enter the number of rows of cols:");
    scanf("%i%i", &row, &col);
    matrix = create_matrix(row, col);
    matrix_input(matrix, row, col);
    print_matrix(matrix, row, col);
    print_extend_matrix(extend_matrix, row, col);
    getch();
    return 0;
} 

解决方案

Although @NPE suggested to you a better way. If you want to allocate memory in extend_matrix()

error in your code (read comments)

int **extend_matrix = malloc(sizeof (int*)*row);
                                           ^ on row
for (k = 0; k < row + row; k++)            
                    ^ where as loop is for row + row
{
    extend_matrix[k] = malloc(sizeof (int)*col);  // So this cause an error,
                                                  // segment-fault
}

second, your concept is wrong to copy memory:

 extend_matrix = matrix;  

at this line you are assigning matrix to extend_matrix its wrong. you need loop here to copy each elements from matrix[][] to extend_matrix[][]. (but rectify your memory allocation code first)

这篇关于串联2矩阵的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆