#include
int main()
{
void move(int[20], int, int);
int number[20], n, m, i;
printf("how many numbers?"); //问共有多少个数
scanf("%d", &n);
printf("input %d numbers:\n", n);
for (i = 0; i < n; i++)
scanf("%d", &number[i]); //输入n 个数
printf("how many place you want move?"); //问后移多少个位置
scanf("%d", &m);
move(number, n, m); //调用move 函数
printf("Now,they are:\n");
for (i = 0; i < n; i++)
printf("%d ", number[i]);
printf("\n");
return 0;
}
//循环后移一次的函数
void move(int array[20], int n, int m)
{
int *p, array_end;
array_end = *(array + n - 1);
for (p = array + n - 1; p > array; p--)
*p = *(p - 1);
*array = array_end;
m--;
if (m > 0) //递归调用,当循环次数m减至为0时,停止调用
move(array, n, m);
}
丢到编辑器打断点调试就懂了
//循环后移一次的函数
void move(int array[20], int n, int m)
{
int *p, array_end;
array_end = *(array + n - 1); 暂存数组最后一个元素
for (p = array + n - 1; p > array; p--) 元素挨个向后移动1位
*p = *(p - 1);
*array = array_end; 把原数组最后一个元素赋值给数组第一个,形成循环。
m--; 移动次数减一
if (m > 0) //递归调用,当循环次数m减至为0时,停止调用
move(array, n, m);
}