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

下載本文檔

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

文檔簡介

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

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

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

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

5、主要功能就是通過調(diào)用相應(yīng)功能的函數(shù)來實現(xiàn)的。該程序的8 個函數(shù)有:1)int main()/主函數(shù)2)void menu(void);/程序主菜單3)void sanwei(void);/對三維數(shù)組操作主函數(shù)4)int *proc10(int m,int n,int o); /動態(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、/求對角線元素之和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輸入提示信息兩個 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求對角線元素和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é)束三、詳細設(shè)計3.1. 菜單設(shè)計菜單能夠體現(xiàn)出一個程序的完整性和條理性。菜單設(shè)計中先輸出可以供選擇的

8、演示程序的選項,然后通過switch 語句進入選擇界面或結(jié)束操作。下面是菜單設(shè)計的詳細代碼:7void menu(void)int item;/ 程序主菜單doprintf("n數(shù)組應(yīng)用演示程序nn");printf("tt1.演 示 三 維 數(shù) 組。 n");printf("tt0.退 出 演 示 程 序。 nn");printf("請輸入要進行的操作 : " );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. 對三維數(shù)組操作的函數(shù)設(shè)計三維數(shù)組采用三級指針的形式定義,分別調(diào)用相應(yīng)的函數(shù)進行對應(yīng)的操作,以完成三級數(shù)組的要求。程序源代碼如下:8void sanwei(void)int m,n,o,i,j;int *A;/ 接收數(shù)組 A 參數(shù)printf("n請輸入三維數(shù)組各個維數(shù)m,n,o 說明 :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);/動態(tài)建立三維數(shù)組printf("nn");printf("請按 Enter 鍵繼續(xù)程序 ");fflush(stdin);getchar();proc11(A,m,n,o);/三維數(shù)組求靠邊元素之和printf("nn");printf("請按 Enter 鍵繼續(xù)程序 n");getchar();proc12(A,m,n,o);/三

11、維數(shù)組求從 A000開始不相鄰的元素之和printf("nn");printf("請按 Enter 鍵繼續(xù)程序 n");getchar();proc13(A,m,n,o);/三維數(shù)組求對角線之和printf("nn");printf("請按 Enter 鍵繼續(xù)程序 n");getchar();proc14(A,m,n,o);/釋放內(nèi)存空間93.3. 初始化三維數(shù)組函數(shù)設(shè)計本程序采用動態(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 *);/動態(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è)計該函數(shù)要弄懂三維數(shù)組才能進一步求出靠邊元素。由于時間有限,此程序沒有考慮特殊情況(數(shù)組只有一列),所以程序比較簡單。程序源代碼如下: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è)計三維數(shù)組要求互不相鄰元素要考慮什么時候數(shù)組才會互不相鄰。三維數(shù)組的互不相鄰為上下左右均不相鄰,所以循環(huán)的時候要i=i+2 ,j=j+2 ,k=k+2,才會避開上下左右的元素。程序源代碼如下: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;/跳過一次if (t%10=0) printf("/n/t ");j=j+2;/跳過一次i=i+2;/跳過一次printf("n元素之和:%4dn", sum);123.6. 求對角線元素和函數(shù)設(shè)計只有在 m、n、o 三個元素都相等,即三維數(shù)組為立方體時,才會有對角線,對角線有四條(左上右下、左下右上、右上左下、右下左上),求出這四條對角線和即可,如果m、n、o 三個元素不相等時,直接輸出不等。程序源代碼如下:void proc13

17、(int *A,int m,int n,int o)/三維數(shù)組求對角線元素之和int i,sum=0;printf("3.三維數(shù)組求對角線元素之和: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è)計在進行完上述函數(shù)操作后,要釋放內(nèi)存空間以進行下一步操作。程序源代碼如下: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)運行與調(diào)試寫完程序要不僅要進行編譯鏈接,還要對程序進行調(diào)試,才能看到自己的程序是否有錯,進一步修改或完善程序。調(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 不等時對角線和界面圖 4-7 m 、n、o 相等時對角線和界面圖 4-8 退出演示界面17五、總結(jié)與心得體會程序中遇到的問題:在編寫程序的過程中

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

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

22、M 北京:清華大學(xué)出版社,2009七、附錄程序源代碼:18#include <stdio.h>#include <stdlib.h>#include <malloc.h>/ 自定義函數(shù)void menu(void);/程序主菜單void sanwei(void);/對三維數(shù)組操作主函數(shù)int *proc10(int m,int n,int o); /動態(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);/求對角線元素之和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("請輸入要進行

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請輸入三維數(shù)組各個維數(shù)m,n,o 說明 :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);/動態(tài)建立三維數(shù)組printf("nn");printf("請按 Enter 鍵繼續(xù)程序 ");fflush(stdin);getchar();proc11(A,m,n,o);/三維數(shù)組求靠邊元素之和printf("nn");20printf("請按 Enter 鍵繼續(xù)程序 n");g

26、etchar();proc12(A,m,n,o);/三維數(shù)組求從 A000開始不相鄰的元素之和printf("nn");printf("請按 Enter 鍵繼續(xù)程序 n");getchar();proc13(A,m,n,o);/三維數(shù)組求對角線之和printf("nn");printf("請按 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 *);/動態(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論