思路:
先将所给的成绩数组a赋值给一个新的数组c,将c内的元素进行从大到小的降序排列,再将原来的数组a中元素在排序后的数组c中进行查找,在c中所对应的下标极为排列顺序,便可以知道所对应数据的排名。
#include<iostream>
using namespace std;
void rank0(float a[],int n,int b[])
{
int i,j;
float c[n];
for(i=0;i<n;i++)c[i]=a[i]; //将数组a的值赋给数组c
for(i=0;i<n-1;i++){
int k=i; //设当前下标i的元素为最大元素,最大元素的下标k为i
for(j=i+1;j<n;j++)
if(c[k]<c[j])k=j; //查找最大元素的下标k
if(i!=k){ //最大元素不在当前位置时交换元素
float t=c[i];
c[i]=c[k];
c[k]=t;
}
}
cout<<"从大到小排序为:\n";
for(i=0;i<n;i++)cout<<c[i]<<'\t';
cout<<'\n';
cout<<"所对应的名次为\n";
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
if(a[i]==c[j])b[i]=j+1;
}
for(i=0;i<n;i++)cout<<b[i]<<'\t';
}
int main()
{
float a[10]={78,56.5,87,69,78,98,59,75.5,89,99};
cout<<"学生的成绩为:\n";
for(int i=0;i<10;i++)cout<<a[i]<<'\t';
cout<<"\n";
int b[10];
rank0(a,10,b);
return 0;
}
这里对数组c所进行的排序方法为选择排序:
参考:
这段代码所以的初始数据也可以改为手动输入,用循环便可以实现:
输入数组,参考:
利用new来分配动态空间,参考: