#include <stdio.h>

#define    N    80

void fun(int *w, int p, int n)
{
    int temp[N];  // 创建一个临时数组来保存要移动的元素
    int i;

    // 将下标从0到p的元素保存到临时数组中
    for (i = 0; i <= p; i++) {
        temp[i] = w[i];
    }

    // 将下标从p+1到n-1的元素依次向前移动p+1个位置
    for (i = p + 1; i < n; i++) {
        w[i - p - 1] = w[i];
    }

    // 将临时数组中保存的元素放到数组的最后p+1个位置
    for (i = 0; i <= p; i++) {
        w[n - p - 1 + i] = temp[i];
    }
}

void main()
{  
        int  a[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
        int  i,p,n=15;
        printf("The original data:\n");
        for(i=0; i<n; i++)
                printf("%3d",a[i]);
        printf("\n\nEnter  p:  ");
        scanf("%d",&p);
        fun(a,p,n);
        printf("\nThe data after moving:\n");
        for(i=0; i<n; i++)printf("%3d",a[i]);
        printf("\n\n");
}

函数功能:

该函数实现将一维数组中下标从0到p(含p,p小于等于n-1)的元素平移到数组的最后。

实现步骤:

  1. 创建一个临时数组temp,用来保存要移动的元素。
  2. 将下标从0到p的元素保存到temp数组中。
  3. 将下标从p+1到n-1的元素依次向前移动p+1个位置,覆盖原数组中下标从0到p-1的元素。
  4. temp数组中保存的元素放到数组的最后p+1个位置。

示例:

假设一维数组a的原始内容为:1,2,3,4,5,6,7,8,9,10,p的值为3。

执行函数fun(a, p, n)后,数组a的内容将变为:5,6,7,8,9,10,1,2,3,4。

代码解释:

  • temp[N]:创建一个大小为N的临时数组,用来存放要移动的元素。
  • for (i = 0; i <= p; i++) { temp[i] = w[i]; }:将下标从0到p的元素保存到temp数组中。
  • for (i = p + 1; i < n; i++) { w[i - p - 1] = w[i]; }:将下标从p+1到n-1的元素依次向前移动p+1个位置,覆盖原数组中下标从0到p-1的元素。
  • for (i = 0; i <= p; i++) { w[n - p - 1 + i] = temp[i]; }:将temp数组中保存的元素放到数组的最后p+1个位置。

总结:

该代码使用临时数组和循环操作实现了将一维数组中指定范围元素移动到数组末尾的功能,逻辑清晰易懂,代码简洁高效。

优化建议:

  • 可以使用更简洁的循环语句来实现相同功能。
  • 可以使用指针操作来提高代码效率。
  • 可以添加边界条件判断,防止出现数组越界错误。
  • 可以使用更具描述性的变量名,提高代码可读性。

原文地址: https://www.cveoy.top/t/topic/o2Rn 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录