📜  C程序,用于数组旋转程序(1)

📅  最后修改于: 2023-12-03 14:40:27.259000             🧑  作者: Mango

C程序:数组旋转

本程序用于实现对一个数组进行旋转操作,即将数组中的元素按照一定规律进行移动,旋转后的数组与原数组具有相同的元素数量和元素值,但是元素的位置发生了改变。

实现思路

本程序的实现思路比较简单,主要分为以下几个步骤:

  1. 输入原数组和旋转步数;

  2. 根据旋转步数计算需要移动的元素数量;

  3. 将需要移动的元素从原数组中拷贝到一个临时数组中;

  4. 将原数组中剩余的元素依次向后移动;

  5. 将存放移动元素的临时数组中的元素依次复制回原数组;

  6. 输出旋转后的数组。

代码实现

下面是本程序的完整代码实现,其中用到了数组的拷贝函数 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 语言的理解,提高编码能力。