(指针处理)有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数。

在这里插入图片描述代码:

#include <stdio.h>
#define N 8
int main(){
    void move(int *q);
    int num[N],*p=num;
    printf("请输入%d个数:\n",N);
    /*
    //第一种:移动指针,指针每次☞的值不一样
    for(p=num;p<(num+N);p++){
        scanf("%d",p);
    }
    for(p=num;p<(num+N);p++){
        printf("%d ",*p);
    }
    */
    //第二种:指针不动,指针☞的值未变,始终为num[0]
    for(int i=0;i<N;i++){
        scanf("%d",p+i);
    }
    printf("您输入的%d个数原顺序为:\n",N);
    for(int i=0;i<N;i++){
        printf("%d ",*(p+i));
    }
    printf("\n--------------------------\n");
   // printf("*p=%d\n",*p);
    move(p);
    return 0;
}
void move(int *p){
    int m,flag=1,num2[N]={0},*q,i,j;
    q=num2;
   // printf("移动前*q=%d\n",*q);
    printf("请输入将后几位数往前移:");
    do{
        scanf("%d",&m);
        if(m>=N||m<=0)
        printf("输入不符合要求,请重新输入:");
        else flag=0;
    }
    while(flag);
    printf("\n--------------------------\n");
    //将数组后面的m位往前移动N-m个位置
    for(i=0;i<N;i++){
        if(i<m){
            j=i+(N-m);
            //假设m=3,N=8;
            //num2[0]=num[3];
            *(q+i)=*(p+j);
         //   printf("num2[%d]=%d\n",i,*(q+i));
        }
        else{
            //此时i=m+1
            j=i-m;
            *(q+i)=*(p+j);
        }
    }
   
   // printf("移动后*q=%d\n",*q);
    printf("移动后的顺序为:\n");
    for(i=0;i<N;i++){
        printf("%d ",*(q+i));
    }
    printf("\n");
}

运行结果:
在这里插入图片描述

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值