输入若干个学生信息(包括学号、姓名和某科成绩),输入学号为0时输入结束,建立一个单向链表,再输入一个成绩值,将成绩大于等于该值的学生信息输出。
时间: 2024-03-25 11:40:06 浏览: 147
数据结构:定义一个包含学生信息(学号、姓名、成绩)的顺序表_数据结构
5星 · 资源好评率100%
好的,这是一个简单的链表操作问题,我可以帮你解决。首先,我们需要定义链表的结构体和节点结构体:
```c
// 学生信息结构体
typedef struct student {
int id; // 学号
char name[20]; // 姓名
float score; // 成绩
} Student;
// 链表节点结构体
typedef struct node {
Student data; // 学生信息
struct node* next; // 指向下一个节点的指针
} Node, *LinkList;
```
接下来,我们可以编写一个创建链表的函数,该函数会在输入学生信息时创建节点并将其插入链表中:
```c
LinkList createList() {
Node* head = (Node*)malloc(sizeof(Node)); // 创建头节点
head->next = NULL;
Node* p = head;
Student s;
printf("请输入学生信息(学号 姓名 成绩):\n");
while (1) {
scanf("%d", &s.id);
if (s.id == 0) {
break; // 当输入学号为0时,结束输入
}
scanf("%s %f", s.name, &s.score);
Node* newNode = (Node*)malloc(sizeof(Node)); // 创建新节点
newNode->data = s;
newNode->next = NULL;
p->next = newNode; // 将新节点插入链表
p = newNode;
}
return head->next; // 返回头节点的下一个节点,即第一个学生节点
}
```
最后,我们可以编写一个函数来输出成绩大于等于指定值的学生信息:
```c
void printList(LinkList list, float score) {
printf("成绩大于等于%.2f的学生信息:\n", score);
Node* p = list;
while (p) {
if (p->data.score >= score) {
printf("学号:%d,姓名:%s,成绩:%.2f\n", p->data.id, p->data.name, p->data.score);
}
p = p->next;
}
}
```
现在,我们可以在主函数中调用以上三个函数来实现题目要求:
```c
int main() {
LinkList list = createList();
float score;
printf("请输入成绩值:");
scanf("%f", &score);
printList(list, score);
return 0;
}
```
以上就是实现题目要求的完整代码。
阅读全文