一个还不需要用链表的C++问题

时间:2022-11-23 21:00:32

#include<iostream>

using namespace std;

//void move(int*p,int m,int n)                  应该是打//的子函数需要改一下吧........

//{

//int i,j=0,temp;

//for(i=0;i<n%m;i++)

//{

//p=0;        ////不知道p的地址怎么返回主函数的&a[0] (我也不知道怎么描述)

//temp=*p;

//for(p++;j<m;p++,j++)

//*(p-1)=*(p);

//*p=temp;

}

}

int main()

{

int a[20],m,n,*p;

cout<<"请输入数据个数m:";

cin>>m;

a[0]=1;

a[1]=1;

for(p=&a[2];p-a<m;p++)

*p=*(p-1)+*(p-2);                               // 生成斐波拉契数列

cout<<"移动前的数据为:"<<endl;

for(p=a;p-a<m;p++)

cout<<*p<<" ";

cout<<endl;

cout<<"请输入左移的位数n:";

cin>>n;

cout<<"移动后的数据为:"<<endl;

p=a;

move((int*)p,m,n);

for(p=a;p-a<m;p++)

cout<<*p<<" ";

cout<<endl;

return 0;

}


大一的题目

最佳答案

你的程序的确有问题的,改过的参考(只要改函数部分)

void move(int *p, int m, int n)
{
 int i, j, temp, *t = p; //数组头不能改,所以要加一指针
 for (i = 0; i < n % m; i++)
   {
     t = p; //每次重新指向头
     temp = *t;
     for (t++, j = 0; j < m - 1; t++, j++) //最后一个不能取后面的了,所以要-1
       *(t - 1) = *t;
     *(t - 1) = temp; //最后一个在t-1
   }
}