将矩阵的列向右移动b个单位

问题描述:

……原始矩阵……
1 2 3
4 5 6
7 8 9
请输入右移的列数:1

……向右移1列的矩阵……
0 1 2
0 4 5
0 7 8

思路
矩阵的列的转移要从所开始列最右端开始移动 ,右端的一列先转移到最大的移动列位置保存,就不会被覆盖 。其余列补零即可。
代码描述

#define
void fun(int a[][N],int b){ //将矩阵的列向右移动b个单位
int i,j;
for(i=0;i<N;i++){
for(j=N-1-b;j>=0;j--){ //因为矩阵的列的转移要从所开始列最右端开始移动
a[i][j+b] = a[i][j]; //那么将最右端的一列先转移到最大的移动列位置保存,就不会被覆盖
}
for(j=0;j<b;j++){
a[i][j] = 0; //然后将矩阵左面的b列各元素赋值为0
}
}
}

全部代码展示

#include <stdio.h>
#include <stdlib.h>
#define
void fun(int a[][N],int b){ //将矩阵的列向右移动b个单位
int i,j;
for(i=0;i<N;i++){
for(j=N-1-b;j>=0;j--){ //因为矩阵的列的转移要从所开始列最右端开始移动
a[i][j+b] = a[i][j]; //那么将最右端的一列先转移到最大的移动列位置保存,就不会被覆盖
}
for(j=0;j<b;j++){
a[i][j] = 0; //然后将矩阵左面的b列各元素赋值为0
}
}
}
int main() {
int array[][N]={1,2,3,4,5,6,7,8,9};
int i,j,k;
printf("\n……原始矩阵……\n");
for(i=0;i<N;i++){
for(j=0;j<N;j++){
printf("%d\t",array[i][j]);
}
printf("\n");
}
printf("请输入右移的位数:");
scanf("%d",&k);
fun(array,k);
printf("\n……向右移%d后的矩阵……\n",k);

for(i=0;i<N;i++){
for(j=0;j<N;j++){
printf("%d\t",array[i][j]);
}
printf("\n");
}
return 0;
}