运用LineLink链表结构写出“一个班上有30名学生,每个学生的数据作为一个记录,每个记录包括学号、姓名、三门课程的成绩和三门课程平均成绩。从键盘输入学生的学号、姓名及三门课。“程序,使用stdio.h数据库
时间: 2024-10-21 09:09:13 浏览: 45
为了实现这个程序,我们可以使用C语言的线性链表结构,因为题目要求的是线性结构。这里是一个简单的示例,我们将创建一个`Student`结构体来存储学生信息,然后定义一个`Node`结构表示链表节点。接着,我们会创建一个`LinkedList`类来操作这些节点。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义学生信息结构
typedef struct {
int id; // 学号
char name[20]; // 姓名
float score[3]; // 三门课程成绩
float avg_score; // 平均成绩
} Student;
// 定义链表节点
typedef struct Node {
Student data;
struct Node* next;
} Node;
// 创建一个新的链表节点
Node* create_node(Student student) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode == NULL) {
printf("Memory allocation failed.\n");
return NULL;
}
newNode->data = student;
newNode->next = NULL;
return newNode;
}
// 在链表末尾添加新学生
void append_to_list(Node** head, Student student) {
if (*head == NULL) {
*head = create_node(student);
} else {
Node* current = *head;
while (current->next != NULL) {
current = current->next;
}
current->next = create_node(student);
}
}
// 输入并添加学生信息到链表
void input_students(Node** head, int num_students) {
for (int i = 0; i < num_students; i++) {
Student new_student;
printf("Enter student %d information:\n", i + 1);
scanf("%d", &new_student.id);
fgets(new_student.name, sizeof(new_student.name), stdin); // 注意去除换行符
for (int j = 0; j < 3; j++) {
scanf("%f", &new_student.score[j]);
}
calculate_avg_score(&new_student);
append_to_list(head, new_student);
}
}
// 计算平均成绩
void calculate_avg_score(Student* student) {
float sum = 0;
for (int i = 0; i < 3; i++) {
sum += student->score[i];
}
student->avg_score = sum / 3.0;
}
// 显示链表中的所有学生信息
void display_students(Node* head) {
Node* current = head;
while (current != NULL) {
printf("ID: %d, Name: %s, Scores: %.2f, %.2f, %.2f, Average Score: %.2f\n",
current->data.id, current->data.name,
current->data.score[0], current->data.score[1], current->data.score[2],
current->data.avg_score);
current = current->next;
}
}
int main() {
int num_students;
printf("Enter the number of students: ");
scanf("%d", &num_students);
Node* head = NULL;
input_students(&head, num_students);
display_students(head);
return 0;
}
```
阅读全文