班上5个学生(学号,姓名,数学成绩),有若干同学成绩不及格,编程 其中 函数1:动态建立单链表输入5个同学的数据 函数2:输出单链表中不及格同学的数据
时间: 2024-10-16 17:19:43 浏览: 24
为了创建一个包含学生成绩的单链表数据结构,并实现函数1和2,我们可以使用C语言中的结构体、链表节点以及指针。这里是一个简单的示例:
首先,定义一个结构体`Student`表示每个学生,包括学号、姓名和数学成绩:
```c
typedef struct {
int id; // 学号
char name[50]; // 姓名
float score; // 数学成绩
} Student;
```
接下来,我们需要创建链表节点和链表头结点:
```c
typedef struct Node {
Student data;
struct Node* next;
} Node;
Node* head = NULL; // 链表头指针
```
然后,我们编写函数1 - 动态添加学生的链表操作:
```c
void add_student(Node** head, int id, const char* name, float score) {
if (*head == NULL) {
*head = (Node*)malloc(sizeof(Node));
(*head)->data.id = id;
strcpy((*head)->data.name, name);
(*head)->data.score = score;
(*head)->next = NULL;
} else {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data.id = id;
strncpy(newNode->data.name, name, sizeof(newNode->data.name));
newNode->data.score = score;
newNode->next = *head;
*head = newNode;
}
}
```
函数2 - 输出不及格同学的数据:
```c
void print_failed_students(Node* head) {
while (head != NULL) {
if (head->data.score < 60) { // 低于及格线60分
printf("学号:%d 姓名:%s 成绩:%.1f\n",
head->data.id, head->data.name, head->data.score);
}
head = head->next;
}
}
```
现在你可以调用这两个函数来完成你的需求:
```c
int main() {
// 假设已有5个学生的数据
const int students[] = {1, "张三", 59, 2, "李四", 78, 3, "王五", 45};
int numStudents = sizeof(students) / sizeof(students[0]);
for (int i = 0; i < numStudents; i += 3) {
add_student(&head, students[i], students[i+1], students[i+2]);
}
// 打印不及格的学生信息
print_failed_students(head);
return 0;
}
```
阅读全文