循环移动(指针专题)

题目描述

有n个整数,使前面各数顺序向后移动k个位置,移出的数再从开头移入。输出移动后的数组元素。
题目没有告诉你n的范围,希望你读入n之后用malloc()函数动态申请内存空间,不要提前定义数组的大小。不要偷懒哦。
另外要求定义并使用函数ringShift()
void ringShift(int *a, int n, int k)
{
//循环移动后的数值仍然存入数组a中
}


输入描述

输入分3行,第一行是一个整数n,第二行是n个整数,用空格隔开。第三行是一个整数k。


输出描述

输出n个整数,由空格隔开。输出占一行。


输入样例

6
1 2 3 4 5 6
2


输出样例

5 6 1 2 3 4

 

使用 malloc 函数可以在运行时动态分配内存,从而定义一个不知道大小的数组。以下是一个示例:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int size;

    // 获取用户输入的数组大小
    printf("请输入数组的大小: ");
    scanf("%d", &size);

    // 使用malloc动态分配内存
    int *dynamicArray = (int *)malloc(size * sizeof(int));

    // 检查内存是否分配成功
    if (dynamicArray == NULL) {
        printf("内存分配失败\n");
        return 1; // 返回非零值表示程序异常结束
    }

    // 输入数组元素
    printf("请输入数组元素:\n");
    for (int i = 0; i < size; i++) {
        scanf("%d", &dynamicArray[i]);
    }

    // 输出数组元素
    printf("数组元素为:\n");
    for (int i = 0; i < size; i++) {
        printf("%d ", dynamicArray[i]);
    }

    // 释放动态分配的内存
    free(dynamicArray);

    return 0;
}

 在这个例子中,用户首先输入数组的大小,然后使用 malloc 函数动态分配所需大小的内存。用户随后输入数组元素,然后输出这些元素。最后,通过调用 free 函数释放动态分配的内存,以防止内存泄漏

本题解法

#include <stdio.h>
#include <stdlib.h>
void ringShift(int *a, int n, int k)//移动函数,传入数组首地址,数组个数,移动距离 
{
	for(int i=0;i<k;i++){
		int temp=a[n-1];
		for(int j=n-1;j>0;j--){
			a[j]=a[j-1];
		}
		a[0]=temp;
	}
}
int main() {
	
	int n;
	//输入n
	scanf("%d",&n);
	// 使用malloc函数动态分配内存 
    int *arr = (int *)malloc(n * sizeof(int));
	
	//存入n个整数到数组arr
	for(int i=0;i<n;i++){
		scanf("%d",&arr[i]);
	} 
	//输入k,移动 
	int k;
	scanf("%d",&k);
	ringShift(arr,n,k); 
	// 输出移动后的数组元素
    for (int i = 0; i < n; ++i) {
        printf("%d", arr[i]);

        // 输出空格,除了最后一个元素
        if (i < n - 1) {
            printf(" ");
        }
    }
	//释放malloc分配的数组的内存 
	free(arr);
	arr=NULL;
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值