东华大学 数据结构课程实验报告文档格式.docx

上传人:b****6 文档编号:16527145 上传时间:2022-11-24 格式:DOCX 页数:27 大小:227.28KB
下载 相关 举报
东华大学 数据结构课程实验报告文档格式.docx_第1页
第1页 / 共27页
东华大学 数据结构课程实验报告文档格式.docx_第2页
第2页 / 共27页
东华大学 数据结构课程实验报告文档格式.docx_第3页
第3页 / 共27页
东华大学 数据结构课程实验报告文档格式.docx_第4页
第4页 / 共27页
东华大学 数据结构课程实验报告文档格式.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

东华大学 数据结构课程实验报告文档格式.docx

《东华大学 数据结构课程实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《东华大学 数据结构课程实验报告文档格式.docx(27页珍藏版)》请在冰豆网上搜索。

东华大学 数据结构课程实验报告文档格式.docx

成绩输入/输出、查询结果、调用统计结果

输入数据:

学校编号、项目编号、取得的名次、哪些名次

采用结构体数据类型,利用冒泡法实现相应的排序;

利用“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)

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

当前位置:首页 > 高中教育 > 语文

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

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