结构体成绩分析

利用结构体,完成对三位学生的成绩分析

有一个班的5个学生,有3门课程。

1、求第一门课的平均分;

2、找出有两门以上课程不及格的学生,输出他们的学号和全部课程成绩及平均分

3、找出平均分在90分以上或全部课程成绩在85分以上的学生。

#include<stdio.h>
struct information 
{
    char name[32];
    int no;
    int s1;
    int s2;
    int s3;
};
int Average(struct information  *ps)
{
    double avg;
    avg=((ps[0].s1)+(ps[1].s1)+(ps[2].s1))/3;
    printf("avg=%lf\n" , avg);
    return 0;
}
int AverageStudent(struct information *ps , int *pavg)
{
    int i=0;
    for(i=0;i<3;i++)
    {
        pavg[i]=(ps[i].s1+ps[i].s2+ps[i].s3)/3;
    }
    return 0;
}
int Warning(struct information *ps,int *pavg)
{
    int i=0;
    for(i=0;i<3;i++)
    {
        if( ( (ps[i].s1<60) && (ps[i].s2<60) ) || ( (ps[i].s1<60)&&(ps[i].s3<60)) || ( (ps[i].s3<60) && (ps[i].s2<60) ))
        {
         printf("Warning!!!Name:%s No:%d 1score:%d 2score:%d 3score:%d avg:%d" ,ps[i].name , ps[i].no,ps[i].s1,ps[i].s2,ps[i].s3,pavg[i]);   
        }
    }
    return 0;
}
int Great(struct information *ps ,int *pa)
{
    int i=0;
    for(i=0;i<3;i++)
    {
        if( (pa[i]>90) || ( (ps[i].s1>85)&&(ps[i].s2>85)&&(ps[3].s3>85) ) )
        {
            printf("\nGreat student Name:%s",ps[i].name );
        }
    }
    return 0;
}
int main()
{
    int Avg[3]={0};
    struct information s[3]={
    {"st",11111,55,59,58},{"aa",22222,96,99,54},{"bb",33333,92,95,96}};
    Average(s);
    AverageStudent(s,Avg);
    Warning(s,Avg);
    Great(s,Avg);
    return 0;
}

分别编写三个函数来实现以上三个要求 struct student { char name[32]; int no; int score[3]; };

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
一个学生成绩分析系统可以有以下功能: 1. 输入学生信息和成绩数据 2. 统计每个学生的总分和平均分 3. 统计每个科目的平均分和总分 4. 输出每个学生的成绩单,包括每个科目的成绩、总分和平均分 5. 输出所有学生的平均分和总分 6. 根据学生的总分或平均分进行排序并输出排名 下面是一个简单的C++程序示例: ```c++ #include <iostream> #include <string> #include <vector> #include <algorithm> using namespace std; // 学生信息结构 struct Student { string name; // 姓名 int id; // 学号 vector<int> scores; // 分数 int total_score; // 总分 double avg_score; // 平均分 }; // 计算学生总分和平均分 void calc_student_score(Student& s) { s.total_score = 0; for (int score : s.scores) { s.total_score += score; } s.avg_score = static_cast<double>(s.total_score) / s.scores.size(); } // 计算每个科目的平均分和总分 void calc_subject_score(const vector<Student>& students, vector<int>& subject_total_scores, vector<double>& subject_avg_scores) { subject_total_scores.clear(); subject_avg_scores.clear(); int num_subjects = students[0].scores.size(); subject_total_scores.resize(num_subjects, 0); subject_avg_scores.resize(num_subjects, 0.0); for (const Student& s : students) { for (int i = 0; i < num_subjects; i++) { subject_total_scores[i] += s.scores[i]; } } for (int i = 0; i < num_subjects; i++) { subject_avg_scores[i] = static_cast<double>(subject_total_scores[i]) / students.size(); } } // 输出学生信息和成绩 void print_student(const Student& s) { cout << "姓名: " << s.name << endl; cout << "学号: " << s.id << endl; cout << "成绩: "; for (int score : s.scores) { cout << score << " "; } cout << endl; cout << "总分: " << s.total_score << endl; cout << "平均分: " << s.avg_score << endl; } // 输出所有学生的平均分和总分 void print_summary(const vector<Student>& students) { int total_score = 0; double avg_score = 0.0; for (const Student& s : students) { total_score += s.total_score; avg_score += s.avg_score; } avg_score /= students.size(); cout << "所有学生总分: " << total_score << endl; cout << "所有学生平均分: " << avg_score << endl; } // 按总分排序比较函数 bool compare_total_score(const Student& s1, const Student& s2) { return s1.total_score > s2.total_score; } // 按平均分排序比较函数 bool compare_avg_score(const Student& s1, const Student& s2) { return s1.avg_score > s2.avg_score; } int main() { vector<Student> students; vector<int> subject_total_scores; vector<double> subject_avg_scores; // 输入学生信息和成绩数据 int num_students, num_subjects; cout << "请输入学生人数: "; cin >> num_students; cout << "请输入科目数: "; cin >> num_subjects; students.resize(num_students); for (int i = 0; i < num_students; i++) { cout << "请输入第" << i + 1 << "个学生的姓名和学号: "; cin >> students[i].name >> students[i].id; students[i].scores.resize(num_subjects); cout << "请输入第" << i + 1 << "个学生的成绩: "; for (int j = 0; j < num_subjects; j++) { cin >> students[i].scores[j]; } calc_student_score(students[i]); } // 统计每个科目的平均分和总分 calc_subject_score(students, subject_total_scores, subject_avg_scores); // 输出每个科目的平均分和总分 cout << "每个科目的总分和平均分: " << endl; for (int i = 0; i < num_subjects; i++) { cout << "科目" << i + 1 << "总分: " << subject_total_scores[i] << endl; cout << "科目" << i + 1 << "平均分: " << subject_avg_scores[i] << endl; } // 输出每个学生的成绩单 cout << "每个学生的成绩单: " << endl; for (const Student& s : students) { print_student(s); } // 输出所有学生的平均分和总分 print_summary(students); // 按总分排序并输出排名 sort(students.begin(), students.end(), compare_total_score); cout << "按总分排名: " << endl; for (int i = 0; i < num_students; i++) { cout << "第" << i + 1 << "名: " << students[i].name << " 总分: " << students[i].total_score << endl; } // 按平均分排序并输出排名 sort(students.begin(), students.end(), compare_avg_score); cout << "按平均分排名: " << endl; for (int i = 0; i < num_students; i++) { cout << "第" << i + 1 << "名: " << students[i].name << " 平均分: " << students[i].avg_score << endl; } return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值