2024.2.26程设能力实训 排序专题 1-成绩排序

本文分析了使用二维数组进行成绩排序时出现的三个错误:1.换位置时仅更换成绩未换学号;2.数据类型转换不正确(long->lf,longlong->llf);3.忽视数组索引从0开始。作者还提供了结构体版本的代码作为优化参考。
摘要由CSDN通过智能技术生成

用二维数组做的,犯的错误有:

1.换位置的时候只换了成绩而没有换学号,需要全换【这样看,就不如用结构体】
2.数据类型,范围。long->lf,long long->llf

3.数组大小,后面一旦涉及,切记从0开始 

/*
5
10002130201 90
10002130230 80
10002130231 85
10002130148 48
10002130167 90
*/
//鍏ㄦ崲
//鏁版嵁绫诲瀷锛岃寖鍥?
#include <stdio.h>
#include <stdlib.h>

int main()
{//泄袛褏袣
    int i,j,n;
    scanf("%d",&n);
    long long stu[n][2];
    for(i=0;i<n;i++){
        for(j=0;j<2;j++){
            scanf("%lld",&stu[i][j]);
        }
    }
//械械锌袪
    for(i=0;i<n-1;i++){
        for(j=0;j<n-1;j++){
            if(stu[j][1]<stu[j+1][1]){
                long long temp0=stu[j][0];
                stu[j][0]=stu[j+1][0];
                stu[j+1][0]=temp0;
                long long temp1=stu[j][1];
                stu[j][1]=stu[j+1][1];
                stu[j+1][1]=temp1;
            }
            if(stu[j][1]==stu[j+1][1]&&stu[j][0]>stu[j+1][0]){
                long long tem0=stu[j][0];
                stu[j][0]=stu[j+1][0];
                stu[j+1][0]=tem0;
                long long tem1=stu[j][1];
                stu[j][1]=stu[j+1][1];
                stu[j+1][1]=tem1;
            }
        }
    }
//泄袛衼袞
    for(i=0;i<n;i++){
        if(stu[i][1]>=60)
        printf("%lld %lld\n",stu[i][0],stu[i][1]);
    }
}

结构体版本:

typedef struct{
long long int name;
int score;
}STU;
STU Stu[100];
int main(){
    STU temp;
    int n;
//输入n
scanf("%d",&n);
//输入学号,成绩
for(int i=0;i<n;i++)
scanf("%lld %d",&Stu[i].name,&Stu[i].score);
//排序
for(int i=0;i<n;i++){
    for(int j=i+1;j<n;j++){
        if(Stu[i].score<Stu[j].score){
            temp=Stu[i];
            Stu[i]=Stu[j];
            Stu[j]=temp;
        }
        if(Stu[i].score==Stu[j].score){
            if(Stu[i].name>Stu[j].name)
{
            temp=Stu[i];
            Stu[i]=Stu[j];
            Stu[j]=temp;
        }
    }
}
}
for(int i=0;Stu[i].score>=60;i++)
    printf("%lld %d\n",Stu[i].name,Stu[i].score);
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值