




已閱讀5頁,還剩14頁未讀, 繼續免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
中國礦業大學徐海學院軟件開發基礎實踐報告姓 名: 學 號: 專 業: 計算機科學與技術 指導教師: 職 稱: 2012 年 6 月 30 徐州姓名/學號:班級:一、程序來源:網絡二、程序項目名稱:矩陣運算3、 程序原理:此程序為矩陣運算的相關程序,用來計算包括兩矩陣的加、減、乘運算,求矩陣的轉置矩陣、最大值元素、最小值元素及對角線元素之和等運算。此程序涉及了老師講授的多個知識點,包括:for、if、printf及scanf 等語句,順序、選擇、循環等結構。四、程序功能:利用for、if、printf及scanf 等語句來實現所需功能。輸入矩陣a和b的元素之后,依次計算:程序一:計算a+b矩陣;程序二:計算a-b矩陣;程序三:計算a*b矩陣;程序四:計算a的轉置矩陣;程序五:計算a矩陣的最小值元素;程序六:計算a矩陣的最大值元素;程序七:計算a矩陣的主對角線元素之和;程序八:計算a矩陣的副對角線元素之和;程序九:計算a矩陣的上三角元素之和;程序九:計算a矩陣的下三角元素之和;五、程序內容(輸入輸出): 運行結果如圖所示:6、 數據流分析(定義的變量,類型,數組,類型,結構體):七、程序代碼分析(每個函數和代碼模塊的功能作用分析):#includestdio.hvoid main() int a33,b33,c33, int i,j,k,s,max,min,sum1=0,sum2=0,sum3=0,sum4=0; printf(矩陣運算n); printf(n); printf(請輸入a矩陣元素:n); for(i=0;i3;i+) /*通過二重循環給a矩陣的元素賦值*/ for(j=0;j3;j+) scanf(%4d,&aij); printf(a矩陣:n); for(i=0;i3;i+) for(j=0;j3;j+) printf(%6d,aij); printf(n); printf(n); printf(請輸入b矩陣元素:n); for(i=0;i3;i+) /*通過二重循環給b矩陣的元素賦值*/ for(j=0;j3;j+)scanf(%4d,&bij); printf(b矩陣:n); for(i=0;i3;i+) for(j=0;j3;j+) printf(%6d,bij); printf(n); printf(n); printf(程序一:計算a+b矩陣n); /*計算a+b矩陣并輸出*/ for(i=0;i3;i+) for(j=0;j3;j+) cij=aij+bij; printf(%6d,cij); printf(n); printf(n); printf(程序二:計算a-b矩陣n); /*計算a-b矩陣并輸出*/ for(i=0;i3;i+) for(j=0;j3;j+) cij=aij-bij; printf(%6d,cij); printf(n); printf(n); printf(程序三:計算a*b矩陣n); /*計算a*b矩陣(c矩陣)并輸出*/ for(i=0;i3;i+) /*最外層循環控制c矩陣的行數*/ for(j=0;j3;j+) /*次外層循環控制c矩陣的列數*/ for(k=s=0;k3;k+) /*計算c矩陣的每個元素的值*/ s+=aik*bkj; cij=s; for(i=0;i3;i+) for(j=0;j3;j+) printf(%6d,cij); printf(n); printf(n); printf(程序四:計算a的轉置矩陣n); /*計算a的轉置矩陣并輸出*/ for(i=0;i3;i+) for(j=0;j3;j+) cji=aij; for(i=0;i3;i+) for(j=0;j3;j+) printf(%6d,cij); printf(n); printf(n); printf(程序五:計算a矩陣的最小值元素n); /*計算a矩陣的最小值元素min并輸出*/ min=a00; for(i=0;i3;i+) for(j=0;j3;j+) if(aijmin) min=aij; printf(min=%dn,min); printf(n); printf(程序六:計算a矩陣的最大值元素n); /*計算a矩陣的最大值元素max并輸出*/ max=a00; for(i=0;i3;i+) for(j=0;jmax) max=aij; printf(max=%dn,max); printf(n); printf(程序七:計算a矩陣的主對角線元素之和n); /*計算a矩陣的主對角線元素之和sum1并輸出*/ for(i=0;i3;i+) for(j=0;j3;j+) if(i=j) sum1+=aij; printf(sum1=%dn,sum1); printf(n); printf(程序八:計算a矩陣的副對角線元素之和n); /*計算a矩陣的副對角線元素之和sum2并輸出*/ for(i=0;i3;i+) for(j=0;j3;j+) if(i+j=2) sum2+=aij; printf(sum2=%dn,sum2); printf(n); printf(程序九:計算a矩陣的上三角元素之和n); /*計算a矩陣的上三角元素之和sum3并輸出*/ for(i=0;i3;i+) for(j=0;j3;j+) if(ij|i=j) sum3+=aij; printf(sum3=%dn,sum3); printf(n); printf(程序十:計算a矩陣的下三角元素之和n); /*計算a矩陣的下三角元素之和sum4并輸出*/ for(i=0;i3;i+) for(j=0;jj|i=j) sum4+=aij; printf(sum4=%dn,sum4); printf(n); printf(運算完畢!n); /*運算完畢*/ printf(n);八、控制流分析(源程序整體流程圖): printf(計算a+b矩陣:n); for(i=0;i3;i+) for(j=0;j3;j+) cij=aij+bij; printf(%6d); printf(n);九、源代碼優點,好處:本程序是通過二叉樹的鏈表方式存儲數據,計算二叉樹每個結點的頻數,利用二叉樹的層次遍歷,輸出二叉樹的每個結點的頻數,對于較大規模的作業都能很快地得到運行結果。而且整個程序是基于鏈表和二叉樹這種數據結構來實現的,編程風格一致,容易理解。十、總結及心得體會: 通過此次課程設計,使我更加扎實的掌握了有關用層次遍歷訪問二叉樹序列頻數的問題。我知道,其實有很多比如像素、圖像等等都用到層次遍歷來計算它們的頻數,由此也為自己第一次踏入這門知識的領域而感到驕傲。雖然在本次課程設計中,我曾遇到過種種問題。抱著對新領域的探索與求知,我一遍一遍的檢查,終于找到了問題的所在,也暴露出了前期我在這方面上的知識欠缺與經驗不足。實踐出真知,通過自己親自動手制作,使我掌握的知識不再是紙上談兵。作為一名計算機專業的學生,從最開始學習的高等代數一直到已經即將結束的離散數學。我從終于將所學習的數學知識,在計算機上得到了應用,我覺得有必要對這門課程設計中自己的所感進行一次總結,希望對初學者有一定的幫助與啟迪。為什么用面向對象的思想來設計數據結構用面向過程的程序設計方法,來進行數據結構的設計,學習時比較容易理解與掌握。但它的數據一般是事先具體給定的,是為其功能函數服務的,函數起著主導作用。以函數為中心,對于函數的運用并不方便。以排序問題為例,用于排序的函數不少,但對于一個實際問題,究竟應該選擇哪一種排序函數,還必須根據實際問題的數據結構來定。對于鏈表,你總不能選擇冒泡函數來進行排序吧。既然以函數為中心對于解決實際問題并不方便,那么,就只能選擇以數據為中心,將為數據服務的函數與它綁定在一起,使這些服務于數據的函數成為數據的一部分。這就是面向對象程序設計中類的概念。首先要感謝我的老師給我們提供了這次課程設計的機會,讓我將平時所學習的知識更加的系統化。老師給予的指導,提供的支持與幫助,是我能夠完成本次課程設計的最主要的原因。我還要感謝給予我幫助的網絡論壇上的朋友們,你們提供的寶貴意見,使我的程序能夠進一步的優化。最后還要感謝在參考文獻中列出的各位編者,你們所寫的書在我課程設計完成的道路上給過我無數的指導。這份課程設計,是我對新領域的一次探索,我已經上路了。十一、對源程序過程及方法、手段的改進建議: 基本算法:按照題目要求,是按前進前出來遍歷二叉樹的,所以必然要用到隊列來存儲其結點,此題是按層次遍歷二叉樹,若按先序、中序、后序來遍歷二叉樹,采用堆棧即可簡單實現,在此不在論述。 思路:先訪問其根結點,將根結點指針送入隊列,然后取出根結點指針,若根結點有左子樹,則將其左子樹入隊列;若有右子樹,將右子樹入隊列,遍歷訪問樹即可。#include#include#define maxsize 10typedef struct binode char data; struct binode *lchild,*rchild;binode,*bitree; /定義樹結點結構typedef struct queuenode bitree chmaxsize; int front; int rear;queuenode; /定義隊列結點結構/建樹int createbitree(bitree &T,int &sum) char ch; scanf(%c,&ch); if(ch= ) T=NULL; else if(!(T=(bitree)malloc(sizeof(binode) return 0; T-data=ch; sum+; createbitree(T-lchild,sum); createbitree(T-rchild,sum); return 1;/初始化一個帶頭結點的隊列void initqueue(queuenode &q) /q.ch=(bitree*)malloc(maxsize*sizeof(binode); q.front=q.rear=0;/入隊列int enqueue(queuenode &q,bitree p) if(q.rear+1)%maxsize=q.front) printf(隊列滿!n); return 0; q.chq.rear=p; q.rear=(q.rear+1)%maxsize; return 1;/出隊列void dequeue(queuenode &q,bitree &p) p=q.chq.front; q.front=(q.front+1)%maxsize; char data; data=p-data; printf(%c ,data);/判斷隊列是否為空int queueempty(queuenode q) if(q.front=q.rear) return 1; return 0;/按層次遍歷樹中結點void traverse(bitree bt) queuenode q; bitree p; initqueue(q); p=bt; enqueue(q,p); while(queueempty(q)!=1) dequeue(q,p); if(p
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學校水井房管理制度
- 學校縫紉室管理制度
- 學校防暴雨管理制度
- 學生托管班管理制度
- 學院樓門衛管理制度
- 安康碼項目管理制度
- 安監房衛生管理制度
- 官渡區臺賬管理制度
- 實施部日志管理制度
- 寵物寄存室管理制度
- 五年級英語質量調研卷答題卡
- 二年級下冊語文試題 河南省商丘市永城市 第二學期二年級語文期末試題(圖片版無答案)部編版
- 新蘇教版牛津英語 英語四年級下冊期末試卷
- 生產異常停線管理規范標準
- DB32∕T 4064-2021 江蘇省城鎮燃氣安全檢查標準
- 四川省瀘州市瀘縣2021-2022學年八年級下學期期末數學試題(word版只含選擇填空題答案)
- 國際匯款查詢查復業務培訓3
- 高中信息技術會考試題(必修部分)附答案
- 設備保全點檢表(TPM推行必看)
- 市質監站工程竣工驗收工作流程圖
- 新世紀大學英語綜合教程4 Unit1
評論
0/150
提交評論