ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

7-7 成绩排序

2021-05-30 18:32:58  阅读:144  来源: 互联网

标签:分数 四舍五入 成绩 输出 int 66.66 排序


某班有n个学生,输入该班这n个学生的姓名、某三门课的成绩,计算各自的平均成绩,存放到一个结构数组中,将平均成绩作为关键字,然后把该这些学生的名字和平均成绩按从大到小的顺序排列输出.如果有相同分数则名字字典序小的在前。

输入格式:

第一行为人数n,n为正整数.接下来的n行,每行为每个学生的名字和他的3门课程的成绩(小数点后最多有2位小数), 中间用单个空格隔开.名字只包含字母且长度不超过20.即:学生的姓名 分数 分数 分数.

输出格式:

把成绩单按平均分数从高到低的顺序进行排序并输出,每行包含名字和分数,两项之间有一个空格.如果有相同分数则名字字典序小的在前.平均分输出小数点后2位. 4舍5入.

输入样例:

在这里给出一组输入。例如:

8
Kitty 66.66 66.66 66.67
Hanmeimei 66.66 66.66 66.66
Joey 92 58 96
Tim 28 68 32
Test 56 98 78
Sdt 78 65 90
Red 45 56 89
Wed 56 89 74

输出样例:

在这里给出相应的输出。排序输出结果按照四舍五入之后的值进行排序.例如:

Joey 82.00
Sdt 77.67
Test 77.33
Wed 73.00
Hanmeimei 66.66
Kitty 66.66
Red 63.33
Tim 42.67


解答

要点

  • 四舍五入
#include <stdio.h>
int main () {
\\整数四舍五入
	double a = 3.4;
	a = (int)(a + 0.5);
	printf("%lf", a);
\\小数点后两位四舍五入
	double a = 3.4;
	a = (int)(a + 0.5);
	printf("%lf", a);

	double b = 3.435;
	b = (int)(b*100 + 0.5);
	b /= 100;
	printf("%lf", b);
    return 0;
}
  • 排序

用最简单稳定的冒泡排序
strcmp(t[j+1].name,t[j].name)//字典序排序直接用strcmp实现

整体代码如下

#include<stdio.h>
struct stu
{
    char name[20];
    double a[4];
};
int main()
{
    int n;
    scanf("%d",&n);
    struct stu t[n],m,f;
    int i,j,k;
    int e;
    for(i=0; i<n; i++)
    {
        scanf("%s",&t[i].name);
        for(k=0; k<3; k++)
            scanf("%lf",&t[i].a[k]);
        t[i].a[3]=(t[i].a[2]+t[i].a[1]+t[i].a[0])*100/3.0;
        e=t[i].a[3]+0.5;
        t[i].a[3]=e/100.0;//这里为四舍五入操作;
    }
    for(j=0; j<n; j++)
        for(k=j+1; k<n; k++)
        {
                if(t[j].a[3]<t[k].a[3])
                {
                    m=t[j];
                    t[j]=t[k];
                    t[k]=m;
                }
                else if(t[j].a[3]==t[j+1].a[3])
                {
                    if(strcmp(t[j+1].name,t[j].name)>0)
                    {
                        f=t[j+1];
                        t[j+1]=t[j];
                        t[j]=m;
                    }
                }
        }
    for(i=0; i<n; i++)
    {
        printf("%s %.2lf\n",t[i].name,t[i].a[3]);
    }

    return 0;
}


标签:分数,四舍五入,成绩,输出,int,66.66,排序
来源: https://www.cnblogs.com/DTAAAAAA/p/14828626.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有