0

我想得到你的帮助来理解和完成我的程序。

这是我必须做的:

“您必须执行以下程序:
首先。一个吸收二维整数 arr [M] [N]。M - 行数 N - 列数。(从用户那里收到矩阵大小)
二。程序使用辅助函数“shift”将矩阵的值右移一位,如图(输入2代替1,输入3代替2,输入4代替3,... 20代替19,第1位20 ).
Shift 必须编写一个函数并在示例矩阵循环中调用她 3 次.."

例子 在此处输入图像描述

我的问题是:

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

我的输出:

我的处决

我的代码:

#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");
    }
} 

编辑:调整图片大小

4

2 回答 2

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;

}
于 2016-11-29T08:34:49.660 回答
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. 希望能帮助到你 !

于 2013-09-13T14:16:12.053 回答