数据结构课程设计报告四维数组应用Word格式文档下载.docx
《数据结构课程设计报告四维数组应用Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告四维数组应用Word格式文档下载.docx(20页珍藏版)》请在冰豆网上搜索。
完成最低要求:
完成第一个功能;
3.
进一步要求:
进一步完成后续功能。
有兴趣的同学可以自己扩充系统功能。
要求:
1)界面友好,函数功能要划分好
2)总体设计应画一流程图
3)程序要加必要的注释
4)要提供程序测试方案
5)程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。
二、软件环境
VC++6.0
三、程序源代码
#include<
stdio.h>
malloc.h>
stdlib.h>
#defineM100
typedefstruct
{
intdata;
intwei[4];
}node;
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;
max_meiwei[0];
i++)//坐标
for(j=0;
j<
max_meiwei[1];
j++)//初
{
for(k=0;
k<
max_meiwei[2];
k++)//始
{
for(l=0;
l<
max_meiwei[3];
l++)//化
{
G->
dat[n].wei[0]=i;
G->
dat[n].wei[1]=j;
dat[n].wei[2]=k;
dat[n].wei[3]=l;
n++;
}
}
}
for(n=0;
n<
m;
n++)//依次输入各个结点的坐标值
\t\t\t请输入A["
);
for(b=0;
b<
b++)
%d,"
G->
dat[n].wei[b]);
\b]的值\n"
dat[n].data);
system("
pause"
menu(G);
}
/*******************************************************/
voidoutput(shu*G)//输出按列优先顺序
inti,j,b,k,l,h,n;
i++)//先固定第四维,而后由里到外依次输出
j++)
k++)
l++)
printf("
\t\t"
for(h=0;
h<
h++)
{
if(G->
dat[h].wei[3]==i&
&
dat[h].wei[2]==j&
dat[h].wei[1]==k&
dat[h].wei[0]==l)
printf("
\t%d"
dat[h].data);
}
printf("
\n"
printf("
voidfind(shu*G)//给出任意元素值输出对应的一维数组所在的位置
inti,a,k=0,j;
cls"
\n\n\t\t\t请输入所查值:
"
scanf("
a);
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"
\n\t\t\t对应第一维位置为:
%d\n"
i);
\t\t\5\5\5\5\5\5\5\5\5\5\5\5\5\5\5\5\n"
k=1;
if(k==0)
\n\t\t\t~~~~(>
_<
)~~~~对不起,您所查询的数不存在!
~~~~(>
)~~~~\n"
\n\t\t\t继续1\n\t\t\t返回2\n\t\t\t请选择:
j);
if(j==1)
find(G);
elseif(j==2)
voidmenu(shu*G)//菜单
inti;
system("
color9a"
printf("
\t\t\n\n\n\n\n\n"
\t\t\n"
\t\t╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬\n"
\t\t║**************************************║\n"
\t\t╬*WELCOME*╬\n"
\t\t╬**╬\n"
\t\t║**║\n"
\t\t╬*☆输入(press1)*╬\n"
\t\t║*★输出(press2)*║\n"
\t\t║*☆查找(press3)*║\n"
\t\t╬*★退出(press0)*╬\n"
\t\t\t请选择"
\n\t\t\t"
scanf("
i);
switch(i)
case1:
input(G);
break;
case2:
output(G);
case3:
case0:
system("
\n\n"
\t\t \n"
\t\t \n"
\t\t ( .@.@ )\n"
\t\t+-------oOOo-----(_)-----oOOo---------+\n"
\t\t| |\n"
\t\t| 再见!
谢谢使用!
!
|\n"
\t\t| |\n"
\t\t+----------oooO-------Oooo--------------+\n"
exit(0);
break;
default:
menu(G);
break;
voidintroduce(shu*G)
inti;
\n\n\n\n\t\t☆此系统的功能有☆\n\n"
\t\t★按照行优先顺序将输入的数据建成4维数组\n\n"
\t\t★按照列优先顺序输出\n\n"
\t\t★给出任意处的元素值,查询相应的一维数组的序号\n\n"
\n\n\n\t\t按1返回\n"
\n\n\t\t按0退出\n"
if(i==1)
elseif(i==0)
main()
inti,j=1;
shu*G;
G=(shu*)malloc(sizeof(shu));
//开辟一段空间
while(j)//利用j来实现while循环
color9e"
\n\n\n"
\t\t┏━━━━━━━━━━━━━━━━━━━┓\n"
\t\t┃*******************┃\n"
\t\t┃*※欢迎使用数组应用系统※*┃\n"
\t\t┃********************┃\n"
\t\t┃**┃\n"
\t\t┃*☆☆☆☆☆☆☆☆*┃\n"
\t\t┃*★★★★★*┃\n"
\t\t┃*☆☆☆☆*┃\n"
\t\t┃*★★★★*┃\n"
\t\t┃*☆☆*┃\n"
\t\t┃*******************┃\n"
\t\t┗━━━━━━━━━━━━━━━━━━━┛\n"
\n\t\t\t\3\3\3\3\3\3\3\3\3简介1\3\3\3\3\3\3\3"
\n\n\n\t\t\t\3\3\3\3\3\3\3\3\3登录2\3\3\3\3\3\3\3"
\n\n\n\t\t\t\3\3\3\3\3\3\3\3\3退出3\3\3\3\3\3\3\3"
\n\t\t\t请选择:
switch(i){//case语句,控制输入情况
case1:
j=0;
introduce(G);
break;
case2:
case3:
j=0;
exit(0);
输入有误,请重新输入"
//增强程序健壮性
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:
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、网络资源
八.部分截图