c++实现成绩排序,输入元素为成绩数组,输出对应学生成绩的名次

思路:

 先将所给的成绩数组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所进行的排序方法为选择排序:

参考:

c++编写程序实现选择排序https://blog.csdn.net/Patrickzc/article/details/121730060?spm=1001.2014.3001.5501https://blog.csdn.net/Patrickzc/article/details/121730060?spm=1001.2014.3001.5501

这段代码所以的初始数据也可以改为手动输入,用循环便可以实现:

输入数组,参考:

用宏定义来决定输入数组大小https://blog.csdn.net/Patrickzc/article/details/121737847https://blog.csdn.net/Patrickzc/article/details/121737847

利用new来分配动态空间,参考:

c++运用new运算符创建数组https://blog.csdn.net/Patrickzc/article/details/121723998?spm=1001.2014.3001.5501https://blog.csdn.net/Patrickzc/article/details/121723998?spm=1001.2014.3001.5501

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值