用C语言写一个结构体链表来存储学生的学号,姓名,成绩
时间: 2023-03-15 09:21:32 浏览: 326
可以使用以下代码:
struct student
{
int id;
char name[20];
float score;
struct student *next;
}; struct student *head = NULL; struct student *creat(int id, char name[], float score)
{
struct student *stu = (struct student*)malloc(sizeof(struct student));
if (stu == NULL)
{
return NULL;
}
stu->id = id;
strcpy(stu->name, name);
stu->score = score;
stu->next = NULL;
return stu;
} void insert(struct student *head, struct student *stu)
{
struct student *p = head;
while (p->next != NULL)
{
p = p->next;
}
p->next = stu;
}
相关问题
构造结构体链表,结构体内容包括学号姓名和成绩c语言源码
要构造结构体链表,首先需要定义结构体的内容,包括学号、姓名和成绩。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义结构体
typedef struct student {
int id;
char name[20];
int score;
struct student* next;
} Student;
int main() {
int n;
printf("请输入学生人数: ");
scanf("%d", &n);
Student* head = NULL;
Student* tail = NULL;
// 输入学生信息并构造链表
for (int i = 0; i < n; i++) {
printf("\n请输入第%d个学生的学号: ", i+1);
int id;
scanf("%d", &id);
printf("请输入姓名: ");
char name[20];
scanf("%s", name);
printf("请输入成绩: ");
int score;
scanf("%d", &score);
// 创建新的学生结点
Student* newStudent = (Student*)malloc(sizeof(Student));
newStudent->id = id;
strcpy(newStudent->name, name);
newStudent->score = score;
newStudent->next = NULL;
// 将新的学生结点加入链表
if (head == NULL) {
head = newStudent;
tail = newStudent;
} else {
tail->next = newStudent;
tail = tail->next;
}
}
// 遍历链表并打印学生信息
printf("\n学生信息如下:\n");
Student* current = head;
while (current != NULL) {
printf("学号: %d\n", current->id);
printf("姓名: %s\n", current->name);
printf("成绩: %d\n", current->score);
printf("\n");
current = current->next;
}
// 释放链表内存
while (head != NULL) {
Student* temp = head;
head = head->next;
free(temp);
}
return 0;
}
```
以上是一个通过输入学生信息构造结构体链表的程序。首先输入学生人数,然后按照提示输入每个学生的学号、姓名和成绩。程序将会创建新的学生结点,并通过将结点链接在一起构造链表。最后,程序将会遍历链表并打印每个学生的学号、姓名和成绩。最后释放链表内存,结束程序的执行。
用C语言写一个用结构体变量和指向结构体类型的指针作函数参数的示例,功能是按学号从小到大输出学生学号 姓名成绩 1 和成绩 2
在C语言中,你可以创建一个结构体来存储学生的相关信息,然后用结构体变量和其指针作为函数参数。下面是一个示例,定义了一个`Student`结构体,并有一个函数`displayStudents`来按照学号排序并打印学生信息:
```c
#include <stdio.h>
#include <stdlib.h> // 引入内存管理库,用于动态分配内存
// 定义结构体 Student
typedef struct {
int student_id; // 学号
char name[50]; // 姓名
float score1; // 成绩1
float score2; // 成绩2
} Student;
// 按照学号升序排序的辅助函数,这里仅做演示,实际应用可能会用更复杂的数据结构如链表或自定义排序函数
void sortStudents(Student** arr, int count) {
for (int i = 0; i < count - 1; i++) {
for (int j = 0; j < count - i - 1; j++) {
if (arr[j]->student_id > arr[j + 1]->student_id) {
Student temp = *arr[j];
*arr[j] = *arr[j + 1];
*arr[j + 1] = temp;
}
}
}
}
// 显示学生信息的函数
void displayStudentInfo(Student* student) {
printf("学号: %d, 姓名: %s, 成绩1: %.2f, 成绩2: %.2f\n",
student->student_id, student->name, student->score1, student->score2);
}
void printSortedStudents(Student* students, int num_students) {
sortStudents(&students, num_students);
for (int i = 0; i < num_students; i++) {
displayStudentInfo(students + i);
}
}
int main() {
Student students[3] = { {1, "Alice", 85.0, 92.5},
{2, "Bob", 90.0, 88.0},
{3, "Charlie", 87.5, 91.0} };
int num_students = sizeof(students) / sizeof(students[0]);
printSortedStudents(students, num_students);
return 0;
}
```
在这个例子中,`printSortedStudents`函数接收一个指向`Student`结构体数组的指针和数组长度,对数组中的学生按学号排序,然后遍历并打印每个学生的详细信息。
阅读全文
相关推荐














