C - 从数组(结构数组)中删除除平均成绩最高的 10 名学生之外的学生

作者:编程家 分类: arrays 时间:2025-05-06

# 删除数组中除最高平均成绩的10名学生外的学生

在C语言中,如果你有一个包含学生信息的结构数组,而你想要从中删除除平均成绩最高的10名学生之外的所有学生,那么下面的文章将为你提供一个简单而有效的解决方案。

## 问题背景

假设你有一个包含学生信息的结构数组,每个学生有姓名、学号和成绩等属性。现在的任务是从这个数组中删除除了平均成绩最高的10名学生之外的所有学生。

## 解决方案

为了解决这个问题,我们可以按照以下步骤进行操作:

1. 计算数组中每个学生的平均成绩。

2. 找到平均成绩最高的10名学生。

3. 创建一个新的数组,只包含这10名学生的信息。

接下来,我将为你展示一个简单的C语言代码示例,演示如何实现这个解决方案。

c

#include

#include

#include

// 定义学生结构体

struct Student {

char name[50];

int id;

float grade;

};

int main() {

// 假设有100个学生

const int totalStudents = 100;

// 创建学生数组

struct Student students[totalStudents];

// 初始化学生信息(这里仅为示例,实际情况中应该从外部数据源获取)

for (int i = 0; i < totalStudents; i++) {

sprintf(students[i].name, "Student%d", i + 1);

students[i].id = i + 1;

students[i].grade = rand() % 101; // 随机生成0到100的成绩

}

// 计算平均成绩

float totalGrade = 0;

for (int i = 0; i < totalStudents; i++) {

totalGrade += students[i].grade;

}

float averageGrade = totalGrade / totalStudents;

// 找到平均成绩最高的10名学生

for (int i = 0; i < totalStudents - 1; i++) {

for (int j = 0; j < totalStudents - i - 1; j++) {

if (students[j].grade < students[j + 1].grade) {

// 交换学生信息

struct Student temp = students[j];

students[j] = students[j + 1];

students[j + 1] = temp;

}

}

}

// 创建新数组,只包含平均成绩最高的10名学生

struct Student topStudents[10];

memcpy(topStudents, students, sizeof(struct Student) * 10);

// 输出结果

printf("平均成绩最高的10名学生:%

");

for (int i = 0; i < 10; i++) {

printf("姓名:%s,学号:%d,成绩:%.2f%

", topStudents[i].name, topStudents[i].id, topStudents[i].grade);

}

return 0;

}

在上面的代码中,我们首先通过随机生成成绩初始化了一个包含100名学生的结构数组。然后,我们计算了平均成绩,并按成绩从高到低对学生进行排序。最后,我们创建了一个新的数组,只包含平均成绩最高的10名学生,并输出了它们的信息。

通过这个简单的示例,你可以根据实际情况调整代码以满足你的需求。这个基本框架提供了一种在C语言中删除除最高平均成绩的10名学生外的其他学生的方法。