在二维矩阵中运动零件

时间:2013-09-13 13:58:55

标签: c arrays matrix

我想帮助您了解并完成我的计划。

这就是我要做的事情:

  

“你必须执行以下程序:
  第一。吸收二维整数arr [M] [N]。 M - 行数N - 列数。 (从用户收到矩阵大小)
  二。程序使用辅助功能“shift”将矩阵的值移动到右边的一个位置,如图所示(2输入而不是1,3而不是2,4替代3,... 20而不是19,第一名20)。
  Shift必须编写一个函数并在样本矩阵循环中调用她三次。“

实施例 enter image description here

我的问题是:

  1. 我不知道如何处理用户输入大小的矩阵二维整数数组。我只知道DEFINE SIZE的行和cols
  2. 我的功能并不接近真正的交易,所以我希望得到帮助来完成我的功能。
  3. 我的输出:

    my execution

    我的代码:

    #include "stdio.h"
    #include "conio.h"
    #include "stdlib.h"
    #define M 4
    #define N 5
    void shift (int arr[M][N], int length); 
    
    void main()
    {
        int arr[M][N];
        int i,j,length;
    
        printf("Enter %d rows \n",M);
        for (i=0 ; i<M ; i++ )
        {
            printf("Enter %d numbers:\n",N);
            for(j=0 ; j<N ; j++ )
            { 
                scanf("%d" , &arr[i][j] );
            }
        length=N+M;
        }
        shift (arr,length);
        system("pause");
        return ;
    }
    
    void shift (int arr[M][N], int length) 
    {    
        int i,j,temp;
        temp=arr[0][0];
        for(i=0; i<M; i++)
        {
                 for(j=0; j<N-1 ; j++)
                 {
                     printf("%d ",arr[i][j]);
    
                 }
                 arr[i][j]=temp;
                 printf("\n");
        }
    } 
    

    编辑:调整图片大小

2 个答案:

答案 0 :(得分:1)

Shifts all columns to the right. 

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


void shift_columns_right(int M[100][100], int rows, int cols) {

    int tmp_lastcol;
    int j, k;

    for (j = 0; j<rows; j++){
        tmp_lastcol = M[j][cols-1];
        for (k = cols-1;  k > 0; k-- ){
            M[j][k] = M[j][k-1];
        }
        M[j][0] = tmp_lastcol;
    }

}
int main(void){

    int B[100] [100] = { 
                   {1,2,3,4}, 
                   {5,6,7,8}, 
                   {9,10,11,12}, 
                   {13,14,15,16}, 
                   {17,18,19,20}, 
    };

    shift_columns_right(B,5,4);

    return 0;

}

答案 1 :(得分:0)

我会提示如何移动元素。逻辑是在迭代时交换行中当前元素和最后一个元素之间的元素。我将向您展示一维阵列的工作示例。

#include <stdio.h>

#define ARRAY_SIZE 5

int main()
{
    int a[ARRAY_SIZE] = {11,22,33,44,55};
    int i;

    for (i=0; i<ARRAY_SIZE; ++i)
    {
        int temp = a[i];
        a[i] = a[ARRAY_SIZE-1];
        a[ARRAY_SIZE-1] = temp;
    }

    for(i=0; i<ARRAY_SIZE; ++i)
    {
        printf("%d\t",a[i]);
    }

    return 0;
}

输出:55 11 22 33 44

要为数组动态分配内存,请使用malloc。希望它有所帮助!