c++ - 增加对每个学生的分数进行排名的功能
问题描述
由于我的课程,我刚刚开始使用 dev c++ 和计算机语言现在,你能帮忙添加一个对每个学生的分数进行排名的功能吗?我已经做了平均,总计,现在我只需要它来显示每个学生属于哪个等级。它不必按升序或降序排列,而只需根据总值显示哪个排名。我只需要打开一个已经准备好分数和名称的文本文档,然后编译将显示排名
typedef struct {
int number;
TCHAR name[10];
int kor;
int math;
int eng;
int tot;
float avg;
void scoreCalculatorWithName(HWND hwnd, HWND hSrc, HWND hDst)
{
TCHAR buff[BUFF_SIZE];
DWORD fileSize;
char* tok;
int stdNum;
STUDENT_SCORE stdScore[MAX_STUDENT_NUM];
fileSize = GetWindowText(hSrc, buff, BUFF_SIZE);
buff[fileSize + 1] = NULL;
stdNum = 0;
tok = strtok(buff, "\r\n");
while (tok != NULL) {
sscanf(tok, "%d %s %d %d %d\r\n", &stdScore[stdNum].number, &stdScore[stdNum].name,
&stdScore[stdNum].kor, &stdScore[stdNum].math,
&stdScore[stdNum].eng, &stdScore[stdNum].rank);
tok = strtok(NULL, "\r\n");
stdNum++;
}
for (int i = 0; i < stdNum; i++) {
stdScore[i].tot = stdScore[i].kor + stdScore[i].math + stdScore[i].eng;
stdScore[i].avg = (float)stdScore[i].tot / 3;
}
TCHAR str[MAX_DATA_NUM];
sprintf(buff, "%-s\t%-s\t%-s\t%-s\t%-s\t%-s\t%-s\r\n",
"Number", "name", "Kor", "Math", "Eng", "Total", "Average");
for (int i = 0; i < stdNum; i++) {
sprintf(str, "%-d\t%-s\t%-d\t%-d\t%-d\t%-d\t%-.1f\r\n",
stdScore[i].number, stdScore[i].name,
stdScore[i].kor, stdScore[i].math, stdScore[i].eng,
stdScore[i].tot, stdScore[i].avg);
strcat(buff, str);
}
strcat(buff, "\r\n");
SetWindowText(hDst, buff);
}
解决方案
为了给每个学生分配一个排名,我们首先对一个指向学生的指针向量进行排序:
std::vector<STUDENT_SCORE *> ranked;
for (int i = 0; i < stdNum; i++) {
ranked.emplace_back(&stdScore[i]);
}
std::sort(begin(ranked), end(ranked),
[](STUDENT_SCORE * left, STUDENT_SCORE * right) { return left->tot > right->tot; });
然后我们可以分配等级:
for (int i = 0; i < stdNum; i++) {
ranked[i]->rank = i+1;
}
推荐阅读
- python - TypeError: write_register() 接受 3 个位置参数,但给出了 4 个
- node.js - 我可以通过 Firebase 云功能 Admin SDK 访问 twitter 身份验证数据吗?如果是这样,怎么做?
- python - 计算一个非常大的整数的素数
- asynchronous - 当 lib 用户可能失败时如何使异步 rust lib 安全(参考)取决于调用和回调的单元借用检查
- swiftui - 我不确定为什么我的 imagePickerController Coordinator 没有触发 didFinishPickingMediaWithInfo
- r - 正则表达式中的 %s+% 是什么意思?
- sql - 对表达式中的子表达式进行分类
- jquery - CSS 在 safari 上不工作,在 Chrome 上工作正常
- swift - Filter vs For,哪个更便宜?
- c++ - 播放器未显示在 [C++/SFML] 的窗口中