5.2

来源:互联网 发布:138端口是什么服务 编辑:程序博客网 时间:2024/05/20 06:31

1.有n个证书,使前面各数顺序向后移动m个位置,最后m个数变成最前面m个数,写一函数实现。在主函数输入n个整数和输出调整后的n个整数

#include <stdio.h>int main(){    void move_place1(int *p,int m,int n);//常规方法,定义一个数组存放后面m个数据    void move_place2(int *p,int m,int n);//使用递归的方法,每一次调用,将最后一个数保存,每个数后移一位,最后一个数放在第一位    int a[20],m,n,i;    printf("How many numbers:");    scanf("%d",&n);    printf("input the numbers:");    for(i=0;i<n;i++)        scanf("%d",&a[i]);    printf("How many place do you want to move:");    scanf("%d",&m);    //move_place1(a,m,n);    move_place2(a,m,n);    printf("Now,the order is:");    for(i=0;i<n;i++)        printf("%d",a[i]);    printf("\n");    return 0;}void move_place1(int *p,int m,int n){    int *pa,i,b[20];    for(pa=p+n-m,i=0;i<m;i++)        b[i]=*pa++;    for(pa=p+n-m-1;pa>=p;pa--)        *(pa+m)=*pa;    for(i=0,pa=p;i<m;i++)        *pa++=b[i];}void move_place2(int *p,int m,int n){    int array_end,*pa;    array_end=*(p+n-1);    for(pa=p+n-1;pa>p;pa--)        *pa=*(pa-1);    *p=array_end;    m--;    if(m>0)      move_place2(p,m,n);}




原创粉丝点击