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
来源
时间限制: 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;
}