当前位置:文档之家› 数据结构实验报告

数据结构实验报告

数据结构实验报告
第三次实验
学号:叶佳伟姓名:20141060106
一、实验目的
1、复习结构体、指针;
2、掌握链表的创建、遍历等操作;
3、了解函数指针。

二、实验内容
1、(必做题)每个学生的成绩信息包括:学号、语文、数学、英语、总分、加权平均分;采用链表存储若干学生的成绩信息;输入学生的学号、语文、数学、英语成绩;计算学生的总分和加权平均分(语文占30%,数学占50%,英语占20%);输出学生的成绩信息。

2、(必做题)可以在链表末尾追加新学生的成绩信息;可以根据学号,删除该学生的成信息。

三、算法描述
(采用自然语言描述)
首先创建链表存储n个学生的成绩信息,再通过键盘输入学生的信息,创建指针p 所指结点存储学生的成绩信息,从键盘读入学生人数,求出学生的总分和加权平均分,输出结果。

四、详细设计
(画出程序流程图)
五、程序代码
(给出必要注释)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct score_grade
{long studentID;
int Chinese;
int Math;
int English;
int sum;
double ave;
struct score_grade *next;
} student;
student* Input_Score(int n)
{int i;
student *p,*stu;
p=(student*)malloc(n*sizeof(student));
if(!p)exit(-1);
for(i=0,stu=NULL;i<n;i++)
{printf("请输入第%d个考生的信息:\n",i+1); scanf("%ld",&p->studentID);
scanf("%d",&p->Chinese);
scanf("%d",&p->Math);
scanf("%d",&p->English);
p->sum=p->Chinese+p->Math+p->English;
p->ave=p->Chinese*0.3+p->Math*0.5+p->English*0.2; }
p->next=stu;
stu=p;
return stu;
}
void Output_Score(student * p,int n)
{int i;
printf(" 考生考试信息\n");
for(i=0;i<n;i++)
{printf("考生学号:%ld\n",p[i].studentID);
printf("总分:%d\n",p[i].sum);
printf("加权平均分:%f\n",p[i].ave);
printf("\n");}
}
void Delete(student *stu)
{long studentID;
printf("请输入需要删除的考生学号\n");
scanf("%d",&studentID);
student *a,*b;
a=stu;
b=stu->next;
while(b)
{
if(b->studentID==studentID)
{ a->next=b->next;
free(b);
break;
}
a=a->next;
b=b->next;
}
}
student*Add_Information(student*stu,int n,int a)
{int i;
student *p;
for(i=n;i<n+a;i++)
{p=(student*)malloc(sizeof(student));
if(!p)exit(-1);
printf("请输入需要增加考生的信息:\n");
scanf("%d",&p->studentID);
scanf("%d",&p->Chinese);
scanf("%d",&p->Math);
scanf("%d",&p->English);
p->sum=p->Chinese+p->Math+p->English;
p->ave=p->Chinese*0.3+p->Math*0.5+p->English*0.2;
}
p->next=stu;
stu=p;
return stu;
}
void main()
{int n,i,a;
char y;
printf("请输入考生人数n:\n");
scanf("%d",&n);
student *stu;
stu=Input_Score(n);
Output_Score(stu,n);
printf("如果需要删除考生请输入:D。

如果需要增加考生请输入:A\n"); scanf("%c",&y);
y=getchar();
if(y=='D')
{Delete(stu);
Output_Score(stu,n);
}
else if(y=='A')
{printf("请输入需要添加的学生人数\n");
scanf("%d",&a);
stu=Add_Information(stu,n,a);
Output_Score(stu,n);
}
}
六、测试和结果
(给出测试用例以及测试结果)
七、用户手册
(告诉用户如何使用程序)
使用Microsoft Visual C++;。

相关主题