综合性设计性实验报告数组应用4维数组.docx
- 文档编号:11203270
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:18
- 大小:107.66KB
综合性设计性实验报告数组应用4维数组.docx
《综合性设计性实验报告数组应用4维数组.docx》由会员分享,可在线阅读,更多相关《综合性设计性实验报告数组应用4维数组.docx(18页珍藏版)》请在冰豆网上搜索。
综合性设计性实验报告数组应用4维数组
综合性、设计性实验报告
姓名学号
专业计算机科学与技术班级1402
实验课程名称____数据结构_
指导教师及职称___
开课学期2016年_上学期
上课时间
实验名称:
数组应用
实验时间:
小组合作:
是●否○
1、实验目的:
(1)掌握数组的基本应用和方法;
(2)掌握字符数组和字符串函数的使用。
(3)掌握与字符串处理有关的算法。
2、实验设备及材料:
机器配置:
4G内存,AMDA8
操作系统:
windowsxp
开发工具:
VC++6.0
3、理论依据:
窗体顶端
【1】在C语言的环境,有一个四维数组,在计算机中都是以一维的形式保存。
【2】窗体顶端
【2】例如intcof[2][2][2][2]在计算机中保存形式与一个2*2*2*2大小的一维数组相同,
窗体顶端
想要寻址一个数,因为编译器在看到数组的定义时就知道了数组每一维的大小.于是可以计算定位到相对于数组开始处的偏移.
【3】为了容易理解,都是把多维数组分解成几行,每行中又有几列的这种形式,例如intcof[4][6][4][4],就是4行,每行中有6个元素,每个元素又是一个有4个子元素一维数组,
而数组中的每个子元素仍然还是一个有4个子元素数组,
窗体底端
【4】四维数组可视为以三维数组为数据元素的向量,四维数组中的每个元素都属于四个向量。
窗体底端
窗体底端
【5】由于计算机内存是一维的,多维数组的元素应排成线性序列后存人存储器。
数组一般不做插入和删除操作,即结构中元素个数和元素间关系不变化。
一般采用顺序存储方法表示数组。
分为行优先顺序和列优先顺序。
【6】由地址计算公式可得,数组中任一元素可通过地址公式在相同时间内存取。
即顺序存储的数组是随机存取结构。
4、算法步骤及注意事项:
算法步骤:
(1)首先,在定义四维数组的数据类型时,我选择了整型以方便编程及利于数据的输入和输出。
为了实现任务所要求的功能,我将程序划分为三类:
功能函数,界面函数以及主函数。
另外,其中的功能函数包括以下几种函数:
四维数组元素输入函数、四维数组元素输出函数、元素查找函数、功能介绍函数以及主函数。
(2)对于四维数组输入函数,我通过四个for循环语句先对数组的坐标进行初始化,并输入各个维的长度。
然后,再利用一个for循环输入各个元素值。
输入时,先固定第一维,然后依次输入各个结点的元素值。
(3)对于思维数组输出函数,我也是通过多重for循环进行元素值的输出。
先固定第四维,然后依次输出各个结点的元素值。
对于元素查找函数,就比较简单了。
就是依次对四维数组中的元素值进行比对,如果所查找的元素与数组中的元素值相同,则输出该元素所在的一维编号即可。
(4)界面函数包括欢迎界面以及选择菜单界面,包括在完成某些操作后循环出现的选择界面。
出于对界面更加友好的考虑,我适当的装饰了一下界面,并采用了DOS系统的清屏命令以及暂停函数,这样就使得界面更加的清晰、简洁,便于使用。
(5)在主函数里,我先输入了欢迎界面,然后进入系统选择菜单,最后在退出该系统时,还设置了欢送界面,使得该系统更加的人性化。
流程图:
主要功能模块流程图
数组输入函数流程图
数组输出函数流程图
5.实验数据处理方法:
查找函数流程图
6.参考文献:
李春葆编写,《数据结构与算法》,清华大学出版社,2009年8月第2版。
指导老师对实验设计方案的意见:
指导老师签名:
年月日
2、实验数据及结果
输入数据:
一二三四维数分别为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
3、对实验结果的分析与讨论:
通过数据结构的课程设计,我们学到了许多,并将这些知识应用于实践中,进一步锻炼了自己的动手能力。
当然,也会出现一些问题。
说明界面还不够友好。
输入个数不对时并没有提示,这是程序的不足之处,也需要我们更深入的去学习新的知识。
4、结论:
1、对于出现的调试错误要仔细分析错误的原因,根据错误提示,按照自顶向下的程序设计原则,逐个进行排错。
只要够细心,就一定能够找到错误的所在。
2、程序的易操作性很重要,也就是要有一个足够友好的界面。
基于这一点,我设计了自己程序的人机对话界面,通过一个个选项来完成各种操作,大大增强了程序的易用性。
3、要善于利用各种资源,以此提高自己编程的效率。
否则,就会花费许多无谓的时间在不必要的事情上面。
编写的程序要通俗易懂,比如变量与函数的定义要尽量做到见名知义。
5、实验总结
1、编程过程中加入必要的注释是很重要的,这不仅时为了别人能更容易的看懂你的源程序,更重要的是方便自己未来的修改。
因为程序源代码一多,自己未必能够十分清楚变量及函数的作用。
此时,加必要的注释,就能帮助自己变量及函数的含义,而不是从头理解,提高了工作的效率。
2、界面简单易懂,让别人更容易掌握,通过学习,学到了改变界面颜色,实现实验要求的扩充系统功能。
指导老师评语及得分:
签名:
年月日
湖南科技学院教务处编印
注意:
实验代码作为附件放在实验报告之后
源代码:
#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;i
{
for(j=0;j
{
for(k=0;k
{
for(l=0;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;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;i
{
for(j=0;j
{
for(k=0;k
{
for(l=0;l
{
printf("\t\t");
for(h=0;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;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;
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 综合性 设计 实验 报告 数组 应用