C 二维矩阵中右移动部件

C 二维矩阵中右移动部件,c,arrays,matrix,C,Arrays,Matrix,我想得到你的帮助,了解并完成我的计划 这就是我要做的: “您必须练习以下程序: 首先.一个吸收的二维整数arr[M][N].M-行数N-列数。(从用户处收到矩阵大小) 程序使用辅助功能“shift”移动数值​​矩阵的右一位,如图所示(输入2而不是1,输入3而不是2,输入4而不是3,…输入20而不是19,输入第一位20)。 Shift必须编写一个函数,并在示例矩阵循环中调用她三次……” 范例 我的问题是: 我不知道如何做矩阵二维整数数组,那里的大小是由用户输入的。我只知道行和列的大小 我的功能与

我想得到你的帮助,了解并完成我的计划

这就是我要做的:

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

范例

我的问题是:

  • 我不知道如何做矩阵二维整数数组,那里的大小是由用户输入的。我只知道行和列的大小
  • 我的功能与实际情况不符,因此我希望获得帮助来完成我的功能
  • 我的输出:

    我的代码:

    #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");
        }
    } 
    
    #包括“stdio.h”
    #包括“conio.h”
    #包括“stdlib.h”
    #定义M4
    #定义n5
    无效移位(整数arr[M][N],整数长度);
    void main()
    {
    国际航空公司[M][N];
    int i,j,长度;
    printf(“输入%d行\n”,M);
    
    对于(i=0;i我将提示您如何移动元素。逻辑是在迭代时在行中的当前元素和最后一个元素之间交换元素。我将向您展示一个1D数组的工作示例

    #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;
    }
    
    #包括
    #定义数组大小为5
    int main()
    {
    inta[ARRAY_SIZE]={11,22,33,44,55};
    int i;
    for(i=0;i
    将所有列向右移动。
    #包括
    #包括
    #包括
    void shift_columns_right(int M[100][100],int行,int列){
    int tmp_lastcol;
    int j,k;
    对于(j=0;j 0;k--){
    M[j][k]=M[j][k-1];
    }
    M[j][0]=tmp_lastcol;
    }
    }
    内部主(空){
    int B[100][100]={
    {1,2,3,4}, 
    {5,6,7,8}, 
    {9,10,11,12}, 
    {13,14,15,16}, 
    {17,18,19,20}, 
    };
    向右移位(B,5,4);
    返回0;
    }
    
    这些图像包含太多的空白…谢谢你的提示。但我的问题是如何设置2d数组。我想读一篇文章或其他东西来了解这个主题。只需谷歌如何动态分配2d数组,你就会收到大量的结果。关于2d数组的交换,你所要做的就是再添加一个循环遍历我的逻辑中的其他行。嘿,Masesh!我遇到了一个问题,我想得到你的帮助
    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;
    
    }