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

数据结构实验报告[3]

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

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

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

四、详细设计
(画出程序流程图)
五、程序代码
(给出必要注释)
#include <stdio.h>
#include <stdlib.h>
typedef struct score
{int number;
int chinese;
int math;
int english;
int total;
float average;
struct score *next;
} student;
//创建链表存储n个学生的信息,通过键盘输入信息student*input_score(int n)
{int i;
student*stu,*p;
for(i=0,stu=NULL;i<n;i++)
{p=(student*)malloc(sizeof(student));
printf("请输入第%d个学生的信息:\n",i+1); printf("学号:");
scanf("%d",&p->number);
printf("语文分数(0——100):");
scanf("%d",&p->chinese);
while(p->chinese<0||p->chinese>100)
{printf("请重新输入第%d个学生的语文分数(0——100):\n",i+1);
scanf("%d",&p->chinese); }
printf("数学分数(0——100):");
scanf("%d",&p->math);
while(p->math<0||p->math>100)
{printf("请重新输入第%d个学生的数学分数(0——100):\n",i+1);
scanf("%d",&p->math); }
printf("英语分数(0——100):");
scanf("%d",&p->english);
while(p->english<0||p->english>100)
{printf("请重新输入第%d个学生的英语分数(0——100):\n",i+1);
scanf("%d",&p->english); }
p->next=stu;
stu=p; }
return stu;
}
void visit(student*stu,void(*fun)())
{student*p;
for(p=stu;p!=NULL;p=p->next) (*fun)(p);
}
void Output_Score(student*p)
//指针p所指结点存储学生的信息,输出信息
{printf("学号:%d\n",p->number);
printf("语文:%d\n",p->chinese);
printf("数学:%d\n",p->math);
printf("英语:%d\n",p->english);
printf("总分:%d\n",p->total=p->chinese+p->math+p->english);
printf("加权平均分:%f\n",p->average=p->chinese*0.3+p->math*0.5+p->english*0.2); }
int main()
{int n;
student*stu;
printf("请输入学生人数:\n");
scanf("%d",&n);
stu=input_score(n);
printf("各个学生的信息如下:\n");
visit(stu,Output_Score);
}
六、测试和结果
(给出测试用例以及测试结果)
七、用户手册
(告诉用户如何使用程序)
打开并运行程序,根据提示输入学生人数和学生信息;。

相关主题