数据结构课程设计数组应用.docx
- 文档编号:29423785
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:27
- 大小:213.52KB
数据结构课程设计数组应用.docx
《数据结构课程设计数组应用.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计数组应用.docx(27页珍藏版)》请在冰豆网上搜索。
数据结构课程设计数组应用
数据结构课程设计报告
课题:
数组的应用2
******
学号:
************
同组姓名:
洪晓佩
专业班级:
网工14102班
*******
设计时间:
2015.12.30
评阅意见:
评定成绩:
指导老师签名:
年月日
一、前言与系统需求分析................................4
1.1.前言.............................................4
1.2.系统需求分析.....................................4
二、总体设计.............................................4
2.1.主要函数.........................................4
2.2.主要流程图.......................................5
2.2.1求靠边元素和.................................5
2.2.2求互不相邻元素和.............................6
2.2.3求对角线元素和...............................7
三、详细设计.............................................7
3.1.菜单设计.........................................7
3.2.对三维数组操作的函数设计.........................8
3.3.初始化三维数组函数设计..........................10
3.4.求靠边元素和函数设计............................11
3.5.求互不相邻元素和函数设计........................12
3.6.求对角线元素和函数设计..........................13
3.7.释放内存空间函数设计............................14
四、系统运行与调试......................................14
五、总结与心得体会......................................18
六、参考文献............................................18
七、附录................................................18
摘要
数组是在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式。
在程序设计中数组的应用是非常广泛的,并且数组并不局限于一维数组和二维数组,它还可以拓展到三维或多维,当然原理还是和一维数组、二维数组是一样的,只是结构更加的复杂而已。
数组还能和指针,函数等数据结构进行综和应用。
本程序主要应用的是三维数组与指针的操作,程序实现对数组的动态分配地址,从终端键盘赋值。
对于矩阵的三维数组,能够实现对其查看源数组,数组靠边元素和,互不相邻元素和,对角线元素和的输出。
每个功能通过一个函数来实现,如菜单函数,求靠边元素和函数等。
本程序采用C语言编写。
关键词:
数据结构,数组的应用,三维数组,课程设计
一、前言与系统需求分析
1.1前言
数组的应用在程序设计语言当中是分厂重要的,在很多方面都会用到它,因其能够存储相同类型的元素而广泛应用。
本课程设计的开发也正是因为其在程序设计中的重要性而开发的,程序要求能够实现使用户确定该数组的行数和列数,即从终端输入数组的行数和列数,然后由系统自动分配一组连续的地址空间,接下来就是由用户输入数组的元素了,由此一系列的操作来实现设计的人性化。
在设计中主要应用的是三维数组,有的地方还结合了数组与指针的应用,设计中主要是由函数构成的,通过包含主函数在内的8个函数组成,每个函数难点之处有相应的注释。
设计的目标是实现对输入数组的查看源数组,靠边元素之和,互不相邻元素和,对角线元素之和。
在输出靠边元素之和,互不相邻元素和时,为了能够更加清楚知道是哪些元素相加的结果,在设计时,通过数的位置的形式把所相加的元素输出在了界面上。
总体来说,本设计完成了对三维数组操作的缜密性。
1.2系统需求分析
源程序是采用C语言的形式编写的有关数组的应用的程序。
主要写了几个函数,完成了简单的求靠边元素和、互不相邻元素和、对角线元素和的程序。
该程序对软硬件的要求比较低。
二、总体设计
2.1.主要函数
函数是程序中的主要部分,且程序本身就是由函数构成的。
本程序的主要功能就是通过调用相应功能的函数来实现的。
该程序的8个函数有:
1)intmain()//主函数
2)voidmenu(void);//程序主菜单
3)voidsanwei(void);//对三维数组操作主函数
4)int***proc10(intm,intn,into);//动态创建三维数组、初始化并打印
5)voidproc11(int***A,intm,intn,into);//求靠边元素和
6)voidproc12(int***A,intm,intn,into);//求从A[0][0][0]开始互不相邻元素之和
7)voidproc13(int***A,intm,intn,into);//求对角线元素之和
8)voidproc14(int***p,intm,intn,into);//释放内存空间
2.2.主要流程图
2.2.1求靠边元素和voidproc11(int***A,intm,intn,into)
是否
是否是否
2.2.2求互不相邻元素和voidproc12(int***A,intm,intn,into)
是
否
否
是
否
是
2.2.3求对角线元素和voidproc13(int***A,intm,intn,into)
是
否
三、详细设计
3.1.菜单设计
菜单能够体现出一个程序的完整性和条理性。
菜单设计中先输出可以供选择的演示程序的选项,然后通过switch语句进入选择界面或结束操作。
下面是菜单设计的详细代码:
voidmenu(void)
{
intitem;
//程序主菜单
do{
printf("\n……………………数组应用演示程序………………………\n\n");
printf("\t\t1.演示三维数组。
\n");
printf("\t\t0.退出演示程序。
\n\n");
printf("请输入要进行的操作:
");
scanf("%d",&item);
}while(item>3||item<0);
switch(item)
{
case1:
sanwei();break;
case0:
printf("\n……………演示结束,谢谢观看!
………………\n");
getchar();//保持界面
getchar();
exit
(1);//结束程序
}
}
3.2.对三维数组操作的函数设计
三维数组采用三级指针的形式定义,分别调用相应的函数进行对应的操作,以完成三级数组的要求。
程序源代码如下:
voidsanwei(void)
{
intm,n,o,i,j;
int***A;
//接收数组A参数
printf("\n请输入三维数组各个维数m,n,o[说明:
m>1,n>1,o>1.中间以空格隔开]\n[如输入:
543]:
");
scanf("%d%d%d",&m,&n,&o);
printf("\n");
A=proc10(m,n,o);//动态建立三维数组printf("\n……………………………………………………………\n");
printf("请按Enter键继续程序……");
fflush(stdin);
getchar();
proc11(A,m,n,o);//三维数组求靠边元素之和
printf("\n……………………………………………………………\n");
printf("请按Enter键继续程序……\n");
getchar();
proc12(A,m,n,o);//三维数组求从A[0][0][0]开始不相邻的元素之和
printf("\n……………………………………………………………\n");
printf("请按Enter键继续程序……\n");
getchar();
proc13(A,m,n,o);//三维数组求对角线之和
printf("\n……………………………………………………………\n");
printf("请按Enter键继续程序……\n");
getchar();
proc14(A,m,n,o);//释放内存空间
}
3.3.初始化三维数组函数设计
本程序采用动态生成三维数组的方式初始化三维数组并打印数组,输出数组A[i][j][k]。
程序源代码如下:
int***proc10(intm,intn,into)//生成初始化三维数组
{
inti,j,k,t=1;
int***A;
A=(int***)malloc(m*sizeof(int**));//动态生成三维数组、初始化数组并打印数组
printf("三维数组显示:
");
for(i=0;i { printf("\n"); A[i]=(int**)malloc(n*sizeof(int*)); for(j=0;j { printf("\n\t"); A[i][j]=(int*)malloc(o*sizeof(int)); for(k=0;k { A[i][j][k]=t; printf("%4d",A[i][j][k]); } } } printf("\n"); returnA; } 3.4.求靠边元素和函数设计 该函数要弄懂三维数组才能进一步求出靠边元素。 由于时间有限,此程序没有考虑特殊情况(数组只有一列),所以程序比较简单。 程序源代码如下: voidproc11(int***A,intm,intn,into)//三维数组求靠边元素之和 { inti,j,k,sum=0; printf("\n1.三维数组求靠边元素之和: \n"); for(i=0;i { printf("\n"); for(j=0;j { printf("\n\t"); for(k=0;k { if(i%(m-1)==0) {if(j%(n-1)==0||k%(o-1)==0) {printf("%4d",A[i][j][k]);sum+=A[i][j][k];}elseprintf("");}//求两端靠边元素 else {if(j%(n-1)==0&&k%(o-1)==0) {printf("%4d",A[i][j][k]);sum+=A[i][j][k];}elseprintf("");}//求中间靠边元素 } } } printf("\n元素之和: %4d\n",sum); } 3.5.求互不相邻元素和函数设计 三维数组要求互不相邻元素要考虑什么时候数组才会互不相邻。 三维数组的互不相邻为上下左右均不相邻,所以循环的时候要i=i+2,j=j+2,k=k+2,才会避开上下左右的元素。 程序源代码如下: voidproc12(int***A,intm,intn,into)//三维数组求从A[0][0][0]开始互不相邻的元素之和 { intsum=0,i=0,j,k,t=0; printf("2.三维数组求从A[0][0][0]开始互不相邻的元素之和: \n"); printf("相隔元素: "); while(i j=0; while(j k=0; while(k t++; printf("%4d",A[i][j][k]); sum=sum+A[i][j][k]; k=k+2;//跳过一次 if(t%10==0)printf("/n/t"); } j=j+2;//跳过一次 } i=i+2;//跳过一次 } printf("\n元素之和: %4d\n",sum); } 3.6.求对角线元素和函数设计 只有在m、n、o三个元素都相等,即三维数组为立方体时,才会有对角线,对角线有四条(左上右下、左下右上、右上左下、右下左上),求出这四条对角线和即可,如果m、n、o三个元素不相等时,直接输出不等。 程序源代码如下: voidproc13(int***A,intm,intn,into)//三维数组求对角线元素之和 { inti,sum=0; printf("3.三维数组求对角线元素之和: \n"); if(m==n&&n==o) { printf("维数比较: m、n、o相等\n"); for(i=0;i { printf("\t"); printf("%4d",A[i][i][i]); printf("%4d",A[i][m-i-1][m-i-1]); printf("%4d",A[m-i-1][i][m-i-1]); printf("%4d",A[m-i-1][m-i-1][i]); sum+=(A[i][i][i]+A[i][m-i-1][m-i-1]+A[m-i-1][i][m-i-1]+A[m-i-1][m-i-1][i]); printf("\n"); } printf("元素之和: %4d\n",sum); } else printf("维数比较: m、n、o不等\n"); } 3.7.释放内存空间函数设计 在进行完上述函数操作后,要释放内存空间以进行下一步操作。 程序源代码如下: voidproc14(int***p,intm,intn,into)//释放内存空间 { inti,j; for(i=0;i { for(j=0;j free(p[i][j]); free(p[i]); } free(p); } 四、系统运行与调试 写完程序要不仅要进行编译链接,还要对程序进行调试,才能看到自己的程序是否有错,进一步修改或完善程序。 调试结果如下: 图4-1演示程序菜单界面 图4-2创建三维数组界面 图4-3-1显示三维数组界面 图4-3-2显示三维数组界面 图4-4求靠边元素和界面 图4-5求互不相邻元素和界面 图4-6m、n、o不等时对角线和界面 图4-7m、n、o相等时对角线和界面 图4-8退出演示界面 五、总结与心得体会 程序中遇到的问题: 在编写程序的过程中遇到了几个问题,比如指针调用问题。 在解决此类问题时,要明确指针要什么时候调用,要调用哪个函数才能更好的写出程序来。 在写靠边元素和的函数时,要明白数组是怎样排列的,哪些元素才是靠边元素;在写互不相邻元素和函数时,要考虑上下左右均不相邻;在求对角线元素和函数时,首先要看m、n、o是否相等,若不等时直接输出不等,若相等时输出各个对角线及对角线和。 充分理解了以上问题才能更好的编写程序。 在本程序中,我所遇到的问题就是这些。 总结: 在进行课程设计的过程中,我深刻的理解了数组,明白了数组是如何应用的,在以前二维数组的基础上又进一步学习了三维数组,理解了三维数组的基本原理,并可以编写简单的程序。 此次实验,在做课程设计的同时也复习和巩固了数组,理解了许多以前不是很清楚的东西。 在此次课程设计中,有很多知识是教材上没有提到的,所以要去网上查阅资料,学习一些知识和方法来提高自己的编程能力。 在自己编写程序的过程中,要先明确问题,对问题进行分析,先有一个大体的思路再具体地写程序。 此次程序过程中还有一些不足,我会在以后好好改正,好好的完成程序。 六、参考文献 严蔚敏,吴伟民﹒数据结构(C语言版)[M]﹒北京: 清华大学出版社,2007 严蔚敏,吴伟民,米宁﹒数据结构题集(C语言版)[M]﹒北京: 清华大学出版社,2014 谭浩强﹒C语言程序设计[M]﹒北京: 清华大学出版社,2009 陈维兴,林小茶﹒C++面向对象程序设计教程[M]﹒北京: 清华大学出版社,2009 七、附录 程序源代码: #include #include #include //自定义函数 voidmenu(void);//程序主菜单 voidsanwei(void);//对三维数组操作主函数 int***proc10(intm,intn,into);//动态创建三维数组、初始化并打印 voidproc11(int***A,intm,intn,into);//求靠边元素 voidproc12(int***A,intm,intn,into);//求从A[0][0][0]开始互不相邻元素之和 voidproc13(int***A,intm,intn,into);//求对角线元素之和 voidproc14(int***p,intm,intn,into);//释放内存空间 intmain() { while (1) { menu(); } return0; } voidmenu(void) { intitem; //程序主菜单 do{ printf("\n…………………数组应用演示程序…………………\n\n"); printf("\t\t1.演示三维数组。 \n"); printf("\t\t0.退出演示程序。 \n\n"); printf("请输入要进行的操作: "); scanf("%d",&item); }while(item>3||item<0); switch(item) { case1: sanwei();break; case0: printf("\n…………演示结束,谢谢观看! …………\n"); getchar();//保持界面 getchar(); exit (1);//结束程序 } } voidsanwei(void)//三维数组 { intm,n,o,i,j; int***A; //接收数组A参数 printf("\n请输入三维数组各个维数m,n,o[说明: m>1,n>1,o>1.中间以空格隔开]\n[如输入: 543]: "); scanf("%d%d%d",&m,&n,&o); printf("\n"); A=proc10(m,n,o);//动态建立三维数组 printf("\n……………………………………………………………………\n"); printf("请按Enter键继续程序……"); fflush(stdin); getchar(); proc11(A,m,n,o);//三维数组求靠边元素之和 printf("\n………………………………………………………………\n"); printf("请按Enter键继续程序……\n"); getchar(); proc12(A,m,n,o);//三维数组求从A[0][0][0]开始不相邻的元素之和 printf("\n………………………………………………………………\n"); printf("请按Enter键继续程序……\n"); getchar(); proc13(A,m,n,o);//三维数组求对角线之和 printf("\n………………………………………………………………\n"); printf("请按Enter键继续程序……\n"); getchar(); proc14(A,m,n,o);//释放内存空间 } int***proc10(intm,intn,into)//生成初始化三维数组 { inti,j,k,t=1; int***A; A=(int***)malloc(m*sizeof(int**));//动态生成三维数组、初始化数组并打印数组 printf("三维数组显示: "); for(i=0;i { printf("\n"); A[i]=(int**)malloc(n*sizeof(int*)); for(j=0;j { printf("\n\t"); A[i][j]=(int*)malloc(o*sizeof(int)); for(k=0;k { A[i][j][k]=t; printf("%4d",A[i][j][k]); } } } printf("\n"); returnA; } voidproc11(int***A,intm,intn,into)//三维数组求靠边元素之和 { inti,j,k,sum=0; printf("\n1.三维数组求靠边元素之和: \n"); for(i=0;i { printf("\n"); for(j=0;j { printf("\n\t"); for(k=0;k { if(i%(m-1)==0) { if(j%(n-1)==0||k%(o-1)==0) { printf("%4d",A[i][j][k]); sum+=A[i][j][k]; } else printf(""); }//求两端靠边元素 else { if(j%(n-1)==0&&k%(o-1)==0) { printf("%4d",A[i][j][k]); sum+=A[i][j][k]; } else printf(""); }//求中间靠边元素 } } } printf("\n元素之和: %4d\n",sum); } voidproc12(int***A,intm,intn,into)//三维数组求从A[0][0][0]开始互不相邻的元素之和 { int
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 数组 应用
![提示](https://static.bdocx.com/images/bang_tan.gif)