程序功能是通过调用reverse()函数将数组中指定范围内的元素按逆序重新放置
#include <stdio.h>
#define N 10
void reverse(int p, int a, int b)
{
int m,i,j,t;
m=(b-a)/2;
for(i=a;i<=m;i++)
{
j=b-i;
t=(p+i);
(p+i)=(p+j);
*(p+j)=t;
}
}
int main()
{
int a[N], i, begin, end;
for (i=0; i<N; i++)
scanf("%d",&a[i]);
scanf("%d%d",&begin,&end);
reverse(a, begin, end);
for (i=0; i<N; i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
测试输入:
1 5 3 4 8 0 6 9 12 13
1 8
实际输出
1 9 6 0 8 4 3 5 12 13
1 12 9 6 0 8 4 3 5 13
修改reverse函数中的 m=(b-a)/2; 为 m=(b+a)/2; 这么计算出来的中间位置才是正确的。
还有reverse函数中的for循环内部应该是沾错了吧,修改后的代码如下:
void reverse(int *p, int a, int b)
{
int m,i,j,t;
m=(b+a)/2;
j = b;
for(i=a;i<=m;i++)
{
t=p[i];
p[i]=p[j];
p[j]=t;
j--;
}
}