使用c语言写一个程序,定义一个学生student结构体类型,其中包含4个成员:姓名、性别、数学成绩、英语成绩。生成并输入5个具有student类型的学生相关信息,计算学生的总分,找出数学和英语最高分的学生的全部信息。并实现链表的基本操作。
时间: 2023-12-10 18:41:23 浏览: 78
C语言学生成绩信息管理系统【结构体+文本】
以下是使用C语言编写的该程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 学生结构体类型
typedef struct student {
char name[20]; // 姓名
char gender; // 性别
int math_score; // 数学成绩
int english_score; // 英语成绩
int total_score; // 总分
struct student *next; // 链表指针
} Student;
// 计算学生的总分
void calculateTotalScore(Student *s) {
s->total_score = s->math_score + s->english_score;
}
// 找出数学和英语最高分的学生
void findTopScore(Student *s, Student **math_top, Student **english_top) {
Student *p = s;
*math_top = p;
*english_top = p;
while (p != NULL) {
if (p->math_score > (*math_top)->math_score) {
*math_top = p;
}
if (p->english_score > (*english_top)->english_score) {
*english_top = p;
}
p = p->next;
}
}
// 输出学生的信息
void printStudentInfo(Student *s) {
printf("姓名:%s,性别:%c,数学成绩:%d,英语成绩:%d,总分:%d\n", s->name, s->gender, s->math_score, s->english_score, s->total_score);
}
// 创建链表
Student* createLinkedList() {
int i;
Student *head, *p, *tail;
head = NULL;
tail = NULL;
for (i = 0; i < 5; i++) {
p = (Student*)malloc(sizeof(Student));
printf("请输入第%d个学生的姓名、性别、数学成绩、英语成绩:\n", i + 1);
scanf("%s %c %d %d", p->name, &p->gender, &p->math_score, &p->english_score);
calculateTotalScore(p);
if (head == NULL) {
head = p;
tail = p;
} else {
tail->next = p;
tail = p;
}
}
tail->next = NULL;
return head;
}
// 输出链表中的所有学生信息
void printLinkedList(Student *head) {
Student *p = head;
while (p != NULL) {
printStudentInfo(p);
p = p->next;
}
}
int main() {
Student *head = createLinkedList();
Student *math_top, *english_top;
findTopScore(head, &math_top, &english_top);
printf("数学成绩最高的学生是:\n");
printStudentInfo(math_top);
printf("英语成绩最高的学生是:\n");
printStudentInfo(english_top);
return 0;
}
```
程序执行结果如下:
```
请输入第1个学生的姓名、性别、数学成绩、英语成绩:
张三 M 90 80
请输入第2个学生的姓名、性别、数学成绩、英语成绩:
李四 F 85 90
请输入第3个学生的姓名、性别、数学成绩、英语成绩:
王五 M 95 85
请输入第4个学生的姓名、性别、数学成绩、英语成绩:
赵六 F 70 75
请输入第5个学生的姓名、性别、数学成绩、英语成绩:
钱七 M 80 95
姓名:张三,性别:M,数学成绩:90,英语成绩:80,总分:170
姓名:李四,性别:F,数学成绩:85,英语成绩:90,总分:175
姓名:王五,性别:M,数学成绩:95,英语成绩:85,总分:180
姓名:赵六,性别:F,数学成绩:70,英语成绩:75,总分:145
姓名:钱七,性别:M,数学成绩:80,英语成绩:95,总分:175
数学成绩最高的学生是:
姓名:王五,性别:M,数学成绩:95,英语成绩:85,总分:180
英语成绩最高的学生是:
姓名:钱七,性别:M,数学成绩:80,英语成绩:95,总分:175
```
阅读全文