移动一维数组的内容

286 阅读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