东华大学 数据结构课程实验报告文档格式.docx
- 文档编号:16527145
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:27
- 大小:227.28KB
东华大学 数据结构课程实验报告文档格式.docx
《东华大学 数据结构课程实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《东华大学 数据结构课程实验报告文档格式.docx(27页珍藏版)》请在冰豆网上搜索。
成绩输入/输出、查询结果、调用统计结果
输入数据:
学校编号、项目编号、取得的名次、哪些名次
采用结构体数据类型,利用冒泡法实现相应的排序;
利用“switch”语句实现功能的选择;
利用“for”语句实现各个方式的
数据输入。
详细设计:
voidinputinformation()信息输入模块,开始输入信息**
voidoutput()信息输出模块,选择按不同的方式输出信息**
voidinquiry()**查询模块,用来查询信息**
流程图:
源代码:
#include<
stdio.h>
math.h>
#definen2//学校数目
#definem1//男子项目数目
#definew1//女子项目数目
typedefstruct//typedef:
为一种数据类型定义新名字。
此数据类型为“自定义数据类型”
{
intprojectnum;
//项目编号
intnumber;
//项目取名次的数目,由用户定义3或5
intpic[5];
//名次projectincompetition
intmark[5];
//分数
}projectnode;
//定义项目结点类型
typedefstruct
{
intschoolnum;
//学校编号
intscore;
//学校总分
intmscore;
//男团体总分
intwscore;
//女团体总分
projectnodec[m+w];
//项目数组
}schoolnode;
//定义学校结点类型
schoolnodeh[n];
//定义一个学校结点数组
voidinputinformation()//**信息输入模块,开始输入信息**
inti,j,k,s;
for(i=0;
i<
n;
i++)
{
h[i].score=0;
h[i].mscore=0;
h[i].wscore=0;
}//初始化各结点
i++)//开始输入信息
do//输入学校信息
{
printf("
####学校编号:
"
);
scanf("
%d"
&
h[i].schoolnum);
}while(h[i].schoolnum>
n||h[i].schoolnum<
=0);
for(j=0;
j<
m+w;
j++)
do
####项目编号:
h[i].c[j].projectnum);
}while(h[i].c[j].projectnum>
m+w||h[i].c[j].projectnum<
do
####取前3名or前5名:
h[i].c[j].number);
}while(h[i].c[j].number!
=3&
&
h[i].c[j].number!
=5);
####获得几个名次:
k);
//输入项目信息
for(s=0;
s<
5;
s++)
h[i].c[j].pic[s]=0,h[i].c[j].mark[s]=0;
//初始化排名和分数
k;
####名次:
h[i].c[j].pic[s]);
//输入所获名次信息
//按取前三名还是取前五名分别记分、
if(h[i].c[j].number==3)//取前三名
switch(h[i].c[j].pic[s])//利用switch语句来输入名次所对应的分数
case0:
h[i].c[j].mark[s]=0;
break;
case1:
h[i].c[j].mark[s]=5;
case2:
h[i].c[j].mark[s]=3;
case3:
h[i].c[j].mark[s]=2;
}
else//取前五名
switch(h[i].c[j].pic[s])
h[i].c[j].mark[s]=7;
case4:
case5:
h[i].c[j].mark[s]=1;
h[i].score=h[i].score+h[i].c[j].mark[s];
//统计总分
if(j<
=m-1)
h[i].mscore=h[i].mscore+h[i].c[j].mark[s];
//是男子项目则记到男子分数里面去
else
h[i].wscore=h[i].wscore+h[i].c[j].mark[s];
//其他的是女子项目则记到女子项目里面去
\n"
}
voidoutput()//**信息输出模块,选择按不同的方式输出信息**
intchoice,i,j,k;
intFuZhu[n];
//辅助数组FuZhun为学校个数在程序开头给出
charsign;
################1.按学校编号输出.################\n"
################2.按学校总分输出.################\n"
################3.按男团总分输出.################\n"
################4.按女团总分输出.################\n"
\n\n################请选择编号####################\n\n:
choice);
switch(choice)
//按编号顺序输出
for(i=0;
\n\n####学校编号:
%d\n"
h[i].schoolnum);
####学校总分:
h[i].score);
####男团总分:
h[i].mscore);
####女团总分:
%d\n\n\n"
h[i].wscore);
}
//按学校总分输出
FuZhu[i]=i;
//用辅助数组记住学校结点下标
for(j=i+1;
if(h[FuZhu[i]].score<
h[j].score)
k=FuZhu[i];
FuZhu[i]=FuZhu[j];
FuZhu[j]=k;
}//用冒泡排序方法,
\n\n####学校编号:
h[FuZhu[i]].schoolnum);
h[FuZhu[i]].score);
h[FuZhu[i]].mscore);
h[FuZhu[i]].wscore);
//按所记下标顺序输出
}
//按男团总分输出
if(h[FuZhu[i]].score<
//按女团总分输出
{
请选择1继续,0跳出\n"
sign);
}while(sign==1);
//循环执行输出语句}
voidinquiry()//**查询模块,用来查询信息**inquiry:
查询
intchoice;
inti,j,k;
ints;
\n####1:
按学校编号查询\n"
\n####2:
按项目编号查询\n"
\n\n####请选择查询方式:
//提供两种查询方式
switch(choice)//利用switch语句自动按照所选的查询方式查询
要查询的学校编号:
i);
if(i>
n)
错误:
这个学校没有参加此次运动会!
\n\n"
else
要查询的项目编号:
j);
if(j>
m+w||j==0)
此次运动会没有这个项目\n\n\n"
//项目编号超出范围
else
printf("
这个项目取前%d名,该学校的成绩如下:
h[0].c[j-1].number);
for(k=0;
k<
k++)
if(h[i-1].c[j-1].pic[k]!
=0)
名次:
h[i-1].c[j-1].pic[k]);
//输出要查询学校项目的成绩}
请选择1继续,0跳出\n"
s);
\n\n\n"
}while(s==1);
//循环执行输出语句
if(s>
m+w||s==0)
此次运动会不包括这个项目.\n\n\n"
//项目编号超出范围
该项目取前%d名,取得名次的学校\n"
h[0].c[s-1].number);
i<
for(j=0;
if(h[i].c[s-1].pic[j]!
学校编号:
%d,名次:
h[i].schoolnum,h[i].c[s-1].pic[j]);
//输出该项目取得名次学校的成绩
\n\n\n继续1,跳出0\n"
}while(i==1);
//
//*****************主函数******************
voidmain()
{
intchoice;
======================欢迎使用O(∩_∩)O~======================\n"
\n\n##############运动会分数统计系统################\n"
\n\n################1.输入信息####################\n"
################2.输出信息####################\n"
################3.查询信息####################\n"
################4.退出系统####################\n\n\n"
================================================\n\n"
#######请选择要实现步骤的编号(请先确保信息已经输入!
):
switch(choice)
输入信息:
inputinformation();
信息已存入档案!
main();
//输入完毕后回到主界面
输出信息:
output();
查询信息:
inquiry();
退出系统!
谢谢使用!
default:
输入错误!
调试与执行结果:
1欢迎界面
②输入信息
③输出信息
按学校编号输出信息
按学校总分输出
按男团、女团分数输出信息
查询信息
按学校查询
按项目查询
2、迷宫问题求解:
从给定的某一起点出发,向各个方向都有走动的可能,按照一定顺序进行。
判断该方向上是否可以走(可以走的条件:
不能重复,不是死路,不是迷宫外面)就走,然后记录。
若不能走就换下一个方向。
若各个方向都不可以走,说明到了死路,返回上一步走下一个方向。
如此反复每走一步就要检测是否达到指定坐标(即终点)若达到终点就输出。
若怎么走都达不到终点,即返回到最初起点也不能走了,说明无解。
对一个任意设定的迷宫求一条从入口到出口的道路,或得出无通道的结论。
设定一个二维数组maze[i][j]表示迷宫,其中1≤i≤M,1≤j≤N.。
数组元素值为0表示可以通过,数组元素1表示遇到墙壁。
假定统一入口为maze[1][1],出口为maze[M][N];
移动方向为8个方向。
用数字5表示该通路。
pop函数
draw函数
inimaze函数
path函数
push函数
#include<
stdlib.h>
#defineM220
#defineN218
#definemaxlenM2
#defineTrue1
#defineFalse0
#defineNull0
typedefintStatus;
intM=M2-2,N=N2-2;
//迷宫实际大小为M=M2-2,N=N2-2;
两行外围
{intx,y,dir;
//xydirection
}elemtype;
{elemtypestack[maxlen];
inttop;
//栈顶
}sqMAZE;
structmoved
{intdx,dy;
};
//directionx;
directiony;
voidinimaze(intmaze[M2][N2])
{inti,j,num;
for(i=1;
=M;
{for(j=1;
=N;
{num=(800*(i+j)+1500)%327;
//用随便的一个函数的不能走的路(墙壁‘1’)其他的就是能走的
if((num<
150)&
(i!
=M||j!
=N))
maze[i][j]=1;
else
maze[i][j]=0;
printf("
%3d"
maze[i][j]);
}//for
}//for//输出迷宫(二维数组输出)
}//inimaze
voidinimove(structmovedmove[])//可以移动的8个方向
{move[0].dx=0;
move[0].dy=1;
move[1].dx=1;
move[1].dy=1;
move[2].dx=1;
move[2].dy=0;
move[3].dx=1;
move[3].dy=-1;
move[4].dx=0;
move[4].dy=-1;
move[5].dx=-1;
move[5].dy=-1;
move[6].dx=-1;
move[6].dy=0;
move[7].dx=-1;
move[7].dy=1;
}//inimove
voidinistack(sqMAZE*s)
{s->
top=-1;
}//栈MAZE的栈顶指针s
intpush(sqMAZE*s,elemtypex)//插入元素X为新的栈顶元素
{if(s->
top==maxlen-1)//mazlen-1=M2-1已经大于迷宫长度M=M2
return(False);
{s->
stack[++s->
top]=x;
//x为新的栈顶元素s++
return(True);
}//else
}//push
elemtypepop(sqMAZE*s)
{elemtypeelem;
if(s->
top<
0)
{elem.x=Null;
elem.y=Null;
elem.dir=Null;
return(elem);
}//if
else
top--;
return(s->
stack[s->
top+1]);
//s指向新的栈顶元素的上面s--x--(x-1)
}//pop
//*********开始走迷宫************
voidpath(intmaze[M2][N2],structmovedmove[],sqMAZE*s)
{inti,j,dir,x,y,f;
elemtypeelem;
i=1,j=1;
dir=0;
//起点x=1,y=1,第一个方向
maze[1][1]=-1;
do{x=i+move[dir].dx;
y=j+move[dir].dy;
if(maze[x][y]==0)//如果这步可以走,则记录下来,变成新的栈顶
{elem.x=i;
elem.y=j;
elem.dir=dir;
f=push(s,elem);
if(f==False)
栈长度不够,没法继续走\n"
else{i=x;
j=y;
dir=0;
maze[x][y]=-1;
else//如果这步不能走则换下一方向
if(dir<
7)
dir++;
{elem=pop(s);
if(elem.x!
=Null)
{i=elem.x;
j=elem.y;
dir=elem.dir+1;
}//if
}//else
}while(!
((s->
top==-1)&
(dir>
=7)||(x==M)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 东华大学 数据结构课程实验报告 东华 大学 数据结构 课程 实验 报告