數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)(數(shù)組應(yīng)用)_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)(數(shù)組應(yīng)用)_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)(數(shù)組應(yīng)用)_第3頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、數(shù)據(jù)結(jié)構(gòu) 課程設(shè)計(jì)報(bào)告課題:數(shù)組的應(yīng)用2姓名:譚孟杰學(xué)號(hào):201417030223同組姓名:洪曉佩專業(yè)班級(jí):網(wǎng)工 14102 班指導(dǎo)教師:周學(xué)清設(shè)計(jì)時(shí)間:評(píng)閱意見:評(píng)定成績(jī):指導(dǎo)老師簽名:年月日1目 錄一、前言與系統(tǒng)需求分析41.1. 前言41.2. 系統(tǒng)需求分析4二、總體設(shè)計(jì)42.1. 主要函數(shù)42.2. 主要流程圖5求靠邊元素和5求互不相鄰元素和6求對(duì)角線元素和7三、詳細(xì)設(shè)計(jì)73.1. 菜單設(shè)計(jì)73.2. 對(duì)三維數(shù)組操作的函數(shù)設(shè)計(jì)83.3. 初始化三維數(shù)組函數(shù)設(shè)計(jì)103.4. 求靠邊元素和函數(shù)設(shè)計(jì)113.5. 求互不相鄰元素和函數(shù)設(shè)計(jì)123.6. 求對(duì)角線元素和函數(shù)設(shè)計(jì)133.7. 釋放內(nèi)

2、存空間函數(shù)設(shè)計(jì)14四、系統(tǒng)運(yùn)行與調(diào)試14五、總結(jié)與心得體會(huì)18六、參考文獻(xiàn)18七、附錄182摘 要數(shù)組是在程序設(shè)計(jì)中,為了處理方便,把具有相同類型的若干變量按有序的形式組織起來(lái)的一種形式。在程序設(shè)計(jì)中數(shù)組的應(yīng)用是非常廣泛的,并且數(shù)組并不局限于一維數(shù)組和二維數(shù)組,它還可以拓展到三維或多維,當(dāng)然原理還是和一維數(shù)組、二維數(shù)組是一樣的,只是結(jié)構(gòu)更加的復(fù)雜而已。數(shù)組還能和指針,函數(shù)等數(shù)據(jù)結(jié)構(gòu)進(jìn)行綜和應(yīng)用。本程序主要應(yīng)用的是三維數(shù)組與指針的操作,程序?qū)崿F(xiàn)對(duì)數(shù)組的動(dòng)態(tài)分配地址,從終端鍵盤賦值。對(duì)于矩陣的三維數(shù)組,能夠?qū)崿F(xiàn)對(duì)其查看源數(shù)組,數(shù)組靠邊元素和,互不相鄰元素和,對(duì)角線元素和的輸出。每個(gè)功能通過(guò)一個(gè)函數(shù)

3、來(lái)實(shí)現(xiàn),如菜單函數(shù),求靠邊元素和函數(shù)等。本程序采用 C 語(yǔ)言編寫。關(guān)鍵詞: 數(shù)據(jù)結(jié)構(gòu),數(shù)組的應(yīng)用,三維數(shù)組,課程設(shè)計(jì)3一、前言與系統(tǒng)需求分析1.1 前言數(shù)組的應(yīng)用在程序設(shè)計(jì)語(yǔ)言當(dāng)中是分廠重要的,在很多方面都會(huì)用到它,因其能夠存儲(chǔ)相同類型的元素而廣泛應(yīng)用。本課程設(shè)計(jì)的開發(fā)也正是因?yàn)槠湓诔绦蛟O(shè)計(jì)中的重要性而開發(fā)的,程序要求能夠?qū)崿F(xiàn)使用戶確定該數(shù)組的行數(shù)和列數(shù), 即從終端輸入數(shù)組的行數(shù)和列數(shù),然后由系統(tǒng)自動(dòng)分配一組連續(xù)的地址空間,接下來(lái)就是由用戶輸入數(shù)組的元素了,由此一系列的操作來(lái)實(shí)現(xiàn)設(shè)計(jì)的人性化。在設(shè)計(jì)中主要應(yīng)用的是三維數(shù)組,有的地方還結(jié)合了數(shù)組與指針的應(yīng)用,設(shè)計(jì)中主要是由函數(shù)構(gòu)成的,通過(guò)包含主函

