C语言链表实现评分系统:去掉最高分和最低分后的平均得分计算
"实验报告:\n\n代码实现了一个评分系统,根据输入的评委姓名、年龄和评分创建一个链表,然后计算去掉一个最高分和一个最低分后的平均得分。\n\n代码中定义了两个结构体,分别是pw和node。pw结构体表示评委的姓名、年龄和评分,node结构体表示链表中的节点,包含一个pw类型的数据和一个指向下一个节点的指针。\n\n首先,通过create函数创建了一个包含PWRS个节点的链表,每个节点表示一个评委,输入评委的姓名、年龄和评分,并将节点按顺序连接起来。\n\n然后,通过traverse函数遍历链表,输出所有评委的评分信息。\n\n接着,通过calc函数计算去掉一个最高分和一个最低分后的平均得分。在这个函数中,首先定义了几个变量,包括sum(总分)、ave(平均得分)和pmax、pmin(最高分和最低分的评委节点)。\n\n然后,遍历链表,计算总分,并找到最高分和最低分的评委节点。\n\n接下来,输出最高分和最低分的评委信息。\n\n然后,从总分中减去最高分和最低分的评分,计算平均得分。\n\n最后,通过循环遍历链表,找到最高分和最低分的评委节点,并将其从链表中删除。\n\n最终,输出去掉最高分和最低分后的有效评委的评分信息和平均得分。\n\n实验基本原理总结如下:\n\n1. 通过create函数创建一个包含PWRS个评委节点的链表,每个节点表示一个评委,输入评委的姓名、年龄和评分,并将节点按顺序连接起来。\n\n2. 通过traverse函数遍历链表,输出所有评委的评分信息。\n\n3. 通过calc函数计算去掉一个最高分和一个最低分后的平均得分。遍历链表,计算总分,并找到最高分和最低分的评委节点。输出最高分和最低分的评委信息。从总分中减去最高分和最低分的评分,计算平均得分。通过循环遍历链表,找到最高分和最低分的评委节点,并将其从链表中删除。\n\n4. 最后,输出去掉最高分和最低分后的有效评委的评分信息和平均得分。\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n#define PWRS 5\n\nstruct pw\n{\n char name[8];\n short age;\n float score;\n};\n\ntypedef struct pw PW;\n\nstruct node\n{\n PW data;\n struct node *next;\n};\n\ntypedef struct node NODE;\n\nNODE *create(int n);\nvoid input(NODE *s, int i);\nvoid output(NODE *s);\nvoid traverse(NODE *head);\nvoid calc(NODE *head);\n\nvoid main()\n{\n NODE *head = NULL;\n\n head = create(PWRS);\n\n printf("\n所有评委的评分信息如下:\n");\n traverse(head);\n\n calc(head);\n\n printf("该参赛者去掉一个最高分和一个最低分后的有效评委的评分信息如下:\n");\n traverse(head);\n}\n\nNODE *create(int n)\n{\n NODE *head, *p, *q;\n int i;\n\n p = (NODE *)malloc(sizeof(NODE));\n head = p;\n q = p;\n p->next = NULL;\n\n for (i = 1; i <= n; i++)\n {\n p = (NODE *)malloc(sizeof(NODE));\n input(p, i);\n p->next = NULL;\n q->next = p;\n q = p;\n }\n\n return (head);\n}\n\nvoid input(NODE *s, int i)\n{\n printf("请输入第 %d 个评委的姓名、年龄和评分:", i);\n scanf("%s%d%f", &s->data.name, &s->data.age, &s->data.score);\n}\n\nvoid output(NODE *s)\n{\n printf("评委姓名:%6s 年龄:%d 评分:%6.2f\n", s->data.name, s->data.age, s->data.score);\n}\n\nvoid traverse(NODE *head)\n{\n NODE *p = head->next;\n\n while (p != NULL)\n {\n output(p);\n p = p->next;\n }\n\n printf("\n");\n}\n\nvoid calc(NODE *head)\n{\n NODE *q, *p, *pmin, *pmax;\n float sum = 0;\n float ave = 0;\n\n p = head->next;\n pmin = pmax = p;\n\n while (p != NULL)\n {\n sum += p->data.score;\n\n if (p->data.score > pmax->data.score)\n pmax = p;\n\n if (p->data.score < pmin->data.score)\n pmin = p;\n\n p = p->next;\n }\n\n printf("给出最高分的评委姓名:%6s 年龄:%d 评分:%6.2f\n", pmax->data.name, pmax->data.age, pmax->data.score);\n printf("给出最低分的评委姓名:%6s 年龄:%d 评分:%6.2f\n", pmin->data.name, pmin->data.age, pmin->data.score);\n printf("\n");\n\n sum -= pmax->data.score;\n sum -= pmin->data.score;\n ave = sum / (PWRS - 2);\n\n printf("该参赛者去掉一个最高分和一个最低分后的平均得分为:%6.2f\n", ave);\n printf("\n");\n\n for (q = head, p = head->next; p != NULL; q = p, p = p->next)\n {\n if (p == pmin)\n {\n q->next = p->next;\n free(p);\n p = q;\n }\n\n if (p == pmax)\n {\n q->next = p->next;\n free(p);\n p = q;\n }\n }\n}\n
原文地址: https://www.cveoy.top/t/topic/pHpk 著作权归作者所有。请勿转载和采集!