用c++程序实现
时间: 2023-07-04 08:27:31 浏览: 65
好的,下面是使用 C++ 实现的代码示例:
```cpp
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
const int N = 5 * 50 * 6;
struct Student {
int id; // 学生编号
double score[6]; // 六门课程的成绩
double avg; // 平均成绩
} stu[N];
bool cmp(const Student &a, const Student &b) {
return a.avg > b.avg; // 按平均成绩从大到小排序
}
void writeBinaryFile(const char *filename) {
ofstream fout(filename, ios::binary);
for (int i = 0; i < N; i++) {
fout.write((char *)&stu[i], sizeof(Student)); // 写入二进制文件
}
fout.close();
}
void writeTextFile(const char *filename) {
ofstream fout(filename);
for (int i = 0; i < N; i++) {
fout << i + 1 << "\t"; // 编号
fout << stu[i].id << "\t"; // 学生编号
for (int j = 0; j < 6; j++) {
fout << stu[i].score[j] << "\t"; // 六门课程的成绩
}
fout << stu[i].avg << endl; // 平均成绩
}
fout.close();
}
void searchScore(int id, int course) {
for (int i = 0; i < N; i++) {
if (stu[i].id == id) {
cout << "学生 " << id << " 的 ";
if (course == -1) {
cout << "全部成绩为:";
for (int j = 0; j < 6; j++) {
cout << stu[i].score[j] << " ";
}
} else {
cout << "第 " << course << " 门成绩为:" << stu[i].score[course - 1];
}
cout << endl;
return;
}
}
cout << "学生 " << id << " 不存在!" << endl;
}
void searchRank(int id) {
int rank[N] = {0}; // 排名数组
for (int i = 0; i < N; i++) {
rank[i] = 1;
for (int j = 0; j < N; j++) {
if (stu[i].avg < stu[j].avg) {
rank[i]++;
}
}
}
for (int i = 0; i < N; i++) {
if (stu[i].id == id) {
cout << "学生 " << id << " 的平均成绩排名为:" << rank[i] << endl;
return;
}
}
cout << "学生 " << id << " 不存在!" << endl;
}
int main() {
// 读入成绩记录
ifstream fin("input.txt");
for (int i = 0; i < N; i++) {
fin >> stu[i].id;
for (int j = 0; j < 6; j++) {
fin >> stu[i].score[j];
stu[i].avg += stu[i].score[j];
}
stu[i].avg /= 6;
}
fin.close();
// 排序并输出到文件
sort(stu, stu + N, cmp);
writeBinaryFile("output.bin");
writeTextFile("output.txt");
// 查找成绩和排名
searchScore(10, 3);
searchRank(20);
return 0;
}
```
以上代码仅为示例,您可以根据具体需求进行修改和优化。