礦大徐海軟件開發(fā)基礎(chǔ)實(shí)踐報(bào)告_第1頁(yè)
礦大徐海軟件開發(fā)基礎(chǔ)實(shí)踐報(bào)告_第2頁(yè)
礦大徐海軟件開發(fā)基礎(chǔ)實(shí)踐報(bào)告_第3頁(yè)
礦大徐海軟件開發(fā)基礎(chǔ)實(shí)踐報(bào)告_第4頁(yè)
礦大徐海軟件開發(fā)基礎(chǔ)實(shí)踐報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

中國(guó)礦業(yè)大學(xué)徐海學(xué)院軟件開發(fā)基礎(chǔ)實(shí)踐報(bào)告姓 名: 學(xué) 號(hào): 專 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù) 指導(dǎo)教師: 職 稱: 2012 年 6 月 30 徐州姓名/學(xué)號(hào):班級(jí):一、程序來(lái)源:網(wǎng)絡(luò)二、程序項(xiàng)目名稱:矩陣運(yùn)算3、 程序原理:此程序?yàn)榫仃囘\(yùn)算的相關(guān)程序,用來(lái)計(jì)算包括兩矩陣的加、減、乘運(yùn)算,求矩陣的轉(zhuǎn)置矩陣、最大值元素、最小值元素及對(duì)角線元素之和等運(yùn)算。此程序涉及了老師講授的多個(gè)知識(shí)點(diǎn),包括:for、if、printf及scanf 等語(yǔ)句,順序、選擇、循環(huán)等結(jié)構(gòu)。四、程序功能:利用for、if、printf及scanf 等語(yǔ)句來(lái)實(shí)現(xiàn)所需功能。輸入矩陣a和b的元素之后,依次計(jì)算:程序一:計(jì)算a+b矩陣;程序二:計(jì)算a-b矩陣;程序三:計(jì)算a*b矩陣;程序四:計(jì)算a的轉(zhuǎn)置矩陣;程序五:計(jì)算a矩陣的最小值元素;程序六:計(jì)算a矩陣的最大值元素;程序七:計(jì)算a矩陣的主對(duì)角線元素之和;程序八:計(jì)算a矩陣的副對(duì)角線元素之和;程序九:計(jì)算a矩陣的上三角元素之和;程序九:計(jì)算a矩陣的下三角元素之和;五、程序內(nèi)容(輸入輸出): 運(yùn)行結(jié)果如圖所示:6、 數(shù)據(jù)流分析(定義的變量,類型,數(shù)組,類型,結(jié)構(gòu)體):七、程序代碼分析(每個(gè)函數(shù)和代碼模塊的功能作用分析):#includestdio.hvoid main() int a33,b33,c33, int i,j,k,s,max,min,sum1=0,sum2=0,sum3=0,sum4=0; printf(矩陣運(yùn)算n); printf(n); printf(請(qǐng)輸入a矩陣元素:n); for(i=0;i3;i+) /*通過二重循環(huán)給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(請(qǐng)輸入b矩陣元素:n); for(i=0;i3;i+) /*通過二重循環(huán)給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(程序一:計(jì)算a+b矩陣n); /*計(jì)算a+b矩陣并輸出*/ for(i=0;i3;i+) for(j=0;j3;j+) cij=aij+bij; printf(%6d,cij); printf(n); printf(n); printf(程序二:計(jì)算a-b矩陣n); /*計(jì)算a-b矩陣并輸出*/ for(i=0;i3;i+) for(j=0;j3;j+) cij=aij-bij; printf(%6d,cij); printf(n); printf(n); printf(程序三:計(jì)算a*b矩陣n); /*計(jì)算a*b矩陣(c矩陣)并輸出*/ for(i=0;i3;i+) /*最外層循環(huán)控制c矩陣的行數(shù)*/ for(j=0;j3;j+) /*次外層循環(huán)控制c矩陣的列數(shù)*/ for(k=s=0;k3;k+) /*計(jì)算c矩陣的每個(gè)元素的值*/ s+=aik*bkj; cij=s; for(i=0;i3;i+) for(j=0;j3;j+) printf(%6d,cij); printf(n); printf(n); printf(程序四:計(jì)算a的轉(zhuǎn)置矩陣n); /*計(jì)算a的轉(zhuǎn)置矩陣并輸出*/ 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(程序五:計(jì)算a矩陣的最小值元素n); /*計(jì)算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(程序六:計(jì)算a矩陣的最大值元素n); /*計(jì)算a矩陣的最大值元素max并輸出*/ max=a00; for(i=0;i3;i+) for(j=0;jmax) max=aij; printf(max=%dn,max); printf(n); printf(程序七:計(jì)算a矩陣的主對(duì)角線元素之和n); /*計(jì)算a矩陣的主對(duì)角線元素之和sum1并輸出*/ for(i=0;i3;i+) for(j=0;j3;j+) if(i=j) sum1+=aij; printf(sum1=%dn,sum1); printf(n); printf(程序八:計(jì)算a矩陣的副對(duì)角線元素之和n); /*計(jì)算a矩陣的副對(duì)角線元素之和sum2并輸出*/ for(i=0;i3;i+) for(j=0;j3;j+) if(i+j=2) sum2+=aij; printf(sum2=%dn,sum2); printf(n); printf(程序九:計(jì)算a矩陣的上三角元素之和n); /*計(jì)算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(程序十:計(jì)算a矩陣的下三角元素之和n); /*計(jì)算a矩陣的下三角元素之和sum4并輸出*/ for(i=0;i3;i+) for(j=0;jj|i=j) sum4+=aij; printf(sum4=%dn,sum4); printf(n); printf(運(yùn)算完畢!n); /*運(yùn)算完畢*/ printf(n);八、控制流分析(源程序整體流程圖): printf(計(jì)算a+b矩陣:n); for(i=0;i3;i+) for(j=0;j3;j+) cij=aij+bij; printf(%6d); printf(n);九、源代碼優(yōu)點(diǎn),好處:本程序是通過二叉樹的鏈表方式存儲(chǔ)數(shù)據(jù),計(jì)算二叉樹每個(gè)結(jié)點(diǎn)的頻數(shù),利用二叉樹的層次遍歷,輸出二叉樹的每個(gè)結(jié)點(diǎn)的頻數(shù),對(duì)于較大規(guī)模的作業(yè)都能很快地得到運(yùn)行結(jié)果。而且整個(gè)程序是基于鏈表和二叉樹這種數(shù)據(jù)結(jié)構(gòu)來(lái)實(shí)現(xiàn)的,編程風(fēng)格一致,容易理解。十、總結(jié)及心得體會(huì): 通過此次課程設(shè)計(jì),使我更加扎實(shí)的掌握了有關(guān)用層次遍歷訪問二叉樹序列頻數(shù)的問題。我知道,其實(shí)有很多比如像素、圖像等等都用到層次遍歷來(lái)計(jì)算它們的頻數(shù),由此也為自己第一次踏入這門知識(shí)的領(lǐng)域而感到驕傲。雖然在本次課程設(shè)計(jì)中,我曾遇到過種種問題。抱著對(duì)新領(lǐng)域的探索與求知,我一遍一遍的檢查,終于找到了問題的所在,也暴露出了前期我在這方面上的知識(shí)欠缺與經(jīng)驗(yàn)不足。實(shí)踐出真知,通過自己親自動(dòng)手制作,使我掌握的知識(shí)不再是紙上談兵。作為一名計(jì)算機(jī)專業(yè)的學(xué)生,從最開始學(xué)習(xí)的高等代數(shù)一直到已經(jīng)即將結(jié)束的離散數(shù)學(xué)。我從終于將所學(xué)習(xí)的數(shù)學(xué)知識(shí),在計(jì)算機(jī)上得到了應(yīng)用,我覺得有必要對(duì)這門課程設(shè)計(jì)中自己的所感進(jìn)行一次總結(jié),希望對(duì)初學(xué)者有一定的幫助與啟迪。為什么用面向?qū)ο蟮乃枷雭?lái)設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)用面向過程的程序設(shè)計(jì)方法,來(lái)進(jìn)行數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì),學(xué)習(xí)時(shí)比較容易理解與掌握。但它的數(shù)據(jù)一般是事先具體給定的,是為其功能函數(shù)服務(wù)的,函數(shù)起著主導(dǎo)作用。以函數(shù)為中心,對(duì)于函數(shù)的運(yùn)用并不方便。以排序問題為例,用于排序的函數(shù)不少,但對(duì)于一個(gè)實(shí)際問題,究竟應(yīng)該選擇哪一種排序函數(shù),還必須根據(jù)實(shí)際問題的數(shù)據(jù)結(jié)構(gòu)來(lái)定。對(duì)于鏈表,你總不能選擇冒泡函數(shù)來(lái)進(jìn)行排序吧。既然以函數(shù)為中心對(duì)于解決實(shí)際問題并不方便,那么,就只能選擇以數(shù)據(jù)為中心,將為數(shù)據(jù)服務(wù)的函數(shù)與它綁定在一起,使這些服務(wù)于數(shù)據(jù)的函數(shù)成為數(shù)據(jù)的一部分。這就是面向?qū)ο蟪绦蛟O(shè)計(jì)中類的概念。首先要感謝我的老師給我們提供了這次課程設(shè)計(jì)的機(jī)會(huì),讓我將平時(shí)所學(xué)習(xí)的知識(shí)更加的系統(tǒng)化。老師給予的指導(dǎo),提供的支持與幫助,是我能夠完成本次課程設(shè)計(jì)的最主要的原因。我還要感謝給予我?guī)椭木W(wǎng)絡(luò)論壇上的朋友們,你們提供的寶貴意見,使我的程序能夠進(jìn)一步的優(yōu)化。最后還要感謝在參考文獻(xiàn)中列出的各位編者,你們所寫的書在我課程設(shè)計(jì)完成的道路上給過我無(wú)數(shù)的指導(dǎo)。這份課程設(shè)計(jì),是我對(duì)新領(lǐng)域的一次探索,我已經(jīng)上路了。十一、對(duì)源程序過程及方法、手段的改進(jìn)建議: 基本算法:按照題目要求,是按前進(jìn)前出來(lái)遍歷二叉樹的,所以必然要用到隊(duì)列來(lái)存儲(chǔ)其結(jié)點(diǎn),此題是按層次遍歷二叉樹,若按先序、中序、后序來(lái)遍歷二叉樹,采用堆棧即可簡(jiǎn)單實(shí)現(xiàn),在此不在論述。 思路:先訪問其根結(jié)點(diǎn),將根結(jié)點(diǎn)指針?biāo)腿腙?duì)列,然后取出根結(jié)點(diǎn)指針,若根結(jié)點(diǎn)有左子樹,則將其左子樹入隊(duì)列;若有右子樹,將右子樹入隊(duì)列,遍歷訪問樹即可。#include#include#define maxsize 10typedef struct binode char data; struct binode *lchild,*rchild;binode,*bitree; /定義樹結(jié)點(diǎn)結(jié)構(gòu)typedef struct queuenode bitree chmaxsize; int front; int rear;queuenode; /定義隊(duì)列結(jié)點(diǎn)結(jié)構(gòu)/建樹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;/初始化一個(gè)帶頭結(jié)點(diǎn)的隊(duì)列void initqueue(queuenode &q) /q.ch=(bitree*)malloc(maxsize*sizeof(binode); q.front=q.rear=0;/入隊(duì)列int enqueue(queuenode &q,bitree p) if(q.rear+1)%maxsize=q.front) printf(隊(duì)列滿!n); return 0; q.chq.rear=p; q.rear=(q.rear+1)%maxsize; return 1;/出隊(duì)列void dequeue(queuenode &q,bitree &p) p=q.chq.front; q.front=(q.front+1)%maxsize; char data; data=p-data; printf(%c ,data);/判斷隊(duì)列是否為空int queueempty(queuenode q) if(q.front=q.rear) return 1; return 0;/按層次遍歷樹中結(jié)點(diǎn)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. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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)論