📅  最后修改于: 2023-12-03 14:40:27.259000             🧑  作者: Mango
本程序用于实现对一个数组进行旋转操作,即将数组中的元素按照一定规律进行移动,旋转后的数组与原数组具有相同的元素数量和元素值,但是元素的位置发生了改变。
本程序的实现思路比较简单,主要分为以下几个步骤:
输入原数组和旋转步数;
根据旋转步数计算需要移动的元素数量;
将需要移动的元素从原数组中拷贝到一个临时数组中;
将原数组中剩余的元素依次向后移动;
将存放移动元素的临时数组中的元素依次复制回原数组;
输出旋转后的数组。
下面是本程序的完整代码实现,其中用到了数组的拷贝函数 memcpy()
:
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 100
/**
* 函数说明:将数组 arr 中的元素向右旋转 step 个步长
* 参数说明:arr 为需要旋转的数组,step 为旋转的步长,size 为数组元素个数
* 返回值说明:无返回值,直接修改原数组
**/
void rotate(int arr[], int step, int size)
{
int temp[MAX_SIZE]; // 用于存放需要移动的元素
int count = step % size; // 实际需要移动的元素个数
// 将需要移动的元素从原数组中拷贝到临时数组中
memcpy(temp, arr + size - count, count * sizeof(int));
// 将原数组中剩余的元素依次向后移动
for (int i = size - 1; i >= count; i--) {
arr[i] = arr[i - count];
}
// 将存放移动元素的临时数组中的元素依次复制回原数组
memcpy(arr, temp, count * sizeof(int));
}
int main()
{
int a[MAX_SIZE]; // 原数组
int n; // 数组大小
int m; // 旋转步数
printf("请输入数组元素个数:");
scanf("%d", &n);
printf("请输入数组元素,以空格分隔:");
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
printf("请输入需要旋转的步数:");
scanf("%d", &m);
rotate(a, m, n);
printf("旋转后的数组为:");
for (int i = 0; i < n; i++) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
使用本程序非常简单,只需要按照提示输入数组元素数量、数组元素和旋转步数即可,如下所示:
请输入数组元素个数:5
请输入数组元素,以空格分隔:1 2 3 4 5
请输入需要旋转的步数:2
旋转后的数组为:4 5 1 2 3
本程序实现了对一个数组进行旋转操作的功能,代码内容涵盖了数组操作、循环语句、数组拷贝等多方面知识点。对于初学者来说,可以通过本程序加深对 C 语言的理解,提高编码能力。