用指针实现,有10个整数,编程使前面各数顺序向后移m个位置,最后的m个数变成最前面的m个数。

有10个整数,编程使前面各数顺序向后移3个位置,最后的3个数变成最前面的3个数.(数组的循环右移)
如,原数组如下,1 2 3 4 5 6 7 8 9 10
则结果为
8 9 10 1 2 3 4 5 6 7


#include <stdio.h>
#define N 10
int main(void){
    int arr[N]={1,2,3,4,5,6,7,8,9,10}; 
    int *p,m;
    int t,k;
      
    scanf("%d",&m);
    while(m>=N || m<0){//注意m值范围,做个检查
        printf("输入错误!\n");
        scanf("%d",&m);
        }
    k=1;
    while(k<=m){//数组整体向右移m次。每移一次,把末尾的那个数
        //放回数组首位
        p=arr+N-1; //记下数组末尾的数 
        t=*p; 
        while(p>arr){  //从数组末尾开始,全体成员向右移一位
            *p=*(p-1);  
            --p;    
            }
        *p=t;//移完后,数组首位会空出来,把末尾数回填到首位
        ++k; //上面右移操作做m次,用k做计数器,k==m跳出循环
        }
    for(p=arr;p!=arr+N;p++)//输出数组,验证结果
        printf("%d ", *p);
    
    return 0;
}

温馨提示:答案为网友推荐,仅供参考
相似回答