You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++学生信息成绩系统修复:均值、标准差及等级计算问题求助

学生成绩管理完整C++实现
#include <iostream>
#include <string>
#include <cmath>
#include <iomanip>

using namespace std;

// 定义学生结构体
struct Student {
    string regno;          // 学号
    string courseid;       // 课程ID
    int unitsRegistered;   // 注册科目数量
    int unitsmarks[10];    // 各科目成绩(假设最多10门)
    double mean;           // 个人平均成绩
    char grade;            // 成绩等级
};

// 输入单个学生信息
void getData(Student &s) {
    cout << "输入学号: ";
    cin >> s.regno;
    cout << "输入课程ID: ";
    cin >> s.courseid;
    cout << "输入注册科目数量: ";
    cin >> s.unitsRegistered;
    
    // 输入每门科目成绩
    cout << "输入各科目成绩: ";
    for (int i = 0; i < s.unitsRegistered; ++i) {
        cin >> s.unitsmarks[i];
    }
}

// 计算个人平均成绩
void computeMean(Student &s) {
    int total = 0;
    for (int i = 0; i < s.unitsRegistered; ++i) {
        total += s.unitsmarks[i];
    }
    s.mean = static_cast<double>(total) / s.unitsRegistered;
}

// 根据平均成绩计算等级
void computeGrade(Student &s) {
    if (s.mean >= 90) {
        s.grade = 'A';
    } else if (s.mean >= 80) {
        s.grade = 'B';
    } else if (s.mean >= 70) {
        s.grade = 'C';
    } else if (s.mean >= 60) {
        s.grade = 'D';
    } else {
        s.grade = 'F';
    }
}

// 打印单个学生信息
void printStudent(const Student &s) {
    cout << "\n=== 学生信息 ===" << endl;
    cout << "学号: " << s.regno << endl;
    cout << "课程ID: " << s.courseid << endl;
    cout << "注册科目数: " << s.unitsRegistered << endl;
    cout << "科目成绩: ";
    for (int i = 0; i < s.unitsRegistered; ++i) {
        cout << s.unitsmarks[i] << " ";
    }
    cout << endl;
    cout << fixed << setprecision(2);
    cout << "平均成绩: " << s.mean << endl;
    cout << "成绩等级: " << s.grade << endl;
}

int main() {
    const int STUDENT_COUNT = 10;
    Student students[STUDENT_COUNT];
    
    // 输入所有学生信息并计算均值、等级
    for (int i = 0; i < STUDENT_COUNT; ++i) {
        cout << "\n输入第 " << i+1 << " 名学生信息:" << endl;
        getData(students[i]);
        computeMean(students[i]);
        computeGrade(students[i]);
    }
    
    // 打印所有学生信息
    cout << "\n==================== 所有学生信息 ====================" << endl;
    for (int i = 0; i < STUDENT_COUNT; ++i) {
        printStudent(students[i]);
    }
    
    // 计算班级统计数据
    double classTotal = 0;
    double highestMean = students[0].mean;
    double lowestMean = students[0].mean;
    
    for (int i = 0; i < STUDENT_COUNT; ++i) {
        classTotal += students[i].mean;
        if (students[i].mean > highestMean) {
            highestMean = students[i].mean;
        }
        if (students[i].mean < lowestMean) {
            lowestMean = students[i].mean;
        }
    }
    
    double classMean = classTotal / STUDENT_COUNT;
    
    // 计算标准差
    double sumSquaredDiff = 0;
    for (int i = 0; i < STUDENT_COUNT; ++i) {
        double diff = students[i].mean - classMean;
        sumSquaredDiff += diff * diff;
    }
    double stdDeviation = sqrt(sumSquaredDiff / STUDENT_COUNT);
    
    // 打印班级统计结果
    cout << "\n==================== 班级统计数据 ====================" << endl;
    cout << fixed << setprecision(2);
    cout << "班级平均成绩: " << classMean << endl;
    cout << "班级成绩标准差: " << stdDeviation << endl;
    cout << "班级最高平均成绩: " << highestMean << endl;
    cout << "班级最低平均成绩: " << lowestMean << endl;
    
    return 0;
}

代码说明

结构体设计

Student结构体包含需求所有核心字段,额外添加mean和grade存储计算后的个人均值与等级,避免重复计算。

核心函数实现

  • getData:收集单个学生基础信息,包括学号、课程ID、注册科目数及对应成绩,输入逻辑直接清晰。
  • computeMean:遍历学生所有科目成绩求和,除以科目数得到平均成绩,用static_cast<double>保证浮点数结果。
  • computeGrade:根据均值区间划分等级,区间规则可按需调整(当前为90+A、80-89B、70-79C、60-69D、低于60F)。
  • printStudent:格式化输出学生全部信息,包含原始成绩、均值和等级,提升可读性。

班级统计逻辑

完成10名学生数据录入后,通过遍历数组:

  1. 累加所有学生均值得到班级总分,计算班级均值;
  2. 实时更新最高/最低均值;
  3. 计算每个学生均值与班级均值的差的平方和,开平方得到总体标准差。

内容的提问来源于stack exchange,提问作者Peaches Njenga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 18:27:42