数据结构课程设计报告四维数组应用.docx
《数据结构课程设计报告四维数组应用.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告四维数组应用.docx(20页珍藏版)》请在冰豆网上搜索。
![数据结构课程设计报告四维数组应用.docx](https://file1.bdocx.com/fileroot1/2023-1/24/1d4686a0-2970-46de-866f-325a433765ca/1d4686a0-2970-46de-866f-325a433765ca1.gif)
数据结构课程设计报告四维数组应用
数据结构
课程设计报告
(原创)
设计题目:
数组应用
专业
班级
学生
学号
指导教师
时间
一、设计任务……………………………………3
二、软件环境……………………………………4
三、程序源代码…………………………………4
四、算法设计思想及流程图……………………11
4.1算法设计思想……………………………11
4.2流程图……………………………………13
4.2.1主要功能模块流程图………………13
4.2.2输入函数流程图……………………13
4.2.3输出函数流程图……………………14
4.2.4查找函数流程图……………………15
五、输入及相应运行结果………………………16
六、收获及体会…………………………………19
七、参考文献……………………………………20
八、附录(部分截图)…………………………21
一、设计任务
题目:
数组应用
功能:
按照行优先顺序将输入的数据建成4维数组,再按照列优先顺序输出结果,给出任意处的元素值,并给出对应的一维数组中的序号。
分步实施:
1.初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;
2. 完成最低要求:
完成第一个功能;
3. 进一步要求:
进一步完成后续功能。
有兴趣的同学可以自己扩充系统功能。
要求:
1)界面友好,函数功能要划分好
2)总体设计应画一流程图
3)程序要加必要的注释
4)要提供程序测试方案
5)程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。
二、软件环境
VC++6.0
三、程序源代码
#include
#include
#include
#defineM100
typedefstruct
{
intdata;
intwei[4];
}node;
typedefstruct
{
nodedat[M];
intmax_meiwei[4];//每维的长度
intm;
}shu;
voidmenu(shu*G);
voidinput(shu*G);
voidoutput(shu*G);
voidfind(shu*G);
voidintroduce(shu*G);//函数声明
/***********************************************************/
voidinput(shu*G)//输入按行
{
inti,j,k,l,h,b,n;
G->m=1;
for(i=0;i<4;i++)//依次输入第一、二、三、四维的长度
{
printf("\t\t\t请输入第%d维的长度:
",i+1);
scanf("%d",&G->max_meiwei[i]);
G->m*=G->max_meiwei[i];//维数长度积即为数据个数
}
n=0;
for(i=0;imax_meiwei[0];i++)//坐标
{
for(j=0;jmax_meiwei[1];j++)//初
{
for(k=0;kmax_meiwei[2];k++)//始
{
for(l=0;lmax_meiwei[3];l++)//化
{
G->dat[n].wei[0]=i;
G->dat[n].wei[1]=j;
G->dat[n].wei[2]=k;
G->dat[n].wei[3]=l;
n++;
}
}
}
}
for(n=0;nm;n++)//依次输入各个结点的坐标值
{
printf("\t\t\t请输入A[");
for(b=0;b<4;b++)
{
printf("%d,",G->dat[n].wei[b]);
}
printf("\b]的值\n");
scanf("%d",&G->dat[n].data);
}
system("pause");
menu(G);
}
/*******************************************************/
voidoutput(shu*G)//输出按列优先顺序
{
inti,j,b,k,l,h,n;
for(i=0;imax_meiwei[3];i++)//先固定第四维,而后由里到外依次输出
{
for(j=0;jmax_meiwei[2];j++)
{
for(k=0;kmax_meiwei[1];k++)
{
for(l=0;lmax_meiwei[0];l++)
{
printf("\t\t");
for(h=0;hm;h++)
{
if(G->dat[h].wei[3]==i&&G->dat[h].wei[2]==j&&G->dat[h].wei[1]==k&&G->dat[h].wei[0]==l)
{
printf("\t%d",G->dat[h].data);
}
}
}
printf("\n");
}
}
}
printf("\n");
system("pause");
menu(G);
}
/*******************************************************/
/*******************************************************/
voidfind(shu*G)//给出任意元素值输出对应的一维数组所在的位置
{
inti,a,k=0,j;
system("cls");
printf("\n\n\t\t\t请输入所查值:
");
scanf("%d",&a);
for(i=0;im;i++)
{
if(a==G->dat[i].data)//逐个比较,找出数组中和所给值相等的数
{
printf("\n\t\t\4\4\4\4\4\4\4\4\4\4\4\4\4\4\\4\4");
printf("\n\t\t\t对应第一维位置为:
%d\n",i);
printf("\t\t\5\5\5\5\5\5\5\5\5\5\5\5\5\5\5\5\n");
k=1;
}
}
if(k==0)
{
printf("\n\t\t\t~~~~(>_<)~~~~对不起,您所查询的数不存在!
~~~~(>_<)~~~~\n");
printf("\n\t\t\t继续1\n\t\t\t返回2\n\t\t\t请选择:
");
scanf("%d",&j);
if(j==1)
{
find(G);
}
elseif(j==2)
{
menu(G);
}
}
system("pause");
menu(G);
}
/*******************************************************/
voidmenu(shu*G)//菜单
{
inti;
system("cls");
system("color9a");
printf("\t\t\n\n\n\n\n\n");
printf("\t\t\n");
printf("\t\t╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬\n");
printf("\t\t║**************************************║\n");
printf("\t\t╬*WELCOME*╬\n");
printf("\t\t║**************************************║\n");
printf("\t\t╬**╬\n");
printf("\t\t║**║\n");
printf("\t\t╬*☆输入(press1)*╬\n");
printf("\t\t║*★输出(press2)*║\n");
printf("\t\t║*☆查找(press3)*║\n");
printf("\t\t╬*★退出(press0)*╬\n");
printf("\t\t║**║\n");
printf("\t\t║**************************************║\n");
printf("\t\t╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬\n");
printf("\t\t\t请选择");
printf("\n\t\t\t");
scanf("%d",&i);
switch(i)
{
case1:
input(G);
break;
case2:
output(G);
break;
case3:
find(G);
break;
case0:
{
system("cls");
printf("\n\n");
printf("\t\t \n");
printf("\t\t \n");
printf("\t\t ( .@.@ )\n");
printf("\t\t+-------oOOo-----(_)-----oOOo---------+\n");
printf("\t\t| |\n");
printf("\t\t| 再见!
谢谢使用!
!
|\n");
printf("\t\t| |\n");
printf("\t\t+----------oooO-------Oooo--------------+\n");
printf("\n\n");
exit(0);
break;
}
default:
menu(G);
break;
}
}
/*******************************************************/
/*******************************************************/
voidintroduce(shu*G)
{
inti;
system("cls");
printf("\n\n\n\n\t\t☆此系统的功能有☆\n\n");
printf("\t\t★按照行优先顺序将输入的数据建成4维数组\n\n");
printf("\t\t★按照列优先顺序输出\n\n");
printf("\t\t★给出任意处的元素值,查询相应的一维数组的序号\n\n");
printf("\n\n\n\t\t按1返回\n");
printf("\n\n\t\t按0退出\n");
scanf("%d",&i);
if(i==1)
{
menu(G);
}
elseif(i==0)
{
exit(0);
}
}
/*******************************************************/
main()
{
inti,j=1;
shu*G;
G=(shu*)malloc(sizeof(shu));//开辟一段空间
while(j)//利用j来实现while循环
{
system("cls");
system("color9e");
printf("\n\n\n");
printf("\t\t┏━━━━━━━━━━━━━━━━━━━┓\n");
printf("\t\t┃*******************┃\n");
printf("\t\t┃*※欢迎使用数组应用系统※*┃\n");
printf("\t\t┃********************┃\n");
printf("\t\t┃**┃\n");
printf("\t\t┃**┃\n");
printf("\t\t┃*☆☆☆☆☆☆☆☆*┃\n");
printf("\t\t┃*★★★★★*┃\n");
printf("\t\t┃*☆☆☆☆*┃\n");
printf("\t\t┃*★★★★*┃\n");
printf("\t\t┃*☆☆☆☆*┃\n");
printf("\t\t┃*★★★★*┃\n");
printf("\t\t┃*☆☆☆☆*┃\n");
printf("\t\t┃*★★★★*┃\n");
printf("\t\t┃*☆☆*┃\n");
printf("\t\t┃**┃\n");
printf("\t\t┃*******************┃\n");
printf("\t\t┗━━━━━━━━━━━━━━━━━━━┛\n");
printf("\n\t\t\t\3\3\3\3\3\3\3\3\3简介1\3\3\3\3\3\3\3");
printf("\n\n\n\t\t\t\3\3\3\3\3\3\3\3\3登录2\3\3\3\3\3\3\3");
printf("\n\n\n\t\t\t\3\3\3\3\3\3\3\3\3退出3\3\3\3\3\3\3\3");
printf("\n\t\t\t请选择:
");
scanf("%d",&i);
switch(i){//case语句,控制输入情况
case1:
j=0;
introduce(G);break;
case2:
j=0;
menu(G);break;
case3:
j=0;
exit(0);
default:
printf("输入有误,请重新输入");//增强程序健壮性
j=1;
}
}
return0;
}
四、算法设计思想及流程图
4.1算法设计思想
首先,在定义四维数组的数据类型时,我选择了整型以方便编程及利于数据的输入和输出。
为了实现任务所要求的功能,我将程序划分为三类:
功能函数,界面函数以及主函数。
另外,其中的功能函数包括以下几种函数:
四维数组元素输入函数、四维数组元素输出函数、元素查找函数、功能介绍函数以及主函数。
对于四维数组输入函数,我通过四个for循环语句先对数组的坐标进行初始化,并输入各个维的长度。
然后,再利用一个for循环输入各个元素值。
输入时,先固定第一维,然后依次输入各个结点的元素值。
对于思维数组输出函数,我也是通过多重for循环进行元素值的输出。
先固定第四维,然后依次输出各个结点的元素值。
对于元素查找函数,就比较简单了。
就是依次对四维数组中的元素值进行比对,如果所查找的元素与数组中的元素值相同,则输出该元素所在的一维编号即可。
界面函数包括欢迎界面以及选择菜单界面,包括在完成某些操作后循环出现的选择界面。
出于对界面更加友好的考虑,我适当的装饰了一下界面,并采用了DOS系统的清屏命令以及暂停函数,这样就使得界面更加的清晰、简洁,便于使用。
在主函数里,我先输入了欢迎界面,然后进入系统选择菜单,最后在退出该系统时,还设置了欢送界面,使得该系统更加的人性化。
4.2流程图
4.2.1主要功能模块流程图
4.2.2数组输入函数流程图
4.2.3数组输出函数流程图
4.2.4查找函数流程图
五、输入及相应运行结果
第一组:
一二三四维数分别为2,2,2,2,
行优先输入16个数:
1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16
列优先输出相应结果:
19
513
311
715
210
614
412
816
查找元素16:
对应的一维位置为15
第二组:
一二三四维数分别为2,2,2,2:
行优先输入16个数:
5,3,4,7,11,3,9,10,8,5,5,7,40,21,31,22
列优先输出相应结果:
58
1140
45
931
35
321
77
1022
查找元素7:
对应的一维位置为3,11
六、收获及体会
通过数据结构的课程设计,我学到了许多,并将这些知识应用于实践中,进一步锻炼了自己的动手能力。
当然,也会出现一些问题。
总结如下:
1、对于出现的调试错误要仔细分析错误的原因,根据错误提示,按照自顶向下的程序设计原则,逐个进行排错。
只要够细心,就一定能够找到错误的所在。
2、程序的易操作性很重要,也就是要有一个足够友好的界面。
基于这一点,我设计了自己程序的人机对话界面,通过一个个选项来完成各种操作,大大增强了程序的易用性。
3、编程过程中加入必要的注释是很重要的,这不仅时为了别人能更容易的看懂你的源程序,更重要的是方便自己未来的修改。
因为程序源代码一多,自己未必能够十分清楚变量及函数的作用。
此时,加必要的注释,就能帮助自己变量及函数的含义,而不是从头理解,提高了工作的效率。
4、要善于利用各种资源,以此提高自己编程的效率。
否则,就会花费许多无谓的时间在不必要的事情上面。
5、编写的程序要通俗易懂,比如变量与函数的定义要尽量做到见名知义。
七、参考文献
1、谭浩强编著C程序设计(第四版)
清华大学出版社2010.01
2、严蔚敏编著数据结构(C语言版)
清华大学出版社1997.04
3、网络资源
八.部分截图