题目:有n个整数,是前面各数顺序向后移m个位置,最后m个数变成前面m个数。写一个函数实现以上功能,在主函数中输入n个整数和输出调整后n个整数。(p291)
#include<stdio.h>
#include<stdlib.h> //动态分配头文件
unsigned int n,m; //全局变量
int main()
{
void fun(int *p,int *p2);
int i;
int *p,*p1;
scanf("%u%u",&n,&m);
p=p1=(int *)malloc(n*sizeof(int));
for(i=0;i<n;i++)
scanf("%d",p1++); //输入数组
fun(p,p1);
return 0;
}
void fun(int *p,int *p2)
{
int i;
for(i=0;i<m;i++)
printf("%5d",*(p2+i-m)); //输出最后n个数
for(i=0;i<(n-m);i++)
printf("%5d",*(p+i)); //输出前面m个数
}
说明:运用了递归
#include<stdio.h>
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]);
printf("how many place you want move?");
scanf("%d",&m);
move(number,n,m);
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) move(array,n,m);
}