编写函数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;
}
能不能使用指针呢?