有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面m个数
include<stdio.h>
#include<stdlib.h>
#if(1)
void move(int *p,int n,int m)//n为元素后移位置,m为元素个数
{
int *p1;
int i;
for(i=0,p1=p;p1<p+n;p1++,i++)
{
*p1=*(p+m-n+i);
}
for(i=0,p1=p+n;p1<p+m;p1++,i++)
{
*p1=*(p+i);
}
for(i=m;i>0;i--)
{
printf("%-2d",*(p1-i));
}
}
void main()
{
int i,n,m;
int c[100];
printf("请输入后移个数:\n");
scanf("%d",&n);
printf("请输入元素个数:\n");
scanf("%d",&m);
printf("请输入任意元素:\n");
for(i=0;i<m;i++)
{
scanf("%d",c+i);
}
move(c,n,m);
printf("\n");
system("pause");
}
#endif
肯定不行啊,第一个循环过后,就将前面5个换成后面5个了啊。第二个循环就没有意义了。你在替换前5个前,需要将原先的前5个元素记下来啊
因为你的循环在p1=p的时候让两个指针相等,修改p1就相当于修改p,你可以试着输出一下会发现变了的