4、數(shù)在內(nèi)的 8 個(gè)函數(shù)組成,每個(gè)函數(shù)難點(diǎn)之處有相應(yīng)的注釋。設(shè)計(jì)的目標(biāo)是實(shí)現(xiàn)對(duì)輸入數(shù)組的查看源數(shù)組,靠邊元素之和,互不相鄰元素和,對(duì)角線元素之和。在輸出靠邊元素之和,互不相鄰元素和時(shí),為了能夠更加清楚知道是哪些元素相加的結(jié)果,在設(shè)計(jì)時(shí),通過(guò)數(shù)的位置的形式把所相加的元素輸出在了界面上??傮w來(lái)說(shuō),本設(shè)計(jì)完成了對(duì)三維數(shù)組操作的縝密性。1.2 系統(tǒng)需求分析源程序是采用 C 語(yǔ)言的形式編寫的有關(guān)數(shù)組的應(yīng)用的程序。主要寫了幾個(gè)函數(shù),完成了簡(jiǎn)單的求靠邊元素和、互不相鄰元素和、對(duì)角線元素和的程序。該程序?qū)浻布囊蟊容^低。二、總體設(shè)計(jì)2.1. 主要函數(shù)函數(shù)是程序中的主要部分,且程序本身就是由函數(shù)構(gòu)成的。本程序的

5、主要功能就是通過(guò)調(diào)用相應(yīng)功能的函數(shù)來(lái)實(shí)現(xiàn)的。該程序的8 個(gè)函數(shù)有:1)int main()/主函數(shù)2)void menu(void);/程序主菜單3)void sanwei(void);/對(duì)三維數(shù)組操作主函數(shù)4)int *proc10(int m,int n,int o); /動(dòng)態(tài)創(chuàng)建三維數(shù)組、初始化并打印45)void proc11(int *A,int m,int n,int o);/求靠邊元素和6)void proc12(int *A,int m,int n,int o);/求從 A000開始互不相鄰元素之和7)void proc13(int *A,int m,int n,int o);

6、/求對(duì)角線元素之和8)void proc14(int *p,int m,int n,int o);/釋放內(nèi)存空間2.2. 主要流程圖求靠邊元素和 void proc11(int*A,intm,intn,into)開始定義變量 i,j ,k,sum輸入提示信息兩個(gè) for 循環(huán)控制if (i%(m-1)=0)是否if(j%(n-1)=0|if(j%(n-1)=0&k%(o-1)=0)& k%(o-1)=0)是否是否輸出 Aijk輸出 Aijk空格空格輸出 sum結(jié)束5求互不相鄰元素和void proc12(int*A,intm,intn,into)開始定義變量i,j,k,t,su

7、m輸入提示信息while(i<m)是j=0否i=i+2否while(j<n)是k=0否j=j+2while(k<o)是輸出 AijkSum+=Aijk輸出 sum結(jié)束6求對(duì)角線元素和void proc13(int *A,int m,int n,int o)開始定義變量i,sum輸入提示信息if(m=n && n=o)是輸出 m,n,o 相等否輸出 m,n,o 不等輸出 AiiiAim-i-1m-i-1Am-i-1im-i-1Am-i-1m-i-1i輸出 sum結(jié)束三、詳細(xì)設(shè)計(jì)3.1. 菜單設(shè)計(jì)菜單能夠體現(xiàn)出一個(gè)程序的完整性和條理性。菜單設(shè)計(jì)中先輸出可以供選擇的

8、演示程序的選項(xiàng),然后通過(guò)switch 語(yǔ)句進(jìn)入選擇界面或結(jié)束操作。下面是菜單設(shè)計(jì)的詳細(xì)代碼:7void menu(void)int item;/ 程序主菜單doprintf("n數(shù)組應(yīng)用演示程序nn");printf("tt1.演 示 三 維 數(shù) 組。 n");printf("tt0.退 出 演 示 程 序。 nn");printf("請(qǐng)輸入要進(jìn)行的操作 : " );scanf("%d",&item);while(item>3 | item<0);switch(item)ca

