Description:
以散乱顺序给定学生每一门课程的成绩,要求你编写程序将其按照一定的格式整理输出到指定的文件中。
Input:
第一行两个整数N,M。分别表示学生总人数,课程总数。
第二行一个字符串filename,表示输出文件的路径名。
接下来M行,每行一个字符串,表示课程名。
接下来NM行,每行由ID COURSE_NAME SCORE三个数据组成:
ID表示学生编号(1 <= ID <= N)
COURSE_NAME为课程名
SCORE 为该学生该门课程的成绩(成绩为整数)
Output:
按照学生ID从小到大,课程名按字典序从小到大的顺序输出每个学生的成绩,输出格式要求如下:
对于每个学生,
第一行输出学生ID
接下来M行,每行输出COURSE_NAME SCORE
COURSE_NAME为课程名
SCORE 为该学生该门课程的成绩
最后输出一个空行
Sample Input:
2 2
score.txt
Math
Chinese
1 Math 10
2 Chinese 3
2 Math 99
1 Chinese 98
Sample Output(score.txt):
1
Chinese 98
Math 10
2
Chinese 3
Math 99
思路:用结构体解决
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Student
{
char COUSE_NAME[25];
int SCORE;
int ID;
}st[1024];
int cmp(const void*a, const void*b)
{
struct Student k1 = *(struct Student*)a;
struct Student k2 = *(struct Student*)b;
return strcmp((k1.COUSE_NAME), (k2.COUSE_NAME))>0;
}
int main()
{
int m, n;
char filename[25],cousename[1024][25];
scanf("%d %d", &n, &m);
scanf("%s", filename);
for(int i=0; i<m; i++)
{
scanf("%s", cousename[i]);
}
for(int i=0; i<n*m; i++)
{
scanf("%d %s %d", &st[i].ID, st[i].COUSE_NAME, &st[i].SCORE);
}
qsort(st, n*m, sizeof(st[0]),cmp);
FILE *fp;
if((fp=fopen(filename,"w"))==NULL)
{
printf("can not open file\n");
exit(0);
}
for(int i=1; i<=n; i++)
{
fprintf(fp, "%d\n", i);
for(int j=0; j<m*n; j++)
{
if(st[j].ID == i)
{
fputs(st[j].COUSE_NAME, fp);
fprintf(fp, "% d\n", st[j].SCORE);
}
}
}
fclose(fp);
return 0;
}