以下是为您编写的 C 语言代码: ```c #include<stdio.h> #include<stdbool.h> #include<stdlib.h> #include<string.h> // 学生结点定义 typedef struct student { char name[20];//姓名 char no[20];//学号 float grade;//绩点 struct student *next; } stu; // 头结点定义 typedef struct { int n; //学生个数 float sum;//学生绩点和 float avg;//平均绩点 stu *first; } he; // 计算平均绩点的函数 float calculateAverageGrade(stu *head) { float sum = 0; int count = 0; stu *current = head; while (current!= NULL) { sum += current->grade; count++; current = current->next; } return sum / count; } // 删除绩点小于平均绩点的学生结点的函数 void deleteStudentsBelowAverage(he *header) { stu *prev = NULL; stu *current = header->first; float average = calculateAverageGrade(header->first); while (current!= NULL) { if (current->grade < average) { if (prev == NULL) { header->first = current->next; } else { prev->next = current->next; } stu *temp = current; current = current->next; free(temp); } else { prev = current; current = current->next; } } } // 输出链表的函数 void printList(he *header) { stu *current = header->first; while (current!= NULL) { printf("姓名: %s, 学号: %s, 绩点: %.2f\n", current->name, current->no, current->grade); current = current->next; } } int main() { he header; header.n = 0; header.sum = 0; header.first = NULL; // 输入学生信息并构建链表 // 调用删除函数和输出函数 deleteStudentsBelowAverage(&header); printList(&header); return 0; } ``` 额外需要注意的逻辑点: 1. 在删除结点时,要正确处理头结点和中间结点的情况。 2. 计算平均绩点时,要确保遍历完所有有效结点。 3. 释放删除结点的内存,防止内存泄漏。 [2024-12-03 11:10:47 | AI写代码神器 | 604点数解答]