



版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、數據結構 課程設計報告課題:數組的應用2姓名:譚孟杰學號:201417030223同組姓名:洪曉佩專業班級:網工 14102 班指導教師:周學清設計時間:評閱意見:評定成績:指導老師簽名:年月日1目 錄一、前言與系統需求分析41.1. 前言41.2. 系統需求分析4二、總體設計42.1. 主要函數42.2. 主要流程圖5求靠邊元素和5求互不相鄰元素和6求對角線元素和7三、詳細設計73.1. 菜單設計73.2. 對三維數組操作的函數設計83.3. 初始化三維數組函數設計103.4. 求靠邊元素和函數設計113.5. 求互不相鄰元素和函數設計123.6. 求對角線元素和函數設計133.7. 釋放內
2、存空間函數設計14四、系統運行與調試14五、總結與心得體會18六、參考文獻18七、附錄182摘 要數組是在程序設計中,為了處理方便,把具有相同類型的若干變量按有序的形式組織起來的一種形式。在程序設計中數組的應用是非常廣泛的,并且數組并不局限于一維數組和二維數組,它還可以拓展到三維或多維,當然原理還是和一維數組、二維數組是一樣的,只是結構更加的復雜而已。數組還能和指針,函數等數據結構進行綜和應用。本程序主要應用的是三維數組與指針的操作,程序實現對數組的動態分配地址,從終端鍵盤賦值。對于矩陣的三維數組,能夠實現對其查看源數組,數組靠邊元素和,互不相鄰元素和,對角線元素和的輸出。每個功能通過一個函數
3、來實現,如菜單函數,求靠邊元素和函數等。本程序采用 C 語言編寫。關鍵詞: 數據結構,數組的應用,三維數組,課程設計3一、前言與系統需求分析1.1 前言數組的應用在程序設計語言當中是分廠重要的,在很多方面都會用到它,因其能夠存儲相同類型的元素而廣泛應用。本課程設計的開發也正是因為其在程序設計中的重要性而開發的,程序要求能夠實現使用戶確定該數組的行數和列數, 即從終端輸入數組的行數和列數,然后由系統自動分配一組連續的地址空間,接下來就是由用戶輸入數組的元素了,由此一系列的操作來實現設計的人性化。在設計中主要應用的是三維數組,有的地方還結合了數組與指針的應用,設計中主要是由函數構成的,通過包含主函
4、數在內的 8 個函數組成,每個函數難點之處有相應的注釋。設計的目標是實現對輸入數組的查看源數組,靠邊元素之和,互不相鄰元素和,對角線元素之和。在輸出靠邊元素之和,互不相鄰元素和時,為了能夠更加清楚知道是哪些元素相加的結果,在設計時,通過數的位置的形式把所相加的元素輸出在了界面上。總體來說,本設計完成了對三維數組操作的縝密性。1.2 系統需求分析源程序是采用 C 語言的形式編寫的有關數組的應用的程序。主要寫了幾個函數,完成了簡單的求靠邊元素和、互不相鄰元素和、對角線元素和的程序。該程序對軟硬件的要求比較低。二、總體設計2.1. 主要函數函數是程序中的主要部分,且程序本身就是由函數構成的。本程序的
5、主要功能就是通過調用相應功能的函數來實現的。該程序的8 個函數有:1)int main()/主函數2)void menu(void);/程序主菜單3)void sanwei(void);/對三維數組操作主函數4)int *proc10(int m,int n,int o); /動態創建三維數組、初始化并打印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);/釋放內存空間2.2. 主要流程圖求靠邊元素和 void proc11(int*A,intm,intn,into)開始定義變量 i,j ,k,sum輸入提示信息兩個 for 循環控制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結束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結束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結束三、詳細設計3.1. 菜單設計菜單能夠體現出一個程序的完整性和條理性。菜單設計中先輸出可以供選擇的
8、演示程序的選項,然后通過switch 語句進入選擇界面或結束操作。下面是菜單設計的詳細代碼:7void menu(void)int item;/ 程序主菜單doprintf("n數組應用演示程序nn");printf("tt1.演 示 三 維 數 組。 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演示結束,謝謝觀看 ! n");getchar(); /保持界面getchar();exit(1);/結束程序3.2. 對三維數組操作的函數設計三維數組采用三級指針的形式定義,分別調用相應的函數進行對應的操作,以完成三級數組的要求。程序源代碼如下:8void sanwei(void)int m,n,o,i,j;int *A;/ 接收數組 A 參數printf("n請輸入三維數組各個維數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);/動態建立三維數組printf("nn");printf("請按 Enter 鍵繼續程序 ");fflush(stdin);getchar();proc11(A,m,n,o);/三維數組求靠邊元素之和printf("nn");printf("請按 Enter 鍵繼續程序 n");getchar();proc12(A,m,n,o);/三
11、維數組求從 A000開始不相鄰的元素之和printf("nn");printf("請按 Enter 鍵繼續程序 n");getchar();proc13(A,m,n,o);/三維數組求對角線之和printf("nn");printf("請按 Enter 鍵繼續程序 n");getchar();proc14(A,m,n,o);/釋放內存空間93.3. 初始化三維數組函數設計本程序采用動態生成三維數組的方式初始化三維數組并打印數組,輸出數組 Aijk。程序源代碼如下:int *proc10(int m,int n,in
12、t o)/生成初始化三維數組int i,j,k,t=1;int *A;A=(int *)malloc(m*sizeof(int *);/動態生成三維數組、初始化數組并打印數組printf("三維數組顯示 :" );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. 求靠邊元素和函數設計該函數要弄懂三維數組才能進一步求出靠邊元素。由于時間有限,此程序沒有考慮特殊情況(數組只有一列),所以程序比較簡單。程序源代碼如下:void proc11(int *A,int m,int n,int o) /三維數組求靠邊元素之和int i,j,k,sum=0;printf("n1.三維數組求靠邊元素之和: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、互不相鄰元素和函數設計三維數組要求互不相鄰元素要考慮什么時候數組才會互不相鄰。三維數組的互不相鄰為上下左右均不相鄰,所以循環的時候要i=i+2 ,j=j+2 ,k=k+2,才會避開上下左右的元素。程序源代碼如下:void proc12(int *A,int m,int n,int o) /三維數組求從 A000開始互不相鄰的元素之和int sum=0,i=0,j,k,t=0;printf("2.三維數組求從 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. 求對角線元素和函數設計只有在 m、n、o 三個元素都相等,即三維數組為立方體時,才會有對角線,對角線有四條(左上右下、左下右上、右上左下、右下左上),求出這四條對角線和即可,如果m、n、o 三個元素不相等時,直接輸出不等。程序源代碼如下:void proc13
17、(int *A,int m,int n,int o)/三維數組求對角線元素之和int i,sum=0;printf("3.三維數組求對角線元素之和:n");if(m=n && n=o)printf("維數比較: 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("維數比較: m、 n、 o 不等 n");133.7. 釋放內存空間函數設計在進行完上述函數操作后,要釋放內存空間以進行下一步操作。程序源代碼如下:void proc14(int *p,int m,int n,int o)/釋放內存空間int i,j;for(i=0;
19、i<m;i+)for(j=0;j<n;j+)free(pij);free(pi);free(p);四、系統運行與調試寫完程序要不僅要進行編譯鏈接,還要對程序進行調試,才能看到自己的程序是否有錯,進一步修改或完善程序。調試結果如下:圖 4-1 演示程序菜單界面14圖 4-2 創建三維數組界面圖 4-3-1顯示三維數組界面15圖 4-3-2顯示三維數組界面圖 4-4 求靠邊元素和界面16圖 4-5 求互不相鄰元素和界面圖 4-6 m 、n、o 不等時對角線和界面圖 4-7 m 、n、o 相等時對角線和界面圖 4-8 退出演示界面17五、總結與心得體會程序中遇到的問題:在編寫程序的過程中
20、遇到了幾個問題,比如指針調用問題。在解決此類問題時,要明確指針要什么時候調用,要調用哪個函數才能更好的寫出程序來。在寫靠邊元素和的函數時,要明白數組是怎樣排列的,哪些元素才是靠邊元素;在寫互不相鄰元素和函數時,要考慮上下左右均不相鄰;在求對角線元素和函數時,首先要看 m、n、o 是否相等,若不等時直接輸出不等,若相等時輸出各個對角線及對角線和。充分理解了以上問題才能更好的編寫程序。在本程序中,我所遇到的問題就是這些。總結:在進行課程設計的過程中,我深刻的理解了數組,明白了數組是如何應用的,在以前二維數組的基礎上又進一步學習了三維數組,理解了三維數組的基本原理,并可以編寫簡單的程序。此次實驗,在
21、做課程設計的同時也復習和鞏固了數組,理解了許多以前不是很清楚的東西。在此次課程設計中,有很多知識是教材上沒有提到的,所以要去網上查閱資料,學習一些知識和方法來提高自己的編程能力。在自己編寫程序的過程中,要先明確問題,對問題進行分析,先有一個大體的思路再具體地寫程序。此次程序過程中還有一些不足,我會在以后好好改正,好好的完成程序。六、參考文獻嚴蔚敏,吳偉民數據結構 (C 語言版) M 北京: 清華大學出版社, 2007嚴蔚敏,吳偉民,米寧數據結構題集(C語言版) M 北京:清華大學出版社, 2014譚浩強 C語言程序設計 M 北京:清華大學出版社,2009陳維興,林小茶 C+面向對象程序設計教程
22、M 北京:清華大學出版社,2009七、附錄程序源代碼:18#include <stdio.h>#include <stdlib.h>#include <malloc.h>/ 自定義函數void menu(void);/程序主菜單void sanwei(void);/對三維數組操作主函數int *proc10(int m,int n,int o); /動態創建三維數組、初始化并打印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);/釋放內存空間int main()while(1)menu();return 0;void menu(void)int item;/ 程序主菜單doprintf("n數組應用演示程序nn");printf("tt1.演 示 三 維 數 組。 n");19printf("tt0.退 出 演 示 程 序。 nn");printf("請輸入要進行
24、的操作 : " );scanf("%d",&item);while(item>3 | item<0);switch(item)case 1: sanwei();break;case 0: printf("n演示結束,謝謝觀看 ! n");getchar(); /保持界面getchar();exit(1);/結束程序void sanwei(void)/三維數組int m,n,o,i,j;int *A;/ 接收數組 A 參數printf("n請輸入三維數組各個維數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);/動態建立三維數組printf("nn");printf("請按 Enter 鍵繼續程序 ");fflush(stdin);getchar();proc11(A,m,n,o);/三維數組求靠邊元素之和printf("nn");20printf("請按 Enter 鍵繼續程序 n");g
26、etchar();proc12(A,m,n,o);/三維數組求從 A000開始不相鄰的元素之和printf("nn");printf("請按 Enter 鍵繼續程序 n");getchar();proc13(A,m,n,o);/三維數組求對角線之和printf("nn");printf("請按 Enter 鍵繼續程序 n");getchar();proc14(A,m,n,o);/釋放內存空間int *proc10(int m,int n,int o)/生成初始化三維數組int i,j,k,t=1;int *A;A=
27、(int *)malloc(m*sizeof(int *);/動態生成三維數組、初始化數組并打印數組printf("三維數組顯示 :" );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)/三維數組求靠邊元素之和int i,j,k,sum=0;printf("n1.三維數組求靠邊元素之和: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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 物業殺蟲防蟲方案(3篇)
- 美術機構提價方案(3篇)
- 豬肉產品投標方案(3篇)
- 工程材料代用管理制度
- 公交廣告企劃方案(3篇)
- 園區搬遷預算方案(3篇)
- 工廠生產外包方案(3篇)
- 公司采購領用管理制度
- 培訓學校自主管理制度
- 包裝印刷公司管理制度
- 16J607-建筑節能門窗
- 適合中學或小學開展的媒介素養教育課程大綱或活動方案
- 公司員工借款合同
- SMT電子物料損耗率標準 貼片物料損耗標準
- EXCEL版衡重式擋土墻計算
- 高考數學答題卡
- 內蒙古自治區興和縣四道溝鐵礦2023年度礦山地質環境保護與土地復墾治理計劃書
- 記賬憑證的填制方法和要求教案
- 環境規劃與制圖技術知到章節答案智慧樹2023年溫州大學
- 光伏電站組件清洗方案說明
- 2014年全國高考英語試題及答案大綱卷
評論
0/150
提交評論