我想帮助您了解并完成我的计划。
这就是我要做的事情:
“你必须执行以下程序:
第一。吸收二维整数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");
}
}
编辑:调整图片大小
答案 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
。希望它有所帮助!