读书人

看来小弟我数学不好大家帮忙看看4

发布时间: 2012-04-14 17:14:21 作者: rapoo

看来我数学不好,大家帮忙看看,49行left为啥要赋值为-1才行,我原来是left=0,结果第一个数为一堆乱码???????
1#include<iostream>
2#include<cstdlib>
3#include<ctime>
4void move(int * & ary,int n);
5void ni(int * ary,int n);
6using namespace std;
7void main()
8{
9int *ary,*t;
10int n;
11srand(time(NULL));
12cout<<"n= ";
13cin>>n;
14move(ary,n);
15for(t=ary;t<ary+n;t++)
16{
17*t=rand()%100+1;
18}
19
20for(t=ary;t<ary+n;t++)
21{
22cout<<*t<<"\t";
23}
24cout<<endl;
25ni(ary,n);
26for(t=ary;t<ary+n;t++)
27{
28cout<<*t<<"\t";
29}
30cout<<endl;
}31
31
33
vo34id move(int * & aaa,int len)
{35
36aaa=new int[len];
37if(aaa==NULL)
38{
39cout<<"SB";
40return ;
41}
42for(int i=0;i<len;i++)
43aaa[i]=0;
}44
45
46
vo47id ni(int * p,int n)
{48
49int temp,left=-1,right=n;
50while(left<=right)
51{
52temp=*(p+left);
53*(p+left)=*(p+right);
54 *(p+right)=temp;
55left++;
56right--;
57}
}



[解决办法]

C/C++ code
#include<iostream>#include<cstdlib>#include<ctime>void move(int * & ary,int n);void ni(int * ary,int n);using namespace std;void main(){    int *ary,*t;    int n;    srand(time(NULL));    cout<<"n= ";    cin>>n;    move(ary,n);    for(t=ary;t<ary+n;t++)    {        *t=rand()%100+1;    }    for(t=ary;t<ary+n;t++)    {        cout<<*t<<"\t";    }    cout<<endl;    ni(ary,n);    for(t=ary;t<ary+n;t++)    {        cout<<*t<<"\t";    }    free(ary); //释放掉内存;    cout<<endl;}void move(int * & aaa,int len){    aaa=new int[len];    if(aaa==NULL)    {        cout<<"SB";        return ;    }    for(int i=0;i<len;i++)        aaa[i]=0;} void ni(int * p,int n){    int temp,left=0,right=n-1;//right应该为n-1,为n就越界了。    while( left <= right)    {        temp=*(p+left);        *(p+left)=*(p+right);        *(p+right)=temp;        left++;        right--;    }}
[解决办法]
本来 49行应该是 left=0 right=n-1;
你现在误打误撞写成 left=-1 ,right=n.能够成功但是很危险因为你把你数组外的头尾两个数字也做了交换。如果该两个值在后续程序中有意义则会导致问题。

所以你现在不应该纠结的是left=-1,而是考虑清楚right因该是n,还是 n-1.

读书人网 >C++

热点推荐