厦大C语言上机 1501 整理成绩

1501.整理成绩


时间限制: 1000 MS          内存限制: 65536 K
        
提交数: 99 (0 users)          通过数: 98 (95 users)


问题描述
以散乱顺序给定学生每一门课程的成绩,要求你编写程序将其按照一定的格式整理输出到指定的文件中。
(注意:本次练习采用文件操作,评测机无法评测,请同学们不要提交,自行检查运行结果。)


输入格式
第一行两个整数N,M。分别表示学生总人数,课程总数。
第二行一个字符串filename,表示输出文件的路径名。
接下来M行,每行一个字符串,表示课程名。
接下来NM行,每行由ID COURSE_NAME SCORE三个数据组成
ID表示学生编号(1<=ID<=N)
COURSE_NAME为课程名
SCORE 为该学生该门课程的成绩(成绩为整数)


输出格式
按照学生ID从小到大,课程名按字典序从小到大的顺序输出每个学生的成绩,输出格式要求如下:
对于每个学生,
第一行输出学生ID
接下来M行,每行输出COURSE_NAME SCORE
   COURSE_NAME为课程名
   SCORE 为该学生该门课程的成绩
最后输出一个空行


样例输入
2 2
score.txt
Math
Chinese
1 Math 10
2 Chinese 3
2 Math 99
1 Chinese 98


样例输出
(在文件score.txt中)
1
Chinese 98
Math 10
  
2
Chinese 3
Math 99


来源

xmu

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Student
{
    int id;
    char course_name[20];
    int score;
};

int cmp(const void *p, const void *q)
{
    struct Student a = *(struct Student *)p;
    struct Student b = *(struct Student *)q;
    return (a.id > b.id) || (a.id == b.id && strcmp(a.course_name, b.course_name) > 0);
}

int main()
{
    int n, m, i, j;
    char filename[50] = { 0 };
    char course_name[10][20] = { 0 };
    FILE *fp;
    struct Student list[50];

    scanf("%d %d", &n, &m);
    scanf("%s", filename);
    for (i = 1; i <= m; ++i)
        scanf("%s", course_name[i]);
    for (i = 1; i <= n*m; ++i)
        scanf("%d %s %d", &list[i].id, list[i].course_name, &list[i].score);
    qsort(list+1, n*m, sizeof(struct Student), cmp);

    fp = fopen(filename, "w");
    for (i = 1; i <= n; ++i)
    {
        fprintf(fp, "%d\n", i);
        for (j = 1; j <= m; ++j)
            fprintf(fp, "%s %d\n", list[m * (i-1) + j].course_name, list[m * (i-1) + j].score);
        fprintf(fp, "\n");
    }
    fclose(fp);

    return 0;
}


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值