数据结构实验报告模板1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西南石油大学实验报告
一、实验目的
1、掌握使用VC6.0 上机调试线性表的基本方法;
2、掌握线性表的基本操作:插入、查找、操作等运算在顺序存储结构上的操作。
二、实验内容
输入某个班每个学生的所有学生的所有课程的成绩,对所有成绩作如下处理:1)求每门课的平均分;
2)输出所有有不及格的课程的学生的学号、全部课程的成绩、平均成绩。三、算法描述
要求:说明程序设计的基本思想,原理和算法描述(包括程序的结构,数据结构,输入/输出设计,符号名说明等)
例如:
以每个学生为对象建立一个单链表,其中每个学生为一个结构体。学生结构体中包含学号、姓名、学生所有课程的成绩、课程平均分等多个域。设每个学生学习的课程数目为4,则其结构可用下图所示。
学号姓名课程1 课程2 课程3 课程4 平均分指针域
则结构体的类型说明如下:
typedef struct stnode
{ int id; /*学号*/
char name[16]; /*姓名*/
int class[4]; /课程成绩数组
float ave; //学生个人所有课程的平均成绩
struct stnode *next; //指针域
}students;
首先创建一个包含所有学生的单链表,输入每个学生各门功课的成绩,同时求出每个学生个人所有课程的平均成绩。然后设计一个累加器sum,令其初始值为0,对单链表从表头到表尾进行一次完整的访问,可求得各门课程所有学生得分的平均值。
四、算法实现
#include
#include
#define m 4 /* 每个学生所学课程数 */
#define NULL 0
typedef struct stnode
{
int id; /*学号*/
char name[16]; /*姓名*/
int class[4]; /所有课程成绩分别放存储在
float ave;
struct stnode *next;
}students;
students *head;
int n;
averge()
{
int i,j;
float sum,aver;
students *p;
printf("Class Average result\n");
printf("********Class********Class Average********\n");
for(i=0;i { j=0; sum=0; p=head; while(p->next) { sum=sum+p->class[i]; p=p->next; j++; } aver=sum/j; printf("* Class%d %16.2f\n",i+1,aver); } printf("***********************\n\n"); } nopass() { int i; students *p; p=head; printf("No Pass result\n"); printf("******ID*******Name**************Class************Average***\n" ); while(p->next) { i=0; while(i { if(p->class[i]<60) { printf("%8d%10s",p->id,p->name); for(i=0;i printf("%6d",p->class[i]); printf("%8.2f\n",p->ave); break; } else i++; } p=p->next; } printf("*************************************\n\n"); } main() { students *p,*q; int i,j; float sum; printf("Please student num!\n"); scanf("%d",&n); head=(students *)malloc(sizeof(students)); q=head; for(i=0;i { printf("input student%d ists ID,name\n",i+1); p=q; scanf("%d\n",&p->id); scanf("%s",&p->name); printf("\n"); printf("input student %i its score\n",i+1); for(j=0;j scanf("%d",&p->class[j]); q=(students*)malloc(sizeof(students)); q->next=p; p=head; while(p->next) { sum=0; for(j=0;j sum=sum+p->class[j]; p->ave=sum/m; p=p->next; } averge(); nopass(); } } (写出算法实现的程序源代码以及相应的注释) 五、运行结果 (粘贴出VC6.0 运行结果的截图) 六、心得体会 在实验过程中……通过此次实验……. (要求:写出实验过程中存在的问题及采取的措施,对算法的讨论、分析,改进设想,其它经验教训或心得体会) 注意: 蓝色部分为举例说明文字,红色为实验要求说明部分,大家在写实验室报告时候删除或者用实际内容取代即可 标题统一用宋体四号字,正文用小四,行间距为1.5倍行间距