方法一:需要定义两个数组
#include <stdio.h>
//顺序移动数组
int main()
{
int a[10]={0,1,2,3,4,5,6,7,8,9};
int b[10];
int i,n;//n代表移动的位数
printf("请输入移动的位数:");
scanf("%d",&n);
printf("移动前:\n");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
for(i=0;i<10;i++)//直接计算移动n次后,每个元素最终出现的位置,写入b数组
{
b[(i+n)%10]=a[i];
}
printf("\n移动后:\n");
for(i=0;i<10;i++)
{
printf("%d ",b[i]);
}
return 0;
}
方法二:定义一个数组,一个数组内部移动,无需借助外部数组变量
#include <stdio.h>
int main()
{
int a[10]={0,1,2,3,4,5,6,7,8,9};
int i,n,m;//n代表移动的位数,m代表中间变量
printf("请输入移动的位数:");
scanf("%d",&n);
printf("移动前:\n");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
for(int j=0;j<n;j++)//外层循环表示向后移动的次数,移动几次就循环几次
{
m=a[9];//先将最后一位元素赋值给中间变量,目的是空出最后元素的位置
for(i=9;i>0;i--)//依次将前一个元素赋值到后一个元素的位置
{
a[i]=a[i-1];
}
a[0]=m;//全部移动一遍后,第一个元素的位置空出来了,再将中间变量保存的元素写入,这就算整个数组向后移动一位
}
printf("\n移动后:\n");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
return 0;
}