数据结构与算法实训课程实训报告.docx
- 文档编号:29828454
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:14
- 大小:154.09KB
数据结构与算法实训课程实训报告.docx
《数据结构与算法实训课程实训报告.docx》由会员分享,可在线阅读,更多相关《数据结构与算法实训课程实训报告.docx(14页珍藏版)》请在冰豆网上搜索。
数据结构与算法实训课程实训报告
XXXX学院课程实训报告
课程名:
数据结构与算法实训
学号:
姓名:
班级:
指导老师:
时间:
1.设计任务、要求及所用软件环境
(1)设计任务:
成绩管理:
设计一个程序进行学生成绩管理。
假设对某个班的学生5门课程的学习成绩进行管理,实现以下功能:
(1)求每门课程的平均成绩;
(2)输出每门课程成绩优秀(>=90分)的学生名单及成绩;(3)输出只有一门课程不及格的学生名单及每门成绩;(4)对5门课程中可以按照任一门课程的成绩进行排序。
(2)设计要求:
1)学生成绩采用链表存储方式;
2)学生人数和学生的成绩从键盘输入;
3)排序方法可以任选一种。
(3)所用软件环境:
MicrosoftVisualC++6.0(二级C语言专用版)
2.问题的模型化描述以及求解问题的算法简要描述
通过开发一个学生成绩管理信息系统,掌握与数组有关的算法、函数的调用、结构体类型变量的定义和使用,提高实际运用能力。
开始进入登录界面,根据输入的操作选项,可分别进行各项操作:
可完成学生成绩信息的输入,求平均成绩,查询每门课程成绩优秀(>=90分)的学生名单及成绩,查询只有一门课程不及格的学生名单及每门成绩,对5门课程中可以按照任一门课程的成绩进行排序等功能。
3.所选择的存储结构及基本运算、设计的模块构成、各模块的简要说明、流程图、调用关系表。
用MicrosoftVisualC++6.0(二级C语言专用版)编写,完成学生成绩的链表存储,任意学生成绩的插入、查询、排序。
(1)输入形式和输入范围:
建立成绩管理时,需要指定元素个数和每个元素的值,然后按元素的顺序建立一个链式成绩管理系统;排序时,需要确定排序方法;查找操作时需要元素的范围;在所有输入中,元素的值都是整数。
(2)输出的形式:
在所有操作中都显示操作是否正确以及操作后链表的内容。
设计的模块构成:
4.程序组成
基本操作及流程图:
(1)结构图:
(2)函数average()的流程图:
(3)函数Excellent()的流程图:
所设计软件的组成(程序文件)及使用说明。
main():
主函数
average():
求课程的平均成绩
Excellent():
查找所有个人平均分超过90分的学生,并将其学号输出
Fail():
查找有成绩不及格的学生,并输出其信息
Sort():
对班级学生按某门课程成绩排名
各函数间关系如下:
average()
Excellent()
main()Fail()
Sort()
5.程序清单
程序清单:
#include"stdio.h"
#include"stdlib.h"
#defineNUM5//课程数
#defineNULL0
typedefstructnode//学生的结构体定义
{
intid;//学号
charname[16];//姓名
intsubject[NUM];//课程数据组
floataver;//学生个人课程平均分
structnode*next;
}student;
student*head=NULL;//head为学生连表的头指针
intn;
voidSort()//对班级学生按某门课程成绩排名
{
intj;//课程序号
student*p1,*p2,*p3;
printf("请输入需要排序的课程序号(1~5):
\n");
scanf("%d",&j);
//由大到小排序,排序方法采用冒泡排序法
if(head!
=NULL)
{
p1=p2=p3=head;
while(p2->next!
=NULL)
{
p1=p2=p3=head;
p2=p1->next;//将p2移到p1下一个节点
//如果前一个节点大于下一个节点,p1和p2都往下移一个节点,p3移到p1原本指着的节点
while(p2->next!
=NULL&&p1->subject[j-1]>=p2->subject[j-1])
{
p3=p1;
p1=p2;
p2=p1->next;
}
//当出现后面一个节点大于前一个节点的时候,调整节点位置
if(p1->subject[j-1]
{
p1->next=p2->next;//p1与p2的下一个节点连接
p2->next=p1;//p2与p1连接
if(p3!
=p1)
p3->next=p2;//p3与p2连接
if(p1==head)
head=p2;//当p1是头节点,那么头节点变成p1
}
}
printf("班级学生课程%d的排序是:
\n",j);
p1=head;
while(p1)//输出按课程j-1成绩排名的所有学生姓名和课程j-1的成绩
{
printf("姓名:
%s成绩:
%d\n",p1->name,p1->subject[j-1]);
p1=p1->next;
}
}
else
{
printf("没有学生信息!
\n\n");
return;
}
}
voidaverage()//求课程的平均成绩
{
inti,j;
floatsum,aver;
student*p;
printf("课程平均成绩:
\n");
printf("#######课程#######课程平均#######\n\n");
for(i=0;i { j=0; sum=0; p=head; while(p) { sum=sum+p->subject[i]; p=p->next; j++; } aver=sum/j; printf("课程%d%.2f\n",i+1,aver); } printf("\n"); printf("#################################\n\n"); } voidFail()//查找有成绩不及格的学生,并输出其信息 { inti; student*p; p=head; printf("没有通过的结果如下: \n"); printf("#####学号#####姓名####课程1####2####3#####4#####5####平均分###\n"); while(p) { i=0;//从课程1开始查找 while(i { if(p->subject[i]<60)//如果不及格,则输出学生所有信息 { printf("%8d%10s",p->id,p->name); for(i=0;i printf("%6d",p->subject[i]); printf("%8.2f\n",p->aver); break;//学生只要有1门课程不及格就查找成功,跳出循环 } else i++;//查找下一门课程 } p=p->next;//查找下一个结点 } printf("##############################################################\n\n"); } voidExcellent()//查找所有个人平均分超过90分的学生,并将其学号输出 { student*p; boolk=false; p=head; while(p)//从第1个结点开始查找 { if(p->aver>=90.0) { printf("\n"); printf("成绩优秀的学生学号为%d\n",p->id); p=p->next; k=true; } else p=p->next; } if(! k) printf("没有平均分超过90分的学生\n"); } voidmain() { student*p,*q; inti,j,k,flag=1; floatsum; head=(student*)malloc(sizeof(student));//生成一个头结点 printf("请输入学生人数! \n"); scanf("%d",&n); q=head;//q指向第一个结点 for(i=0;i { p=q; printf("输入学生%d的学号: ",i+1); scanf("%d",&p->id);//输入学号 printf("输入学生%d的姓名: ",i+1); scanf("%s",p->name);//输入姓名 printf("\n"); printf("请输入学生%d的5门成绩\n",i+1); for(j=0;j { printf("第%d科成绩: ",j+1); scanf("%d",&p->subject[j]); } q=(student*)malloc(sizeof(student)); q->next=NULL; p->next=q; printf("\n\n"); } p=head; for(i=0;i p=p->next; q=p->next; free(q);//将空结点释放掉 p->next=NULL; p=head; while(p) { sum=0.0; for(j=0;j sum=sum+p->subject[j]; p->aver=sum/NUM; p=p->next; } printf("\n\n"); while(flag) { printf("########################################################\n"); printf("1-----求每门课程的平均成绩\n"); printf("2-----输出有课程不及格的学生情况\n"); printf("3-----输出个人平均分超过90分的学生学号\n"); printf("4-----所有学生对制定课程排名\n"); printf("5-----退出\n"); printf("########################################################\n"); printf("\n\n"); printf("请选择(1-5): "); scanf("%d",&k); switch(k) { case1: average();break; case2: Fail();break; case3: Excellent();break; case4: Sort();break; case5: flag=0;break; default: printf("该选项不存在! "); } } } 6.运行结果: 7.设计总结和体会:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 算法 课程 报告