有n个整数,使前面各数顺序向后移m个位置,最后m个数变成前面m个数,见图.写一函数:实现以上功能,在主函数中输入n个数和输出调整后的n个数.

用指针法实现

解题思路:

(1)在函数中,新建一个数组,把原数组中的后m个数字先复制到这个新建的数组中

(2)原数组中的元素向后移动m个位置

(3)把新建数组中存贮的m个元素,复制到原数组中

注意点:

“移动过程中数组的下标的计算要准确”

源程序代码:

#include<stdio.h>
#define _CRT_SECURE_NO_WARNINGS
#define N 10
int main(void) {
	void Process(int *q, int m);//函数声明
	int a[10];
	int *p;
	p = a;//a是常量,p是变量
	for (; p <a + 10; p++)
	{
		printf_s("输入一个数\n");
		scanf_s("%d", p);
	}
    //调用处理函数
	Process(a,5);
	p = a;
	printf_s("输出数组\n");
	for (; p < a + 10; p++)
	{
		printf_s("%d",*p);
	}
	
}
void Process(int *q, int m)
{
	int b[10];//这个数组用来存放原数组中需要转移的m个数
	int *ptr_b, *ptr_q;
	int i;
	ptr_b = b;//获得数组的起始地址
	ptr_q = q;//获取原数组的起始地址
	for (i = 0; i < m; i++)
	{
		//先把这m个数据取出来放在数组b中
		*ptr_b = *(ptr_q + (N - m));
		ptr_b++;
		ptr_q++;
	}

	//原数组前面的N-m个数向后移动m个位置
	for(i = 0; i < N - m;i++)
	{
		*ptr_q = *q;
		q++;
		ptr_q++;
	}
	//把数组b中的前m个数字,复制到原数组的前m个位置
	for (i=0;i<m;i++)
	{
		*(q - m) = *(ptr_b-m);
		ptr_b++;
		q++;
	}

	//return;
}

 

运行结果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值