如何将第一列元素复制到c程序中矩阵的第二列

时间:2016-06-11 13:36:21

标签: c arrays

如何将第1列元素复制到c程序中矩阵的第2列

输入

2 3 4
5 6 7
7 8 9

输出

2 2 3 3 4 4
5 5 6 6 7 7
7 7 8 8 9 9

2 个答案:

答案 0 :(得分:0)

如果数组是预定义的,那么代码可以采用以下方式

#include <stdio.h>

#define M   3
#define N   3

int main( void ) 
{
    int a[M][N] =
    {
        { 2, 3, 4 },
        { 5, 6, 7 },
        { 7, 8, 9 }
    };

    int b[M][2*N];

    for ( size_t m = 0; m < M; m++ )
    {
        for ( size_t n = 0; n < N; n++ ) printf( "%d ", a[m][n] );
        printf( "\n" );
    }
    printf( "\n" );

    for ( size_t n = 0, i = 0; n < N; n++ )
    {
        for ( size_t j = 0; j < 2; j++, i++ )
        {
            for ( size_t m = 0; m < M; m++ ) b[m][i] = a[m][n]; 
        }

    }

    for ( size_t m = 0; m < M; m++ )
    {
        for ( size_t n = 0; n < 2 * N; n++ ) printf( "%d ", b[m][n] );
        printf( "\n" );
    }
    printf( "\n" );

    return 0;
}

程序输出

2 3 4 
5 6 7 
7 8 9 

2 2 3 3 4 4 
5 5 6 6 7 7 
7 7 8 8 9 9 

那就是你必须复制列&#34;手动&#34;使用循环。

否则,您需要动态分配第二个数组或使用可变长度数组。

答案 1 :(得分:0)

如果我理解你的问题,你可以尝试:

#include<stdio.h>
#define SIZE 3

int main(){
    int inMat[SIZE][SIZE];
    int outMat[SIZE][SIZE*2];

    int i, j, k;

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

    for(i=0; i<SIZE; i++){
        for(j=0, k =0; j<SIZE*2; k++, j++){
            outMat[i][j] = inMat[i][k];
            outMat[i][++j] = inMat[i][k];
        }
    }

    printf("Input Matrix:\n");
    for(i=0; i<SIZE; i++){
        for(j=0; j<SIZE; j++) {
            printf("%d ", inMat[i][j]);
        }
        printf("\n");
    }

    printf("Output Matrix:\n");
    for(i=0; i<SIZE; i++){
        for(j=0; j<SIZE*2; j++) {
            printf("%d ", outMat[i][j]);
        }
        printf("\n");
    }



    return 0;
}

输出:

2 3 4
5 6 7
7 8 9
Input Matrix:
2 3 4 
5 6 7 
7 8 9 
Output Matrix:
2 2 3 3 4 4 
5 5 6 6 7 7 
7 7 8 8 9 9