关于空白文章的一个有趣问题

有了您的指点,加油加油~我在本次实验遇到的困难与思考点较多,难度确实有提升。首先,要思考结构体的要求,哈哈

代码和样例计算结果截图如下,望采纳,有问题欢迎随时沟通,再帮你看。

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 10010;

// 定义一个结构体,用来存储每个学生的信息
struct Student
{
    string name; // 姓名
    double grade[6]; // 成绩
    double weight_grade; // 加权成绩
}stu[N];

// 定义一个数组,用来存储每门课的学分
int w[6];

// 比较函数,用来比较两个学生的加权成绩
bool cmp(Student s1, Student s2)
{
    if (s1.weight_grade != s2.weight_grade)
    {
        return s1.weight_grade > s2.weight_grade;
    }
    else
    {
        for (int i = 1; i <= 5; i ++ )
        {
            if (s1.grade[i] != s2.grade[i])
            {
                return s1.grade[i] > s2.grade[i];
            }
        }
    }
    return s1.name < s2.name;
}

int main()
{
    // 输入每门课的学分
    int total_weight = 0; // 总的权重
    for (int i = 1; i <= 5; i ++ )
    {
        cin >> w[i];
        total_weight += w[i];
    }

    int n;
    cin >> n;

    // 输入每个学生的信息
    for (int i = 0; i < n; i ++ )
    {
        cin >> stu[i].name;
        for (int j = 1; j <= 5; j ++ )
        {
            cin >> stu[i].grade[j];
        }
    }

    // 计算每个学生的加权成绩
    for (int i = 0; i < n; i ++ )
    {
        stu[i].weight_grade = 0;
        for (int j = 1; j <= 5; j ++ )
        {
            stu[i].weight_grade += stu[i].grade[j] * w[j];
        }
        stu[i].weight_grade /= total_weight; // 计算加权平均分
    }

    // 对所有学生的加权成绩进行排序
    sort(stu, stu + n, cmp);

    // 输出排序后的结果
    for (int i = 0; i < n; i ++ )
    {
        cout << stu[i].name << " ";
        printf("%.2lf", stu[i].weight_grade);
        cout << endl;
    }

    return 0;
}

img

写个学生数据结构,包括姓名,成绩和加权成绩然后排序

如有帮助,望采纳

M 个学生 N 门课
#include <stdio.h>
#define M 5
#define N 3
main()
{
int i,j,k;
float sum,temp;
float a[M][N];//={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
float aver[M];
for(i=0;i<M;i++)
for(j=0;j<N;j++)
{scanf("%f,",&a[i][j]); }
printf("Src=\n");
for(i=0;i<M;i++)
{
printf("\n** No=%d **\n", i+1);
for(j=0;j<N;j++)
printf("%5.1f\t",a[i][j] );
}
for(i=0;i<M;i++)
{
sum=0;
for(j=0;j<N;j++)
sum +=a[i][j];
aver[i] = sum / N;
}
for(j=0;j<M;j++)
{
for (i=0;i<M-j-1;i++)
if (aver[i]>aver[i+1])
{
temp=aver[i];
aver[i]=aver[i+1];
aver[i+1]=temp;
}
}
printf("\n********Desc=*********\n");
for(i=0;i<M;i++)
printf("%7.2f,",aver[i] );
printf("\n");
}