C语言练习示例68

题目:有 n 个整数,使其前面各数顺序向后移 m 个位置,最后m个数变成最前面的 m 个数。

程序分析:可以使用一个辅助数组来保存需要移动的元素,然后再将元素按照要求移动到正确的位置。

程序源代码:

#include <stdio.h>
// 通过 shiftArray 函数来实现数组元素的移动。
void shiftArray(int arr[], int n, int m) {
    int temp[m];

    // 保存最后 m 个数到临时数组
    for (int i = n - m, j = 0; i < n; i++, j++) {
        temp[j] = arr[i];
    }

    // 将前面的 n-m 个数向后移动 m 个位置
    for (int i = n - m - 1; i >= 0; i--) {
        arr[i + m] = arr[i];
    }

    // 将临时数组中的数放到最前面
    for (int i = 0; i < m; i++) {
        arr[i] = temp[i];
    }
}
// 在 main 函数中获取用户输入的数组和要移动的位置,调用s hiftArray 函数,最后输出移动后的数组

int main() {
    int n, m;

    printf("请输入整数个数 n:");
    scanf("%d", &n);

    printf("请输入向后移动的位置 m:");
    scanf("%d", &m);

    int arr[n];

    printf("请输入 %d 个整数:", n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }

    shiftArray(arr, n, m);

    printf("移动后的数组:");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

程序源代2:


 
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int arr[20];
    int i,n,offset;
    //输入数组大小和数组内容
    printf("Total numbers?\n");
    scanf("%d",&n);
    printf("Input %d numbers.\n",n);
    for(i=0;i<n;i++)
        scanf("%d",&arr[i]);
    //输入滚动偏移量
    printf("Set your offset.\n");
    scanf("%d",&offset);
    printf("Offset is %d.\n",offset);
    //打印滚动前数组
    print_arr(arr,n);
    //滚动数组并打印
    move(arr,n,offset);
    print_arr(arr,n);
}
 
//打印数组
void print_arr(int array[],int n)
{
    int i;
    for(i=0;i<n;++i)
        printf("%4d",array[i]);
    printf("\n");
}
//滚动数组
void move(int array[],int n,int offset)
{
    int *p,*arr_end;
    arr_end=array+n;      //数组最后一个元素的下一个位置
    int last;
    
    //滚动直到偏移量为0
    while(offset)
    {
        last=*(arr_end-1);
        for(p=arr_end-1;p!=array;--p)   //向右滚动一位
            *p=*(p-1);
        *array=last;
        --offset;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

新程序圆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值