中央电大数据结构形成性考核册实验报告 下载本文

内容发布更新时间 : 2024/12/27 11:51:25星期一 下面是文章的全部内容请认真阅读。

中央电大本科数据结构形成性考核册实验报告

实验名称:实验一 线性表

线性表的链式存储结构

【问题描述】

某项比赛中,评委们给某参赛者的评分信息存储在一个带头结点的单向链表中,编写程序: (1) 显示在评分中给出最高分和最低分的评委的有关信息(姓名、年龄、所给分数等)。 (2) 在链表中删除一个最高分和一个最低分的结点。

(3) 计算该参赛者去掉一个最高分和一个最低分后的平均成绩。 【基本要求】

(1) 建立一个评委打分的单向链表; (2) 显示删除相关结点后的链表信息。 (3) 显示要求的结果。 【实验步骤】

(1) 运行PC中的Microsoft Visual C++ 6.0程序,

(2) 点击“文件”→“新建” →对话窗口中“文件” →“c++ Source File” →在“文件名”中输入“X1.cpp”

→在“位置”中选择储存路径为“桌面” →“确定”,

(3) 输入程序代码, 程序代码如下: #include #include #include #include #include #define NULL 0

#define PWRS 5 //定义评委人数 struct pw //定义评委信息 { char name[6]; float score; int age; };

typedef struct pw PW;

struct node //定义链表结点 {struct pw data; struct node * next; };

typedef struct node NODE;

NODE *create(int m); //创建单链表 int calc(NODE *h); //计算、数据处理

void print(NODE *h); //输出所有评委打分数据 void input(NODE *s);//输入评委打分数据 void output(NODE *s);//输出评委打分数据 void main() {

NODE *head; float ave=0; float sum=0;

head=create(PWRS);

printf(\所有评委打分信息如下:\\n\ print(head);//显示当前评委打分 calc(head);//计算成绩

printf(\该选手去掉 1 最高分和 1 最低分后的有效评委成绩:\\n\ print(head);//显示去掉极限分后的评委打分 }

void input(NODE *s) {

printf(\请输入评委的姓名: \ scanf(\ printf(\年龄: \

scanf(\ printf(\打分: \

scanf(\ printf(\ }

void output(NODE *s) {

printf(\评委姓名: %8s ,年龄: %d,打分: %2.2f\\n\ }

NODE *create(int m) {

NODE *head,*p,*q; int i;

p=(NODE*)malloc(sizeof(NODE)); head=p; q=p;

p->next=NULL; for(i=1;i<=m;i++){

p=(NODE*)malloc(sizeof(NODE)); input(p);

p->next=NULL; q->next=p; q=p; }

return (head); }

void print(NODE *h)

{ for(int i=1;((i<=PWRS)&&(h->next!=NULL));i++){ h=h->next; output(h); } printf(\}

int calc(NODE *h) {

NODE *q,*p,*pmin,*pmax; float sum=0; float ave=0;

p=h->next; //指向首元结点 pmin=pmax=p; //设置初始值 sum+=p->data.score; p=p->next;

for(;p!=NULL;p=p->next) {

if(p->data.score>pmax->data.score) pmax=p; if(p->data.scoredata.score) pmin=p; sum+=p->data.score; }

cout<<\给出最高分的评委姓名:\年龄:\

cout<<\给出最低分的评委姓名:\年龄:\ printf(\

sum-=pmin->data.score; sum-=pmax->data.score;

for (q=h,p=h->next;p!=NULL;q=p,p=p->next) {

if(p==pmin){q->next=p->next; p=q;}//删除最低分结点 if(p==pmax) {q->next=p->next; p=q;}//删除最高分结点 }

ave=sum/(PWRS-2);

cout<<\该选手的最后得分是:\ return 1; }

程序运行结果如下:

\分值:\分值: