数据结构实验报告 第三次实验
一、实验目的
1、复习结构体、指针;
2、掌握链表的创建、遍历等操作; 3、了解函数指针。 二、实验内容
1、(必做题)每个学生的成绩信息包括:学号、语文、数学、英语、总分、加权平均分;采用链表存储若干学生的成绩信息;输入学生的学号、语文、数学、英语成绩;计算学生的总分和加权平均分(语文占30%,数学占50%,英语占20%);
2、(必做题)可以在链表末尾追加新学生的成绩信息;可以根据学号,删除该学生的成绩信息。
3、(选做题)可以根据学号或总分,升序排序学生的成绩信息。 三、算法描述
(采用自然语言描述)
首先创建链表存储n个学生的成绩信息,再通过键盘输入学生的信息,创建指针p所指结点存储学生的成绩信息,从键盘读入学生人数,求出学生的总分和加权平均分,输出结果。 四、详细设计
(画出程序流程图) 开始 输出学生信息 输入学生人数 结束 输入各学生学号、语文、 数学、英语成绩
五、程序代码
(给出必要注释) #include
typedef struct score_grade {
1
long number; int Chinese; int Math; int English; int sum;
double average;
struct score_grade *next; }student;
student* Input_Score(int n) {
int i;
student *stu,*p,*q;
p=(student*)malloc(sizeof(student)); stu=p; q=p;
printf(\请输入第1个考生的信息\\n\ scanf(\ scanf(\ scanf(\ scanf(\
p->sum=(p->Chinese)+(p->Math)+(p->English);
p->average=(p->Chinese)*0.3+(p->Math)*0.5+(p->English)*0.2; for(i=2;i<=n;i++) {
p=(student*)malloc(sizeof(student)); p->next=NULL;
printf(\请输入第%d个考生的信息\\n\ scanf(\ scanf(\ scanf(\ scanf(\
p->sum=(p->Chinese)+(p->Math)+(p->English);
p->average=(p->Chinese)*0.3+(p->Math)*0.5+(p->English)*0.2; q->next=p; q=p; }
return stu; }
void Output(student *stu,int n) {
int i;
student *p;
2
p=stu;
printf(\学生考试信息\\n\ while(p->next!=NULL) {
printf(\学生学号:%ld\\n\ printf(\语文成绩:%d\\n\ printf(\数学成绩:%d\\n\ printf(\英语成绩:%d\\n\ printf(\总分:%d\\n\
printf(\平均分:%.1f\\n\ printf(\ p=p->next; }
printf(\学生学号:%ld\\n\ printf(\语文成绩:%d\\n\ printf(\数学成绩:%d\\n\ printf(\英语成绩:%d\\n\ printf(\总分:%d\\n\
printf(\平均分:%.1f\\n\ printf(\}
void Delete(student *stu) {
long number;
printf(\请输入需要删除的考生学号\\n\ scanf(\ student *a,*b; a=stu;
b=stu->next; while(b) {
if((b->number)==number) {
a->next=b->next; free(b); break; }
a=a->next; b=b->next; } }
3
int main() {
int n,a,i;
printf(\请输入考生人数:\\n\ scanf(\ student *stu;
stu=Input_Score(n); Output(stu,n); Delete(stu); Output(stu,n); }
六、测试和结果
(给出测试用例以及测试结果)
七、用户手册
(告诉用户如何使用程序)
输入考生人数和考生信息便可以运行程序。
4