題目:
用指針與數組作為函數參數,按如下四種情況用擂台法對一維實型數組a[10]進行降序排序。
函數的實參為數組名,形參為數組。
函數的實參為數組名,形參為指針變量,。
函數的實參為指針變量,形參為數組。
函數的實參為指針變量,形參為指針變量。
實驗數據:10,25,90,80,70,35,65,40,55,5
#include <iostream>
using namespace std;
void Sort1(int a1[],int n)
{
int i,j;
int temp,max;
for(i=0;i<n-1;i++){
max=i;
for(j=i;j<n;j++){
if(a1[max] < a1[j])
max=j;
}
temp=a1[max];
a1[max]=a1[i];
a1[i]=temp;
}
for(i=0;i<n;i++)
cout<<a1[i]<<" ";
cout<<endl;
}
int *Sort2(int *pa,int n)
{
int i,j;
int temp,max;
for(i=0;i<n-1;i++){
max=i;
for(j=0;j<n;j++){
if(*(pa+max) < *(pa+j))
max=j;
}
temp=*(pa+max);
*(pa+max)=*(pa+j);
*(pa+j)=temp;
}
return pa;
}
int main()
{
int a[]={10,25,90,80,70,35,65,40,55,5};
int *sort_2,*sort_4;
int *p=a;
int t;
Sort1(a,10);
sort_2=Sort2(a,10);
for(t=0;t<10;t++)
cout<<*(sort_2+t)<<" ";
cout<<endl;
Sort1(p,10);
sort_4=Sort2(p,10);
for(t=0;t<10;t++)
cout<<*(sort_4+t)<<" ";
cout<<endl;
return 0;
}```
請問錯在哪裡?麻煩指出錯誤點,萬分謝謝!!!!!!!!!!!!!!!
有兩個問題吧:
1.sort2函數裡面的
temp=*(pa+max);
*(pa+max)=*(pa+j);
*(pa+j)=temp;
這裡的j要改為i,因為j的值是10,越界了。
2.在sort2裡面,第二個for循環的j要從j=i+1開始,而不是0,所以改成:
for(j=i+1;j<n;j++){
if(*(pa+max) < *(pa+j))
max=j;
}
在sort1裡面也需要將 j=i改為j=i+1
修改之後的代碼如下:
#include <iostream>
using namespace std;
void Sort1(int a1[],int n)
{
int i,j;
int temp,max;
for(i=0;i<n-1;i++){
max=i;
for(j=i+1;j<n;j++){
if(a1[max] < a1[j])
max=j;
}
temp=a1[max];
a1[max]=a1[i];
a1[i]=temp;
}
for(i=0;i<n;i++)
cout<<a1[i]<<" ";
cout<<endl;
}
int *Sort2(int *pa,int n)
{
int i,j;
int temp,max;
for(i=0;i<n-1;i++){
max=i;
for(j=i+1;j<n;j++){
if(*(pa+max) < *(pa+j))
max=j;
}
temp=*(pa+max);
*(pa+max)=*(pa+i);
*(pa+i)=temp;
}
return pa;
}
int main()
{
int a[]={10,25,90,80,70,35,65,40,55,5};
int *sort_2,*sort_4;
int *p=a;
int t;
Sort1(a,10);
sort_2=Sort2(a,10);
for(t=0;t<10;t++)
cout<<*(sort_2+t)<<" ";
cout<<endl;
Sort1(p,10);
sort_4=Sort2(p,10);
for(t=0;t<10;t++)
cout<<*(sort_4+t)<<" ";
cout<<endl;
return 0;
}