熬夜到头秃。 2022-08-08 23:01 采纳率: 100%
浏览 39
已结题

//有n个整数,顺序向后移动m个位置,最后m个数变成最前面的m个数

各位大神,现在这个程序可以运行。但是我不太明白那个递归调用的循环体。如何通过end 跟*p就实现了数组的变换,希望指点迷津。

//有n个整数,顺序向后移动m个位置,最后m个数变成最前面的m个数
//每次移动一个,end为每次替换的数
void move(int array[20],int n,int m){
int p,end;
end=
(array+n-1);
for(p=array+n-1;p>array;p--)
p=(p-1);
*array=end;
m--;
//递归调用,当循环次数m减少到0的时候,停止调用
if(m>0)move(array,n,m);
}
int main(){
int num[20],n,m,i;
printf("共有多少数\n");
scanf("%d",&n);
printf("请输入n个数\n");
for(i=0;i<n;i++)
scanf("%d",&num[i]);
printf("你想要后退多少\n");
scanf("%d",&m);
move(num,n,m);
printf("现在它们是\n");
for(i=0;i<n;i++)
printf("%d ",num[i]);
printf("\n");
return 0;
}

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2022-08-09 08:57
    关注

    分析见注释,供参考:

    #include <stdio.h>
    void move(int array[], int n, int m) {
        int *p, end;
        end = *(array + n - 1); //变量 end 保存数组最后一个元素值 array[n-1] 
        for (p = array + n - 1; p > array; p--)//整个数组循环右移一位,p是指针,起始指向数组最后一位 p = &array[n-1]
            *p = *(p - 1);                     //数组元素右移赋值
        *array = end; //将保存在变量end的最后一位元素移动到数组首位值即 array[0] = end;
        printf("m=%d:\n", m);  //以下代码,输出每次右移一位后数组的排列情况
        for (p = array; p < array + n; p++)
            printf("%d ", *p);
        printf("\n");         //到此
        m--;
        //递归调用,当循环次数m减少到0的时候,停止调用
        if (m > 0)  move(array, n, m);
    }
    int main() {
        int num[20], n, m, i;
        printf("共有多少数\n");
        scanf("%d", &n);
        printf("请输入%d个数\n",n);
        for (i = 0; i < n; i++) 
            scanf("%d", &num[i]);
    
        printf("你想要后退多少\n");
        scanf("%d", &m);
        move(num, n, m);
        printf("现在它们是\n");
        for (i = 0; i < n; i++)
            printf("%d ", num[i]);
        printf("\n");
        return 0;
    }
    
    //共有多少数
    //5
    //请输入5个数
    //1 2 3 4 5
    //你想要后退多少
    //3
    //m = 3:
    //5 1 2 3 4
    //m = 2 :
    //4 5 1 2 3
    //m = 1 :
    //3 4 5 1 2
    //现在它们是
    //3 4 5 1 2
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月17日
  • 已采纳回答 8月9日
  • 创建了问题 8月8日

悬赏问题

  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 angular开发过程中,想要读取模型文件,即图1的335行,会报404错误(如图2)。但我的springboot里配置了静态资源文件,如图3。且在该地址下我有模型文件如图4,请问该问题该如何解决呢?
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了
  • ¥100 H5网页如何调用微信扫一扫功能?
  • ¥15 讲解电路图,付费求解
  • ¥15 有偿请教计算电磁学的问题涉及到空间中时域UTD和FDTD算法结合的
  • ¥15 vite打包后,页面出现h.createElement is not a function,但本地运行正常
  • ¥15 Java,消息推送配置