现有学生成绩信息文件,内容如下:
姓名 学号 语文 数学 英语
张明明 01 67 78 82
李成友 02 78 91 88
张辉灿 03 68 82 56
王露 04 56 45 77
陈东明 05 67 38 47
试编写一管理模拟系统,要求如下:
a)首先输出三科成绩中有补考的学生输出。
b)输入一个学生学号后,能查找到此学生的信息并输出结果(采用查找方法实现)
c)要求使用结构体,链或数组等实现上述要求.
d)先按总成绩高的优先输出,总成绩相同学号小的优先输出
Home | Web Board | ProblemSet | Standing | Status | Statistics |
第一行输入两个整数n,p(1 <= n <= 2000, 1 <= p <= 200000)分别表示学生的总数和查询数量。接下来n行每行输入四个数据,格式如下:
姓名(由英文字母组成,不超过20个字符),学号(由int范围内的整数),语文成绩,数学成绩,英语成绩。规定每门课程都是60分为及格线。
接下来p行每行需要输入一个整数,代表需要查询学生的学号。
对于每一个询问,如果该生存在,则输出该学生的信息;如果该学生不存在,则输出“NOT FOUND”。
#include <iostream> #include <algorithm> #include <stdio.h> using namespace std; #define max 2005 struct Type { int sno; char name[22]; int china, math, english,sum; }; struct Student { Type r[max + 1]; int length ; }; bool cmp (Type a, Type b) { return a.sno<b.sno; } bool com (Type a, Type b) { if(a.sum!=b.sum) return a.sum>b.sum; else return a.sno<b.sno; } //对全部学生的二分查找 int search(int sno,Student &s) { int low = 1, high = s.length ; while (low <= high) { int m = (low + high) / 2; if(sno == s.r[m].sno) return m; else if (sno < s.r[m].sno) high = m - 1; else low = m + 1; } return 0; } int main() { int s_num, q_num; // freopen("out.txt", "w", stdout); Student s,stub; //s是全部学生的集合,stub是补考的学生的集合 s.length = 0; stub.length = 0; scanf("%d %d",&s_num,&q_num); int index = 1; for (int i = 1; i <= s_num; i++) { scanf("%s %d %d %d %d",s.r[i].name,&s.r[i].sno,&s.r[i].china,&s.r[i].math,&s.r[i].english); s.r[i].sum = s.r[i].china + s.r[i].math + s.r[i].english; s.length++; if (s.r[i].china < 60 || s.r[i].english < 60 || s.r[i].math < 60) { stub.r[index++] = s.r[i]; stub.length++; } } sort(stub.r+1,stub.r+stub.length+1,com); sort(s.r+1,s.r+s.length+1,cmp); for (int j = 1; j <= stub.length; j++) { printf("%s %d %d %d %d\n",stub.r[j].name,stub.r[j].sno,stub.r[j].china,stub.r[j].math,stub.r[j].english); } for (int i = 1; i <= q_num; i++) { int sno; scanf("%d",&sno); int m = search(sno, s); if(m == 0) printf("NOT FOUND\n"); else { printf("%s %d %d %d %d\n",s.r[m].name,s.r[m].sno,s.r[m].china,s.r[m].math,s.r[m].english); } } }