C语言给出班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出,如果有相同分数则名字字典序小的在前

思路分析:
先同步输入一行名字和成绩,使用循环,输入四次。
输入完 在一个循环里面使用if 先将成绩进行冒泡法比较,同时将成绩和名字使用第三方变量和字符数组进行相应的转换,else的嵌套进行比较成绩相同的,在成绩相同的里面,比较名字的高低,同时使用第三方变量和字符数组进行相应的转换,最后遍历输出两个数组
注意:此代码并没有判断输入成绩是否在0-100的区间,你们可以自行改善,我就懒得写了。

代码:
#include <stdio.h>
#include <string.h>
int main()
{
 int n;
 scanf("%d",&n);
 char name[n][20];
 int score[n];
for(int i=0;i<n;i++)
scanf("%s %d",name[i],&score[i]);
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
{
    if(score[i]<score[j]){
        int exchangeScore;
        exchangeScore=score[i];
        score[i]=score[j];
        score[j]=exchangeScore;
        char exchangename[20];
        strcpy(exchangename,name[i]);
        strcpy(name[i],name[j]);
        strcpy(name[j],exchangename);
        }
        else if(score[i]==score[j]){
                if(strcmp(name[i],name[j])>0)
                {   int exchangeScore1;
                    exchangeScore1=score[i];
                    score[i]=score[j];
                    score[j]=exchangeScore1;
                    char exchangename1[20];
                    strcpy(exchangename1,name[i]);
                    strcpy(name[i],name[j]);
                    strcpy(name[j],exchangename1);
                }
            }

}
for(int i=0;i<n;i++)
printf("%s %d\n",name[i],score[i]);

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值