关于#c++#的问题,请各位专家解答!

img


大家可以给我具体的思路吗,我脑子有点乱,而且刚刚学不久,有点吃力

 #include <iostream>
#include <cstring> // 使用 strlen() 和 strcmp()
using namespace std;
 
// 学生结构体
struct Student {
    char id[20];        // 学号
    char name[20];      // 姓名
    int math_score;     // 高数成绩
    int english_score;  // 英语成绩
};
 
// 输入学生信息
void input_student(Student* students, int n) {
    int i, j;
    for (i = 0; i < n; i++) {
        cout << "请输入第" << i + 1 << "个学生的学号,姓名,高数成绩和英语成绩:" << endl;
        cin >> students[i].id >> students[i].name >> students[i].math_score >> students[i].english_score;
        // 判断输入合法性
        if (strlen(students[i].id) != 10) {
            cout << "学号长度不正确,请重新输入!" << endl;
            i--;
            continue;
        }
        for (j = 0; j < i; j++) {
            if (strcmp(students[i].id,students[j].id) == 0) {
                cout << "学号重复,请重新输入!" << endl;
                i--;
                break;
            }
        }
        if (students[i].math_score < 0 || students[i].math_score > 100) {
            cout << "高数成绩不合法,请重新输入!" << endl;
            i--;
            continue;
        }
        if (students[i].english_score < 0 || students[i].english_score > 100) {
            cout << "英语成绩不合法,请重新输入!" << endl;
            i--;
            continue;
        }
    }
}
 
// 输出学生信息
void output_student(Student* students, int n) {
    cout << "学号\t姓名\t高数成绩\t英语成绩" << endl;
    for (int i = 0; i < n; i++) {
        cout << students[i].id << "\t" << students[i].name << "\t" 
             << students[i].math_score << "\t\t" << students[i].english_score << endl;
    }
}
 
// 根据学号查询学生信息
void search_student(Student* students, int n) {
    char search_id[20];
    int flag = 0;
    cout << "请输入要查询的学生学号:" << endl;
    cin >> search_id;
    for (int i = 0; i < n; i++) {
        if (strcmp(students[i].id, search_id) == 0) {
            cout << students[i].name << "的高数成绩为" 
                 << students[i].math_score << ",英语成绩为" << students[i].english_score << endl;
            flag = 1;
            break;
        }
    }
    if (flag == 0) {
        cout << "无此学生!" << endl;
    }
}
 
int main() {
    int n;
    Student* students;
    cout << "请输入学生个数:" << endl;
    cin >> n;
    students = new Student[n];
    input_student(students, n);
    output_student(students, n);
    while (1) {
        search_student(students, n);
        cout << "输入0退出,任意键继续查询:" << endl;
        int flag;
        cin >> flag;
        if (flag == 0) {
            break;
        }
    }
    delete[] students;
    return 0;
}
 

该回答引用ChatGPT4与博主@晓码自在合作编写:

这里是C++实现该实验的思路:

  1. 定义一个Student类,包含学号、姓名、高数成绩、英语成绩这4个属性。
  2. 根据输入的学生个数n,使用new申请n个Student对象的空间,存入数组students中。
  3. 使用for循环,逐个输入每个学生的信息,存入students数组,并进行数据校验。
  4. 打印成绩,并统计各科最高分、最低分、平均分。
  5. 定义一个queryScore函数,提供成绩查询。使用死循环获取学号输入,lookup students数组找到相应学生,打印成绩。如果找不到则提示重新输入。
  6. 程序结束前,使用delete []释放students数组的空间。

具体代码如下:

cpp
#include <iostream>
using namespace std;

struct Student {
    int id; 
    string name;
    int mathScore; 
    int englishScore;
};

int main() {
    cout << "请输入学生个数:";
    int n;
    cin >> n;
    
    Student* students = new Student[n];
    
    // 输入每个学生信息,存入students数组
    for (int i = 0; i < n; i++) {
        cout << "请输入学生" << i + 1 << "的信息:" << endl;
        cin >> students[i].id >> students[i].name >> students[i].mathScore >> students[i].englishScore;
    }
    
    // 打印并统计成绩
    ...
    
    // 查询成绩函数
    void queryScore() {
        while (true) {
            int id;
            cout << "请输入要查询的学号:";
            cin >> id;
            for (int i = 0; i < n; i++) {
                if (students[i].id == id) {
                    cout << "学生" << id << "的成绩为:" << endl;
                    cout << "高数:" << students[i].mathScore << endl;
                    cout << "英语:" << students[i].englishScore << endl;  
                    return;
                }
            }
            cout << "没有找到该学号,请重新输入!" << endl;
        }
    }
    
    queryScore();
    
    delete [] students;
}