渃水73 2022-07-02 00:07 采纳率: 100%
浏览 298
已结题

通过调用reverse()函数将数组中指定范围内的元素按逆序重新放置

问题遇到的现象和发生背景

程序功能是通过调用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

  • 写回答

1条回答 默认 最新

  • it_hao528 2022-07-02 00:22
    关注

    修改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--;
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 7月10日
  • 已采纳回答 7月2日
  • 创建了问题 7月2日

悬赏问题

  • ¥15 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?