设有一数列包含10 个数,已按升序排好。现要求编一程序,它能够把从指定位置m开始的n个数按逆序重新排列

并输出新的完整数列。进行逆序处理时要求使用指针方法(例如:原数列为2,4,6,8,10,12,14,16,18,20,m=4, n=5,即要求把从第4个数开始的5个数按逆序重新排列,则得到新数列为2,4,6,16,14,12,10,8,18,20。)输入10个整数和m, n;输出新的数组,数组元素之间以空格分隔。主函数如下:#include <stdio.h>void method(int m,int n,int *a);int main(){ int a[10]; int i, m, n; for ( i=0; i<10; i++ ) scanf("%d", &a[i] ); scanf( "%d%d", &m, &n ); method(m,n,a); for( i=0;i<10;i++ ) printf( "%d ", a[i] );}已经写好了一个程序,可以实现将逆序部分赋给一个指针*b,但是*b没有成功赋给*a不懂为什么,请大神帮帮我,看要怎么改一下,因为我刚学了一点指针,实在不知道怎么办了,谢谢。下面是我写好的程序:#pragma warning(disable:4996)#include <stdio.h>void method(int m, int n, int *a);int main(){ int a[10]; int i, m, n; for (i = 0; i < 10; i++) scanf("%d", &a[i]); scanf("%d%d", &m, &n); method(m, n, a); for (i = 0; i < 10; i++) printf("%d ", a[i]);}void method(int m, int n, int *a){ int j = m + n - 2; int *b = (a + j); while (j >= m - 1) { j--; b = (a + j); } for (j = 1; j < m; j++) a++; for (j = m; j < m + n; j++) { a = b; a++; b++; }}

method函数参考代码及测试代码如下:

#include<stdio.h>
void method(int m,int n,int *a)
{int t,i,l;
--m;
for(i=0;i<n/2;++i){
t=*(a+m+i);
*(a+m+i)=*(a+m+n-i-1);
*(a+m+n-i-1)=t;
}
}
int main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int i,n=10;
method(6,4,a);
for(i=0;i<10;i++)
printf("%d ",a[i]);
return 0;
}

追答

温馨提示:答案为网友推荐,仅供参考
相似回答