c语言 读取txt文件并排序输出

您所在的位置:网站首页 c语言读取txt文件内容代码 c语言 读取txt文件并排序输出

c语言 读取txt文件并排序输出

2024-07-12 16:29| 来源: 网络整理| 查看: 265

读取txt文件并排序输出 现实问题设计思路实现代码运行结果

现实问题

这个问题是问答区一个问友问到的问题,问题大概是这样子的 score.txt 是100名学生的成绩数据,每行数据从左至右是学号、英语分数、数学分数和语文分数,用空格隔开。 输入整数 n (1≤ n ≤100)时,创建一个程序来输出显示三个科目成绩总分在前n位学生的学生 id,以及目标学生的总分。 但是,如果总分相同,则将三门课程分数中最低分较高的学生视为更高的排名; 如果分数最低分也相同,则将学号较小的学生视为更高的排名。 在编写程序时,我们只需要利用 score.txt 中描述的学生人数100人编写代码,只有当学生人数为100人时才能正常工作。

设计思路

1.分析题,定义一个存储学生成绩表的结构体。 2.利用fopen函数打开score.txt,再利用fget函数读取每一行数据,再利用strtok函数分割每一行,得到id,英语分数,数学分数,语文分数 3.将读取到的每个学生的成绩按照题目中说的总分高的排在前面,如果两个学生三科总分一样的话,就比较这两位学生三科成绩中分数最低的那科, 三科成绩中分数最低的那科的分数高的那位学生排在前面,如果两位学生的三科总分一样,而且两位学生三科成绩中分数最低的那科的分数也一样, 则将学号较小的学生视为更高的排名。 4.步骤3中读取到的学生,放在数组中,都已经排序排好了的,所以不管程序输入1-100之间的任何数,直接输出到屏幕,就可以啦

实现代码 #include #include #include #define MIN 1 #define MAX 100 #define BUFF_SIZE 100 struct S_STUDENT { int id; int english; //英语分数 int math; //数学分数 int chinese; //语文分数 int total; //总分 int min; //最低分 }; int output_student_score(const char* pScoreFile, int n); int find_min(int a, int b); void insert_student(struct S_STUDENT *pStudent, int len, struct S_STUDENT stu); int main() { int n = 0; printf("please input a number(1-100):"); int ret = scanf("%d", &n); if (ret == 0) { fprintf(stderr, "输入的不是数字\n"); return -1; } if (n > MAX || n pSrcStu->total) return 1; if (pDesStu->total == pSrcStu->total) { if (pDesStu->min > pSrcStu->min) return 1; if (pDesStu->min == pSrcStu->min) { if (pDesStu->id id) return 1; } } return 0; } int output_student_score(const char* pScoreFile, int n) { FILE *fp = fopen(pScoreFile, "r"); if (!fp) { fprintf(stderr, "打开文件错误"); return -1; } char readBuf[BUFF_SIZE]; char *pStr = NULL; struct S_STUDENT student[MAX]; int row = 0; while(fgets(readBuf, BUFF_SIZE, fp)) { struct S_STUDENT stu; int column = 0; pStr = strtok(readBuf, " "); while(pStr) { switch (column) { case 0: stu.id = atoi(pStr); break; case 1: stu.english = atoi(pStr); break; case 2: stu.math = atoi(pStr); break; default: stu.chinese = atoi(pStr); break; } pStr = strtok(NULL, " "); column++; } stu.total = stu.english + stu.math + stu.chinese; stu.min = find_min(find_min(stu.english, stu.math), stu.chinese); insert_student(student, row, stu); row++; } fclose(fp); int i; for (i = 0; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3