C语言实现一个函数,统计结构体中成绩项在60-79分的所有人员,并将它们保存到新的结构体数组中。 结构体包含2个域:学号和成绩。
时间: 2024-09-18 18:09:19 浏览: 64
C语言利用结构体数组实现学生成绩管理系统
5星 · 资源好评率100%
在C语言中,我们可以首先定义一个结构体`Student`表示学生信息,然后编写一个函数`filterStudents`来筛选并存储成绩在60-79分的学生。假设有一个名为`students`的数组,其中存储了所有学生的数据。下面是一个简单的实现示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义结构体
typedef struct {
int id; // 学号
int score; // 成绩
} Student;
// 函数声明
void filterStudents(Student* original, Student** filtered, int count);
int main() {
// 假设我们有如下的原始学生数组
const int num_students = 10;
Student students[num_students] = { /* 初始化学生成绩 */ };
// 创建空间来存放过滤后的学生数组
Student* filtered_students = NULL;
int filtered_count = 0;
// 调用函数过滤成绩
filterStudents(students, &filtered_students, num_students);
// 输出过滤后的结果 (这里仅作示例,实际应用需要再添加相关代码)
if (filtered_count > 0) {
printf("过滤后的学生信息:\n");
for (int i = 0; i < filtered_count; ++i) {
printf("学号%d, 分数%d\n", filtered_students[i].id, filtered_students[i].score);
}
free(filtered_students); // 别忘了释放内存
} else {
printf("没有找到60-79分的学生。\n");
}
return 0;
}
// 实现滤波函数
void filterStudents(Student* original, Student** filtered, int count) {
*filtered = malloc(count * sizeof(Student)); // 动态分配内存
int j = 0;
for (int i = 0; i < count; ++i) {
if (original[i].score >= 60 && original[i].score <= 79) {
(*filtered)[j++] = original[i]; // 将符合条件的元素复制到新数组
}
}
(*filtered)[j] = '\0'; // 如果有剩余空间,添加空字符结束数组
}
```
在这个例子中,`filterStudents`函数会创建一个新的`Student`数组`filtered_students`,并将成绩在60-79分的学生复制过去。记得在程序结束时使用`free`释放动态分配的内存。
阅读全文