数组循环后移
题目描述:
有n个整数(n<100),使前面各数顺序后移m个位置,最后m个数变成前面m个数。写一函数,实现以上功能,在主函数中输入n个数和输出调整后的n个数。 要求使用指针的形式
输入:
第一行输入n,表示有n个数据
第二行输入n个数据,数据之间用空格分开
第三行输入要后移的位数m(m
输出:
移动后的n个数。
示例:
输入 输出
10 9 10 1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8 9 10
2
代码:
#include
void NumberMov(int *data, int n, int m) //形参是一个指向int型的指针,用来接收一维数组名
{
int i, tmp[100] = {0}, *ps, *pd;
for (i = 0; i < n; i++) tmp[i] = data[i];
//移动后n-m个数
ps = tmp;//把数组名赋给ps,相当于让ps指向tmp数组的第一个元素
pd = data + m; //pd指向了data[m]
for (i = 0; i < n - m; i++) *pd++ = *ps++;
//移动前m个数
pd = data;
for (i = 0; i < m; i++) *pd++ = *ps++;
//*pd++两个作用:1 访问pd指向的内容 2 把pd移到下一个位置去 常用于对数组类的连续空间的操作
}
int main(int argc, char *argv[])
{
int n = 0, m = 0, i = 0;
int a[100] = {0};
//按题目要求的格式输入
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
scanf("%d", &m);
NumberMov(a, n, m);
//按题目要求的格式输出
for (i = 0; i < n; i++)
{
printf("%d ", a[i]);
}
printf("n");
return 0;
}
评论列表(0条)