9、se 1: sanwei();break;case 0: printf("n演示結(jié)束,謝謝觀看 ! n");getchar(); /保持界面getchar();exit(1);/結(jié)束程序3.2. 對(duì)三維數(shù)組操作的函數(shù)設(shè)計(jì)三維數(shù)組采用三級(jí)指針的形式定義,分別調(diào)用相應(yīng)的函數(shù)進(jìn)行對(duì)應(yīng)的操作,以完成三級(jí)數(shù)組的要求。程序源代碼如下:8void sanwei(void)int m,n,o,i,j;int *A;/ 接收數(shù)組 A 參數(shù)printf("n請(qǐng)輸入三維數(shù)組各個(gè)維數(shù)m,n,o 說(shuō)明 :m>1,n>1,o>1. 中間以空格隔開 n如輸入 :5 4 3:&

10、quot;);scanf("%d%d%d",&m,&n,&o);printf("n");A=proc10(m,n,o);/動(dòng)態(tài)建立三維數(shù)組printf("nn");printf("請(qǐng)按 Enter 鍵繼續(xù)程序 ");fflush(stdin);getchar();proc11(A,m,n,o);/三維數(shù)組求靠邊元素之和printf("nn");printf("請(qǐng)按 Enter 鍵繼續(xù)程序 n");getchar();proc12(A,m,n,o);/三

