EncoreLaw 2016-05-10 05:12 采纳率: 46.2%
浏览 1411
已采纳

我是个学生,求大神指教!!!

题目是:有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数,写一个函数实现以上功能
#include
int input(int *p)
{
int i=0;
do
{
scanf("%d",p+i);
i++;

}
while(*(p+i-1)!=-1);
return i-1;

}
int* mv(int n,int m,int p)
{

int i,b[100],*c=NULL;
for(i=0;i<m;i++)
{
b[i]=
(p+m-1);
}
for(i=0;i<n-m;i++)
{
b[m-1+i]=*(p+i);
}
c=b;
return c;
}
void output(int p,int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%d",
(p+i));
}
}
int main()
{
int a[100],n,m,*o=NULL;
n=input(a);
printf("请输入m(把数据最后的m个数按顺序移动到最前):\n");
scanf("%d",m);
o=mv(n,m,a);
output(o,n);
return 0;
}

  • 写回答

5条回答

  • 小灸舞 2016-05-10 05:49
    关注

    问题如下:
    1.有很多地方少了星号(*),不知道是不是复制粘贴的原因
    2.mv函数里两个for循环都有问题
    3.你不能把一个局部数组b给返回main函数,需要malloc或者new才行

     #include<iostream>
    #include<vector>
    using namespace std;
    int input(int *p)
    {
        int i=0;
        do
        {
            scanf("%d",p+i);
            i++;
        }
        while(*(p+i-1)!=-1);
        return i-1;
    }
    int* mv(int n,int m,int *p)
    {
        int *b = (int *)malloc(sizeof(int) * n);
        int i;
        for(i=0;i<m;i++)
        {
            b[i]=*(p+n-m+i);
        }
        for(i=0;i<n-m;i++)
        {
            b[m+i]=*(p+i);
        }
        return b;
    }
    void output(int *p,int n)
    {
        int i;
        for(i=0;i<n;i++)
        {
            printf("%d ",*(p+i));
        }
    }
    int main()
    {
        int a[100],n,m,*o=NULL;
        n=input(a);
        printf("请输入m(把数据最后的m个数按顺序移动到最前):\n");
        scanf("%d",&m);
        o=mv(n,m,a);
        output(o,n);
        free(o);
        return 0;
    }
    
    

    图片说明

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!