编写函数,其功能是把包含N个整数的数组a中从第m数开始的n个数按逆序重新存放。

编写函数void rev(int a[],int m,int n),其功能是把包含N个整数的数组a中从第m数开始的n个数按逆序重新存放。在主函数中调用输入函数输入N个整数及m、n,调用rev函数进行逆序处理后,调用输出函数输出结果;当m+n>N时,即表示从第m个数开始到最后一个数进行逆序存放。程序提交时N设定为10。
如输入:10 2 30 4 50 6 70 8 90 1
6 8
10 2 30 4 50 1 90 8 70 6

供参考:

#include <stdio.h>
#define N 10
void rev(int a[],int m,int n)
{
    int i,t;
    m+n > N ? n = N - m : n = n;
    for (i = m - 1;i < m + n/2; i++){
        {t = a[i];a[i] = a[N - i + m - 2]; a[N - i + m - 2] = t;}
    }
}
int main()
{
    int a[N],i,m,n;
    for (i = 0;i < N; i++)
        scanf("%d", &a[i]);
    scanf("%d%d", &m, &n);
    rev(a,m,n);
    for (i = 0;i < N; i++)
            printf("%4d",a[i]);
    return 0;
}

指针的写法:

#include <stdio.h>
#define N 10
void rev(int* a,int m,int n)
{
    int i,t;
    m+n > N ? n = N - m : n = n;
    for (i = m - 1;i < m + n/2; i++){
        {t = *(a + i);*(a + i) = *(a + N - i + m - 2); *(a + N - i + m - 2) = t;}
    }
}

int main()
{
    int a[N],i,m,n;
    for (i = 0;i < N; i++)
        scanf("%d", &a[i]);
    scanf("%d%d", &m, &n);
    rev(a,m,n);
    for (i = 0;i < N; i++)
            printf("%4d",a[i]);
    return 0;
}

能不能使用指针呢?