11、維數(shù)組求從 A000開始不相鄰的元素之和printf("nn");printf("請(qǐng)按 Enter 鍵繼續(xù)程序 n");getchar();proc13(A,m,n,o);/三維數(shù)組求對(duì)角線之和printf("nn");printf("請(qǐng)按 Enter 鍵繼續(xù)程序 n");getchar();proc14(A,m,n,o);/釋放內(nèi)存空間93.3. 初始化三維數(shù)組函數(shù)設(shè)計(jì)本程序采用動(dòng)態(tài)生成三維數(shù)組的方式初始化三維數(shù)組并打印數(shù)組,輸出數(shù)組 Aijk。程序源代碼如下:int *proc10(int m,int n,in

12、t o)/生成初始化三維數(shù)組int i,j,k,t=1;int *A;A=(int *)malloc(m*sizeof(int *);/動(dòng)態(tài)生成三維數(shù)組、初始化數(shù)組并打印數(shù)組printf("三維數(shù)組顯示 :" );for(i=0;i<m;i+)printf("n");Ai=(int *)malloc(n*sizeof(int*);for(j=0;j<n;j+)printf("nt ");Aij=(int *)malloc(o*sizeof(int);for(k=0;k<o;k+,t+)Aijk= t;printf(&

13、quot; %4d",Aijk);printf("n");return A;103.4. 求靠邊元素和函數(shù)設(shè)計(jì)該函數(shù)要弄懂三維數(shù)組才能進(jìn)一步求出靠邊元素。由于時(shí)間有限,此程序沒有考慮特殊情況(數(shù)組只有一列),所以程序比較簡(jiǎn)單。程序源代碼如下:void proc11(int *A,int m,int n,int o) /三維數(shù)組求靠邊元素之和int i,j,k,sum=0;printf("n1.三維數(shù)組求靠邊元素之和:n");for(i=0;i<m;i+)printf("n");for(j=0;j<n;j+)pri

14、ntf("nt ");for(k=0;k<o;k+)if (i%(m-1)=0)if(j%(n-1)=0|k%(o-1)=0)printf("%4d",Aijk);sum+=Aijk;elseprintf("");/求兩端靠邊元素elseif(j%(n-1)=0&&k%(o-1)=0)printf("%4d",Aijk);sum+=Aijk;elseprintf("");/求中間靠邊元素printf("n元素之和:%4dn", sum);113.5. 求

15、互不相鄰元素和函數(shù)設(shè)計(jì)三維數(shù)組要求互不相鄰元素要考慮什么時(shí)候數(shù)組才會(huì)互不相鄰。三維數(shù)組的互不相鄰為上下左右均不相鄰,所以循環(huán)的時(shí)候要i=i+2 ,j=j+2 ,k=k+2,才會(huì)避開上下左右的元素。程序源代碼如下:void proc12(int *A,int m,int n,int o) /三維數(shù)組求從 A000開始互不相鄰的元素之和int sum=0,i=0,j,k,t=0;printf("2.三維數(shù)組求從 A000開始互不相鄰的元素之和:n");printf("相隔元素: ");while(i<m)j=0;while(j<n)k=0;whi

16、le(k<o)t+;printf(" %4d",Aijk);sum=sum+Aijk;k=k+2;/跳過(guò)一次if (t%10=0) printf("/n/t ");j=j+2;/跳過(guò)一次i=i+2;/跳過(guò)一次printf("n元素之和:%4dn", sum);123.6. 求對(duì)角線元素和函數(shù)設(shè)計(jì)只有在 m、n、o 三個(gè)元素都相等,即三維數(shù)組為立方體時(shí),才會(huì)有對(duì)角線,對(duì)角線有四條(左上右下、左下右上、右上左下、右下左上),求出這四條對(duì)角線和即可,如果m、n、o 三個(gè)元素不相等時(shí),直接輸出不等。程序源代碼如下:void proc13

17、(int *A,int m,int n,int o)/三維數(shù)組求對(duì)角線元素之和int i,sum=0;printf("3.三維數(shù)組求對(duì)角線元素之和:n");if(m=n && n=o)printf("維數(shù)比較: m、 n、 o 相等 n");for(i=0;i<m;i+)printf("t ");printf(" %4d",Aiii);printf(" %4d",Aim-i-1m-i-1);printf(" %4d",Am-i-1im-i-1);prin

18、tf(" %4d",Am-i-1m-i-1i);sum+=(Aiii+Aim-i-1m-i-1 +Am-i-1im-i-1+Am-i-1m-i-1i) ;printf("n");printf("元素之和:%4dn", sum);elseprintf("維數(shù)比較: m、 n、 o 不等 n");133.7. 釋放內(nèi)存空間函數(shù)設(shè)計(jì)在進(jìn)行完上述函數(shù)操作后,要釋放內(nèi)存空間以進(jìn)行下一步操作。程序源代碼如下:void proc14(int *p,int m,int n,int o)/釋放內(nèi)存空間int i,j;for(i=0;

19、i<m;i+)for(j=0;j<n;j+)free(pij);free(pi);free(p);四、系統(tǒng)運(yùn)行與調(diào)試寫完程序要不僅要進(jìn)行編譯鏈接,還要對(duì)程序進(jìn)行調(diào)試,才能看到自己的程序是否有錯(cuò),進(jìn)一步修改或完善程序。調(diào)試結(jié)果如下:圖 4-1 演示程序菜單界面14圖 4-2 創(chuàng)建三維數(shù)組界面圖 4-3-1顯示三維數(shù)組界面15圖 4-3-2顯示三維數(shù)組界面圖 4-4 求靠邊元素和界面16圖 4-5 求互不相鄰元素和界面圖 4-6 m 、n、o 不等時(shí)對(duì)角線和界面圖 4-7 m 、n、o 相等時(shí)對(duì)角線和界面圖 4-8 退出演示界面17五、總結(jié)與心得體會(huì)程序中遇到的問(wèn)題:在編寫程序的過(guò)程中

20、遇到了幾個(gè)問(wèn)題,比如指針調(diào)用問(wèn)題。在解決此類問(wèn)題時(shí),要明確指針要什么時(shí)候調(diào)用,要調(diào)用哪個(gè)函數(shù)才能更好的寫出程序來(lái)。在寫靠邊元素和的函數(shù)時(shí),要明白數(shù)組是怎樣排列的,哪些元素才是靠邊元素;在寫互不相鄰元素和函數(shù)時(shí),要考慮上下左右均不相鄰;在求對(duì)角線元素和函數(shù)時(shí),首先要看 m、n、o 是否相等,若不等時(shí)直接輸出不等,若相等時(shí)輸出各個(gè)對(duì)角線及對(duì)角線和。充分理解了以上問(wèn)題才能更好的編寫程序。在本程序中,我所遇到的問(wèn)題就是這些??偨Y(jié):在進(jìn)行課程設(shè)計(jì)的過(guò)程中,我深刻的理解了數(shù)組,明白了數(shù)組是如何應(yīng)用的,在以前二維數(shù)組的基礎(chǔ)上又進(jìn)一步學(xué)習(xí)了三維數(shù)組,理解了三維數(shù)組的基本原理,并可以編寫簡(jiǎn)單的程序。此次實(shí)驗(yàn),在

21、做課程設(shè)計(jì)的同時(shí)也復(fù)習(xí)和鞏固了數(shù)組,理解了許多以前不是很清楚的東西。在此次課程設(shè)計(jì)中,有很多知識(shí)是教材上沒有提到的,所以要去網(wǎng)上查閱資料,學(xué)習(xí)一些知識(shí)和方法來(lái)提高自己的編程能力。在自己編寫程序的過(guò)程中,要先明確問(wèn)題,對(duì)問(wèn)題進(jìn)行分析,先有一個(gè)大體的思路再具體地寫程序。此次程序過(guò)程中還有一些不足,我會(huì)在以后好好改正,好好的完成程序。六、參考文獻(xiàn)嚴(yán)蔚敏,吳偉民數(shù)據(jù)結(jié)構(gòu) (C 語(yǔ)言版) M 北京: 清華大學(xué)出版社, 2007嚴(yán)蔚敏,吳偉民,米寧數(shù)據(jù)結(jié)構(gòu)題集(C語(yǔ)言版) M 北京:清華大學(xué)出版社, 2014譚浩強(qiáng) C語(yǔ)言程序設(shè)計(jì) M 北京:清華大學(xué)出版社,2009陳維興,林小茶 C+面向?qū)ο蟪绦蛟O(shè)計(jì)教程

22、M 北京:清華大學(xué)出版社,2009七、附錄程序源代碼:18#include <stdio.h>#include <stdlib.h>#include <malloc.h>/ 自定義函數(shù)void menu(void);/程序主菜單void sanwei(void);/對(duì)三維數(shù)組操作主函數(shù)int *proc10(int m,int n,int o); /動(dòng)態(tài)創(chuàng)建三維數(shù)組、初始化并打印void proc11(int *A,int m,int n,int o);/求靠邊元素void proc12(int *A,int m,int n,int o);/求從 A000開

23、始互不相鄰元素之和void proc13(int *A,int m,int n,int o);/求對(duì)角線元素之和void proc14(int *p,int m,int n,int o);/釋放內(nèi)存空間int main()while(1)menu();return 0;void menu(void)int item;/ 程序主菜單doprintf("n數(shù)組應(yīng)用演示程序nn");printf("tt1.演 示 三 維 數(shù) 組。 n");19printf("tt0.退 出 演 示 程 序。 nn");printf("請(qǐng)輸入要進(jìn)行

24、的操作 : " );scanf("%d",&item);while(item>3 | item<0);switch(item)case 1: sanwei();break;case 0: printf("n演示結(jié)束,謝謝觀看 ! n");getchar(); /保持界面getchar();exit(1);/結(jié)束程序void sanwei(void)/三維數(shù)組int m,n,o,i,j;int *A;/ 接收數(shù)組 A 參數(shù)printf("n請(qǐng)輸入三維數(shù)組各個(gè)維數(shù)m,n,o 說(shuō)明 :m>1,n>1,o>

25、;1. 中間以空格隔開 n如輸入 :5 4 3:");scanf("%d%d%d",&m,&n,&o);printf("n");A=proc10(m,n,o);/動(dòng)態(tài)建立三維數(shù)組printf("nn");printf("請(qǐng)按 Enter 鍵繼續(xù)程序 ");fflush(stdin);getchar();proc11(A,m,n,o);/三維數(shù)組求靠邊元素之和printf("nn");20printf("請(qǐng)按 Enter 鍵繼續(xù)程序 n");g

26、etchar();proc12(A,m,n,o);/三維數(shù)組求從 A000開始不相鄰的元素之和printf("nn");printf("請(qǐng)按 Enter 鍵繼續(xù)程序 n");getchar();proc13(A,m,n,o);/三維數(shù)組求對(duì)角線之和printf("nn");printf("請(qǐng)按 Enter 鍵繼續(xù)程序 n");getchar();proc14(A,m,n,o);/釋放內(nèi)存空間int *proc10(int m,int n,int o)/生成初始化三維數(shù)組int i,j,k,t=1;int *A;A=

27、(int *)malloc(m*sizeof(int *);/動(dòng)態(tài)生成三維數(shù)組、初始化數(shù)組并打印數(shù)組printf("三維數(shù)組顯示 :" );for(i=0;i<m;i+)printf("n");Ai=(int *)malloc(n*sizeof(int*);for(j=0;j<n;j+)printf("nt ");Aij=(int *)malloc(o*sizeof(int);for(k=0;k<o;k+,t+)21Aijk= t;printf(" %4d",Aijk);printf("

28、n");return A;void proc11(int *A,int m,int n,int o)/三維數(shù)組求靠邊元素之和int i,j,k,sum=0;printf("n1.三維數(shù)組求靠邊元素之和:n");for(i=0;i<m;i+)printf("n");for(j=0;j<n;j+)printf("nt ");for(k=0;k<o;k+)if (i%(m-1)=0)if(j%(n-1)=0 | k%(o-1)=0)printf(" %4d",Aijk);sum+=Aijk;22elseprintf("");/求兩端靠邊元素elseif(j%(n-1)=0 && k%(o-1)=0)printf(" %4d",Aijk);sum+=Aijk;elseprintf("");/求中間靠邊元素printf("n元素之和:%4dn", sum);void proc12(int

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論