数据结构与算法实训课程实训报告.docx

上传人:b****8 文档编号:29828454 上传时间:2023-07-27 格式:DOCX 页数:14 大小:154.09KB
下载 相关 举报
数据结构与算法实训课程实训报告.docx_第1页
第1页 / 共14页
数据结构与算法实训课程实训报告.docx_第2页
第2页 / 共14页
数据结构与算法实训课程实训报告.docx_第3页
第3页 / 共14页
数据结构与算法实训课程实训报告.docx_第4页
第4页 / 共14页
数据结构与算法实训课程实训报告.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

数据结构与算法实训课程实训报告.docx

《数据结构与算法实训课程实训报告.docx》由会员分享,可在线阅读,更多相关《数据结构与算法实训课程实训报告.docx(14页珍藏版)》请在冰豆网上搜索。

数据结构与算法实训课程实训报告.docx

数据结构与算法实训课程实训报告

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]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.设计总结和体会:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1