有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数,写一函数实现以上功能,在主函数中输入n个整数和输出调整后的n个数.
谢了.

认真做好我想做的事!
下面是个递归写法,这样可以不借助数组,当然效率有影响!
你也可以用数组,把移出去的m个先放别的数组里,最后操作
[CODE]
#include "stdio.h"
void Move_array(int *array,int n,int m)
{
int i,data;
if(m==0)
return;
data=array[n-1];
for(i=n-2;i>=0;i--)
array[i+1]=array[i]; /*应该算指针*/
array[0]=data;
Move_array(array,n,m-1);
}
int main()
{
int array[10]={1,2,3,4,5,6,7,8,9,10},i;
Move_array(array,10,5); /*一个例子*/
for(i=0;i<10;i++)
printf("%d \n",array[i]);
return 0;
}
[/CODE]
也可以用数组,把移出去的m个先放别的数组里,最后操作
void Move_array(int*ary,int n,int m)
{ int *tmp;
if(m<=0||m>=n)return;
tmp=(int*)malloc(m*sizeof(int));
memcpy(tmp,ary+n-m,m*sizeof(int));
memcpy(ary+m,ary,(n-m)*sizeof(int));
memcpy(ary,tmp,m*sizeof(int));
}
int main()
{
int array[10]={1,2,3,4,5,6,7,8,9,10},i;
Move_array(array,10,5); /*一个例子*/
for(i=0;i<10;i++)
printf("%d \n",array[i]);
return 0;
}
/*-------------------------------------------------------*
将某个拥有N个元素的数组进行数据移位。具体说就是将开头的
M个元素移动到该数组的尾部,第M+1~N个元素相应往前挪。
*-------------------------------------------------------*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<memory.h>
int main()
{
int N;
int M;
int *a; //a[]是一个动态的数组,用于存放原始数据
int i,*b; //b[]也是一个动态数组,用于存放过渡数据
printf("原始数据有几个?\n");scanf("%d",&N);
printf("需移动几个数据?\n");scanf("%d",&M);
a=(int*)malloc(N*sizeof(int));
//让电脑产生N个随机数:
printf("原始数据为\n");
srand(time(NULL));//随机数种子
for(i=0;i<N;i++)
{ a[i]=rand();
printf("%-6d",a[i]);
if((i+1)%10==0)printf("\n");
}
printf("\n");
if(M>0 && M<N)
{
b=(int*)malloc(M*sizeof(int));////////申请内存
memcpy(b,a,M*sizeof(int));//相当于for(i=0;i<M;i++)b[i]=a[i];
memcpy(a,a+M,(N-M)*sizeof(int));//相当于for(i=M;i<N;i++)a[i-M]=a[i];
memcpy(a+N-M,b,M*sizeof(int));//相当于for(i=0;i<M;i++)a[N-M+i]=b[i];
free(b);//////////////////////////////释放内存
}
//检验循环移位实现没有:
printf("移动位置后\n");
for(i=0;i<N;i++)
{ printf("%-6d",a[i]);
if((i+1)%10==0)printf("\n");
}
printf("\n");
}
链表也算指针吧?
用链表更直观哩!
#include <stdio.h>
#define N 10
typedef struct NODE
{
int num;
struct NODE *link;
}node;
int main()
{
int i=1,move;
node *head=NULL,*p=NULL,*q=NULL;
head=(node *)malloc(sizeof(node));
head->link=head;
head->num=i++;
p=head;
do
{
q=(node *)malloc(sizeof(node));/*为减少篇幅,省去内存申请检验*/
q->link=head;
q->num=i++;
p->link=q;
p=q;
}while(i<N);
p=head->link;
printf("移动之前的顺序为:\n");
printf("%d",head->num);
do
{
printf("%d",p->num);
p=p->link;
}while(p!=head);
printf("\n输入你想移动几个数:\n");
scanf("%d",&move);
i=0;
while(i<move)
{
head=head->link;
i++;
}
p=head->link;
printf("移动之后的顺序为:\n");
printf("%d",head->num);
do
{
printf("%d",p->num);
p=p->link;
}while(p!=head);
getch();
}