C程序设计(第五版)谭浩强著,第八章第四题。

#include<stdio.h>
int main()
{
	int i,n,m, a[10000], * p = a;
	void swap(int a[], int n,int m);
	printf("请输入n的值: ");
	scanf_s("%d", &n);
	printf("请输入n个整数: ");
	for (i = 0; i < n; i++)
		scanf_s("%d",p++);//输入
	printf("使得前面各数顺序往后移m个位置,请输入m:");
	scanf_s("%d", &m);
	swap(a, n,m);
	p = a;
	printf("调换后的顺序为:");
	for (i = 0; i < n; i++,p++)
		printf("%5d", *p);//输出
	return 0;
}
void swap(int a[], int n,int m)
{
	int *p,b[1000],*p1;
	int i;
	for (p=&a[n-m],p1=b,i=0; i < m; i++,p++,p1++)
		*p1=*p;//将输入数组a后面的m个数放入b数组中
	for (i = n - m - 1,p=&a[n-m-1]; i >= 0; i--,p--)
		a[i + m] = *p;//将a数组前面的n-m个数往后移动m个数
	for (i = 0,p1=b,p=a; i < m; i++,p1++,p++)
		*p=*p1;//将b数组中存放的m个数放到a数组的前m个元素中
}

由于对指针掌握不熟练,在此之前先写了个用数组来实现的

#include<stdio.h>
int main()
{
	int swap(int a[],int n);
	int a[9], i;
	printf("请输入九个整数;");
	for (i = 0; i < 9; i++)
		scanf_s("%d",&a[i]);
	printf("\n");
	swap(a, 9);
	printf("调换后的顺序为:");
	for (i = 0; i < 9; i++)
		printf("%3d", a[i]);
	return 0;
}

int swap(int a[], int n)
{
	int i,m=3;
	int b[9];
	for (i = n - m; i < n; i++)
		b[i] = a[i];//将输入数组a后面的m个数放入b数组中
	for (i = n - m - 1; i >= 0; i--)
		a[i + m] = a[i];//将a数组前面的n-m个数往后移动m个数
	for (i = 0; i < m; i++)
		a[i] = b[n - m + i];//将b数组中存放的m个数放到a数组的前m个元素中
	return(a[i]);
}

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