(四)编写程序学生数据包括:学号、姓名和3门课程的成绩。现有5个学生,请定义一个结构体并定义相应的变量;

(四)编写程序学生数据包括:学号、姓名和3门课程的成绩。现有5个学生,请定义一个结构体并定义相应的变量;对定义的变量从键盘输入所需的具体数据,然后输出学生的平均成绩,输出项包括学生的学号、姓名及平均成绩;对5名学生按照平均成绩进行排序后输出。


using System;

class Student
{
    public int id { get; set; }
    public string name { get; set; }
    public int score1 { get; set; }
    public int score2 { get; set; }
    public int score3 { get; set; }
    public double average { get { return (score1 + score2 + score3) / 3.0; } }
}

class Program
{
    static void Main(string[] args)
    {
        Student[] students = new Student[5];


        for (int i = 0; i < students.Length; i++)
        {
            Console.WriteLine("请输入第 {0} 个学生的信息:", i + 1);
            students[i] = new Student();
            Console.Write("学号:");
            students[i].id = int.Parse(Console.ReadLine());
            Console.Write("姓名:");
            students[i].name = Console.ReadLine();
            Console.Write("成绩1:");
            students[i].score1 = int.Parse(Console.ReadLine());
            Console.Write("成绩2:");
            students[i].score2 = int.Parse(Console.ReadLine());
            Console.Write("成绩3:");
            students[i].score3 = int.Parse(Console.ReadLine());
            Console.WriteLine();
        }


        Console.WriteLine("学生平均成绩如下:");
        foreach (Student student in students)
        {
            Console.WriteLine("{0}\t{1}\t{2:F2}", student.id, student.name, student.average);
        }
        Console.WriteLine();

    
        Array.Sort(students, (x, y) => x.average.CompareTo(y.average));
        Console.WriteLine("按平均成绩排序后的学生信息如下:");
        foreach (Student student in students)
        {
            Console.WriteLine("{0}\t{1}\t{2:F2}", student.id, student.name, student.average);
        }
    }
}

所以,我补一个C语言的

#include <stdio.h>
#include <string.h>

#define NUM_STUDENTS 5
#define MAX_NAME_LEN 20

// 定义学生结构体
struct Student {
    char id[10];
    char name[MAX_NAME_LEN];
    float grades[3];
    float avg_grade;
};

// 计算平均成绩
void calculate_avg_grade(struct Student *student) {
    float sum = 0;
    for (int i = 0; i < 3; i++) {
        sum += student->grades[i];
    }
    student->avg_grade = sum / 3.0;
}

// 学生排序函数
int student_cmp(const void *a, const void *b) {
    const struct Student *stu_a = (const struct Student *) a;
    const struct Student *stu_b = (const struct Student *) b;
    
    if (stu_a->avg_grade < stu_b->avg_grade) {
        return 1;
    } else if (stu_a->avg_grade == stu_b->avg_grade) {
        return 0;
    } else {
        return -1;
    }
}

int main() {
    struct Student students[NUM_STUDENTS];
    
    // 从键盘输入数据
    for (int i = 0; i < NUM_STUDENTS; i++) {
        printf("Enter student %d's id: ", i + 1);
        scanf("%s", students[i].id);
        
        printf("Enter student %d's name: ", i + 1);
        scanf("%s", students[i].name);
        
        printf("Enter student %d's grades for three courses: ", i + 1);
        for (int j = 0; j < 3; j++) {
            scanf("%f", &students[i].grades[j]);
        }
        
        // 计算平均成绩
        calculate_avg_grade(&students[i]);
    }
    
    // 按照平均成绩进行排序
    qsort(students, NUM_STUDENTS, sizeof(struct Student), student_cmp);
    
    // 输出学生信息
    printf("\nSorted students by average grade:\n");
    for (int i = 0; i < NUM_STUDENTS; i++) {
        printf("Student %d - id: %s, name: %s, average grade: %.2f", 
               i + 1, students[i].id, students[i].name, students[i].avg_grade);
    }
    
    return 0;
}