有n行m列个整数,使每一行其前面各数顺序向后移k个位置,每一行最后k个数变成最前面的k个数。要求用指向一维数组的指针变量完成。n、m和k均小于100
【输入说明】
输入包括n+1行数据,第一行三个数字分别表示n,m和k,接下来有n行,每行m个数据。
【输出说明】
每个数字后有一个空格
【输入样例】
2 10 3
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
【输出样例】
8 9 0 1 2 3 4 5 6 7
8 9 0 1 2 3 4 5 6 7
#include <stdio.h>
#define M 100
//移动函数。指针p指向n行m列的二维数组
void Move(int (*p)[M],int n,int m,int k)
{
int i,j,c,b;
int x[100][100];
int y[100][100];
for (i=0;i<n;i++)
for (j=0;j<(m-k);j++)
x[i][j]=*(*(p+i)+j);//将需要后移的存储
for (i=0;i<n;i++)
for (c=0,j=(m-k);c<k,j<m;c++,j++)
y[i][c]=*(*(p+i)+j);//将需要前移的存储
for (i=0;i<n;i++)
for (j=0;j<k;j++)
*(*(p+i)+j)=y[i][j];//将前移的移过去
for (i=0;i<n;i++)
for (j=k,b=0;j<n,b<(m-k);j++,b++)
*(*(p+i)+j)=x[i][j];//将后移的补上
for (i=0;i<n;i++)
{
for (j=0;j<m;j++)
{
printf ("%d ",*(*(p+i)+j));
}
printf ("\n");
}
}
int main()
{
int n,m,k,i,j;
int (*q)[100];
scanf ("%d %d %d",&n,&m,&k);
int a[100][100];
q=a;
for (i=0;i<n;i++)
for (j=0;j<m;j++)
scanf ("%d",q);//*(*(q+i)+j));
Move (q,n,m,k);
return(0);
}
为什么我的代码输出的全是0呢?
能不能把代码格式设置一下,用markdown的代码块。不然会出现吃字符的问题,里面貌似少了几个字符。
请问在哪里设置呢?刚使用找不到啊
@wedy1234:
用符号```把代码括起来
@计算机知识杂谈: 可以了,感谢