移动一维数组的内容

291 阅读1分钟

1 题目

函数:fun()

功能:移动一维数组的内容

描述:若数组中有n个整数,要求把下标从0到p(含p,p<=n-1)的元素平移到数组的最后 举例:

一维数组:1,2,3,4,5,6,7,8,9,10,p的值为3

移动后:5,6,7,8,9,10,1,2,3,4

2 思路

循环 p 次:

将下标为0的数字进行临时存放,然后将后面的数字平移到前面,最后将临时存放的数字放到最后一位

3 代码

#include <stdio.h> 
#include <stdlib.h>
#define N 10
​
/**
函数:fun()
功能:移动一维数组的内容
描述:若数组中有n个整数,要求把下标从0到p(含p,p<=n-1)的元素平移到数组的最后
举例:
一维数组:1,2,3,4,5,6,7,8,9,10,p的值为3
移动后:5,6,7,8,9,10,1,2,3,4
**/
​
​
void fun(int *a, int p) {
  int temp;
  for (int i = 0; i <= p; ++i) {
    temp = a[0];  // 临时存放第一个数字
    for (int j = 1; j < N; ++j) {   // 循环将后续数字进行平移
      a[j-1] = a[j];
    }
    a[N-1] = temp;  // 临时数字存放到最后一位
  }
}
​
​
int main(int argc, char const *argv[]) { 
  int a[10] = {1,2,3,4,5,6,7,8,9,10};
  int p = 3;
​
  printf("原始数组内容:\n");
  for (int i = 0; i < N; ++i) {
    printf("%d ", a[i]);
  }
  printf("\n");
  
  fun(a, p);
  printf("平移后数组内容:\n");
  for (int i = 0; i < N; ++i) {
    printf("%d ", a[i]);
  }
  printf("\n");
}

示例结果:

$ gcc ex009.c -o demo
$ ./demo
原始数组内容:
1 2 3 4 5 6 7 8 9 10
平移后数组内容:
5 6 7 8 9 10 1 2 3 4