第一篇:操作系統(tǒng)試驗報告
操作系統(tǒng)課外實踐報告
項 目 名 稱: 磁盤調(diào)度模擬系統(tǒng) 所 在 班 級: 軟件工程一班 小 組 成 員:;劉清元,學號:120904012 指 導 教 師: 王蕾 起 止 時 間: 2014.6.1—2014.6.20
磁盤調(diào)度模擬系統(tǒng)實驗報告
一:實驗目標:
通過設計一個磁盤調(diào)度模擬系統(tǒng),從而使磁盤調(diào)度算法更加形象化,容易使人理解,使磁盤調(diào)度的特點更簡單明了,能使使用者加深對先來先服務算法、最短尋道時間優(yōu)先算法、掃描算法以及循環(huán)掃描算法等磁盤調(diào)度算法的理解。
二:實驗要求:
系統(tǒng)主界面可以靈活選擇某種算法,算法包括:先來先服務算法(FCFS)、最短尋道時間優(yōu)先算法(SSTF)、掃描算法(SCAN)、循環(huán)掃描算法(CSCAN)。
三:實現(xiàn)原理
設備的動態(tài)分配算法與進程調(diào)度相似,也是基于一定的分配策略的。常用的分配策略有先請求先分配、優(yōu)先級高者先分配等策略。在多道程序系統(tǒng)中,低效率通常是由于磁盤類旋轉(zhuǎn)設備使用不當造成的。操作系統(tǒng)中,對磁盤的訪問要求來自多方面,常常需要排隊。這時,對眾多的訪問要求按一定的次序響應,會直接影響磁盤的工作效率,進而影響系統(tǒng)的性能。訪問磁盤的時間因子由3部分構成,它們是查找(查找磁道)時間、等待(旋轉(zhuǎn)等待扇區(qū))時間和數(shù)據(jù)傳輸時間,其中查找時間是決定因素。因此,磁盤調(diào)度算法先考慮優(yōu)化查找策略,需要時再優(yōu)化旋轉(zhuǎn)等待策略。
平均尋道長度(L)為所有磁道所需移動距離之和除以總的所需訪問的磁道數(shù)(N),即:
L=(M1+M2+??+Mi+??+MN)/N
其中Mi為所需訪問的磁道號所需移動的磁道數(shù)。
啟動磁盤執(zhí)行輸入輸出操作時,要把移動臂移動到指定的柱面,再等待指定扇區(qū)的旋轉(zhuǎn)到磁頭位置下,然后讓指定的磁頭進行讀寫,完成信息傳送。因此,執(zhí)行一次輸入輸出所花的時間有:
尋找時間——磁頭在移動臂帶動下移動到指定柱面所花的時間。
延遲時間——指定扇區(qū)旋轉(zhuǎn)到磁頭下所需的時間。
傳送時間——由磁頭進程讀寫完成信息傳送的時間。
其中傳送信息所花的時間,是在硬件設計就固定的。而尋找時間和延遲時間是與信息在磁盤上的位置有關。
為了減少移動臂進行移動花費的時間,每個文件的信息不是按盤面上的磁道順序存放滿一個盤面后,再放到下一個盤面上。而是按柱面存放,同一柱面上的各磁道被放滿信息后,再放到下一個柱面上。所以各磁盤的編號按柱面順序(從0號柱面開始),每個柱面按磁道順序,每個磁道又按扇區(qū)順序進行排序。
四:算法實現(xiàn)
1.先來先服務算法(FCFS)
先來先服務(FCFS)調(diào)度:按先來后到次序服務,未作優(yōu)化。最簡單的移臂調(diào)度算法是“先來先服務”調(diào)度算法,這個算法實際上不考慮訪問者要求訪問的物理位置,而只是考慮訪問者提出訪問請求的先后次序。例如,如果現(xiàn)在讀寫磁頭正在50號柱面上執(zhí)行輸出操作,而等待訪問者依次要訪問的柱面為130、199、32、159、15、148、61、99,那么,當50號柱面上的操作結(jié)束后,移動臂將按請求的先后次序先移到130號柱面,最后到達99號柱面。采用先來先服務算法決定等待訪問者執(zhí)行輸入輸出操作的次序時,移動臂來回地移動。先來先服務算法花費的尋找時間較長,所以執(zhí)行輸入輸出操作的總時間也很長。
2.短尋道時間優(yōu)先算法(SSTF)
最短尋找時間優(yōu)先調(diào)度算法總是從等待訪問者中挑選尋找時間最短的那個請求先執(zhí)行的,而不管訪問者到來的先后次序。現(xiàn)在仍利用同一個例子來討論,現(xiàn)在當50號柱面的操作結(jié)束后,應該先處理61號柱面的請求,然后到達32號柱面執(zhí)行操作,隨后處理15號柱面請求,后繼操作的次序應該是99、130、148、159、199。
采用最短尋找時間優(yōu)先算法決定等待訪問者執(zhí)行操作的次序時,讀寫磁頭總共移動了200多個柱面的距離,與先來先服務、算法比較,大幅度地減少了尋找時間,因而縮短了為各訪問者請求服務的平均時間,也就提高了系統(tǒng)效率。但最短查找時間優(yōu)先(SSTF)調(diào)度,F(xiàn)CFS會引起讀寫頭在盤面上的大范圍移動,SSTF查找距離磁頭最短(也就是查找時間最短)的請求作為下一次服務的對象。SSTF查找模式有高度局部化的傾向,會推遲一些請求的服務,甚至引起無限拖延(又稱饑餓)。
3.掃描算法(SCAN)
SCAN 算法又稱電梯調(diào)度算法。SCAN算法是磁頭前進方向上的最短查找時間優(yōu)先算法,它排除了磁頭在盤面局部位置上的往復移動,SCAN算法在很大程度上消除了SSTF算法的不公平性,但仍有利于對中間磁道的請求。
“電梯調(diào)度”算法是從移動臂當前位置開始沿著臂的移動方向去選擇離當前移動臂最近的那個柱訪問者,如果沿臂的移動方向無請求訪問時,就改變臂的移動方向再選擇。這好比乘電梯,如果電梯已向上運動到4層時,依次有3位乘客陳生、伍生、張生在等候乘電梯。他們的要求是:陳生在2層等待去10層;伍生在5層等待去底層;張生在8層等待15層。由于電梯目前運動方向是向上,所以電梯的形成是先把乘客張生從8層帶到15層,然后電梯換成下行方向,把乘客伍生從5層帶到底層,電梯最后再調(diào)換方向,把乘客陳生從2層送到10層。
我們?nèi)杂们笆龅耐焕觼碛懻摬捎谩半娞菡{(diào)度”算法的情況。由于磁盤移動臂的初始方向有兩個,而該算法是與移動臂方向有關,所以分成兩種情況來討論。
〈1〉.移動臂由里向外移動
開始時,在50號柱面執(zhí)行操作的讀寫磁頭的移動臂方向是由里向外,趨向32號柱面的位置,因此,當訪問50號柱面的操作結(jié)束后,沿臂移動方向最近的柱面是32號柱面。所以應先為32號柱面的訪問者服務,然后是為15號柱面的訪問者服務。之后,由于在向外移方向已無訪問等待者,故改變移動臂的方向,由外向里依次為各訪問者服務。在這種情況下為等待訪問者服務的次序是61、99、130、148、159、199。
〈2〉.移動臂由外向里移動
開始時,正在50號柱面執(zhí)行操作的讀寫磁頭的移動臂是由外向里(即向柱面號增大的內(nèi)圈方向)趨向61號柱面的位置,因此,當訪問50號柱面的操作結(jié)束后,沿臂移動方向最近的柱面是61號柱面。所以,應先為61號柱面服務,然后按移動臂由外向里移動的方向,依次為99、130、148、159、199柱面的訪問者服務。當201號柱面的操作結(jié)束后,向里移動的方向已經(jīng)無訪問等待者,所以改變移動臂的前進方向,由里向外依次為32、15柱面的訪問者服務。
“電梯調(diào)度”與“最短尋找時間優(yōu)先”都是要盡量減少移動臂時所花的時間。所不同的是:“最短尋找時間優(yōu)先”不考慮臂的移動方向,總是選擇離當前讀寫磁頭最近的那個柱面,這種選擇可能導致移動臂來回改變移動方向;“電梯調(diào)度”是沿著臂的移動方向去選擇離當前讀寫詞頭最近的哪個柱面的訪問者,僅當沿移動臂的前進移動方向無訪問等待者時,才改變移動臂的前進方向。由于移動臂改變方向是機械動作,速度相對較慢,所以,電梯調(diào)度算法是一種簡單、使用且高效的調(diào)度算法。
但是,“電梯調(diào)度”算法在實現(xiàn)時,不僅要記住讀寫磁頭的當前位置,還必須記住移動臂的當前前進方向。
4.循環(huán)掃描算法(CSCAN)
單項掃描調(diào)度算法的基本思想是,不考慮訪問者等待的先后次序,總是從0號柱面開始向里道掃描,按照各自所要訪問的柱面位置的次序去選擇訪問者。在移動臂到達最后一個柱面后,立即快速返回到0號柱面,返回時不為任何的訪問者等待服務。在返回到0號柱面后,再次進行掃描。
由于該例中已假定讀寫的當前位置在50號柱面,所以,指示了從50號柱面繼續(xù)向里掃描,依次為61、99、130、148、159、199各柱面的訪問者服務,此時移動臂已經(jīng)是最內(nèi)的柱面,于是立即返回到0號柱面,重新掃描,依次為15、32號柱面的訪問者服務。
除了“先來先服務”調(diào)度算法外,其余三種調(diào)度算法都是根據(jù)欲訪問的柱面位置來繼續(xù)調(diào)度的。在調(diào)度過程中可能有新的請求訪問者加入。在這些新的請求訪問者加入時,如果讀寫已經(jīng)超過了它們所要訪問的柱面位置,則只能在以后的調(diào)度中被選擇執(zhí)行。在多道程序設計系統(tǒng)中,在等待訪問磁盤的若干訪問者請求中,可能要求訪問的柱面號相同,但在同一柱面上的不同磁道,或訪問同一柱面中同一磁道上的不同扇區(qū)。所以,在進行移動調(diào)度時,在按照某種短法把移動臂定位到某個柱面后,應該在等待訪問這個柱面的各個訪問者的輸入輸出操作都完成之后,再改變移動臂的位置。
五:實現(xiàn)代碼
#include printf(“第%d次訪問的磁道:%dn”,i+1,a[i]); sum+=abs(s-a[i]); s=a[i];} printf(“平均尋道長度:%fn”,sum*1.0/n);} void SSTF(int b[],int n,int k)//最短尋道法 { int i,j,s,sum=0,p;int a[20];for(i=0;i s=a[0]; p=0; for(j=0;j<=i;j++) if(abs(a[j]-k) { s=a[j]; p=j; } a[p]=a[i]; printf(“第%d次訪問的磁道:%dn”,n-i,s); sum+=abs(s-k); k=s;} printf(“平均尋道長度:%fn”,sum*1.0/n);} void SCAN1(int b[],int n,int k)//掃描算法 { int i,j,s,sum=0,p,biaoji;int a[20];for(i=0;i biaoji=0; for(j=0;j<=i;j++) if(a[j]-k<0) { biaoji=1; p=j; break; } if(biaoji==1) { s=a[p]; for(j=0;j<=i;j++) if(a[j] { s=a[j]; p=j; } a[p]=a[i]; printf(“第%d次訪問的磁道:%dn”,n-i,s); sum+=k-s; k=s; } else { s=a[0]; for(j=0;j<=i;j++) if(a[j]-k<=s-k) { s=a[j]; p=j; } a[p]=a[i]; printf(“第%d次訪問的磁道:%dn”,n-i,s); sum+=abs(k-s); k=s; } } printf(“平均尋道長度:%fn”,sum*1.0/n);} void SCAN2(int b[],int n,int k)//循環(huán)算法 { int i,j,s,sum=0,p,biaoji;int a[20];for(i=0;i biaoji=0; for(j=0;j<=i;j++) if(a[j]-k>0) { biaoji=1; p=j; break; } if(biaoji==1) { s=a[p]; for(j=0;j<=i;j++) if(a[j]>k&&a[j]-k { s=a[j]; p=j; } a[p]=a[i]; printf(“第%d次訪問的磁道:%dn”,n-i,s); sum+=s-k; k=s; } else { s=a[0]; for(j=0;j<=i;j++) if(k-a[j]<=k-s) { s=a[j]; p=j; } a[p]=a[i]; printf(“第%d次訪問的磁道:%dn”,n-i,s); sum+=abs(k-s); k=s; } } printf(“平均尋道長度:%fn”,sum*1.0/n);} void C_SCAN(int b[],int n,int k)//循環(huán)算法 { int i,j,s,sum=0,p,biaoji;int a[20];for(i=0;i biaoji=0; for(j=0;j<=i;j++) if(a[j]-k>0) { biaoji=1; p=j; break; } if(biaoji==1) } { s=a[p];for(j=0;j<=i;j++)if(a[j]>k&&a[j]-k for(;i>=0;i--){ s=a[0];for(j=0;j<=i;j++)if(a[j]-k { s=a[j]; p=j; } a[p]=a[i];printf(“第%d次訪問的磁道:%dn”,n-i,s);sum+=s-k;k=s;} printf(“平均尋道長度:%fn”,sum*1.0/n); void main(){ int a[20];int i,n,k,k1,init;printf(“請輸入需要訪問的磁道總數(shù):”);scanf(“%d”,&n);for(i=0;i printf(“需要訪問的磁道%d:”,i+1); scanf(“%d”,&a[i]);} printf(“請輸入指針所在磁道:”);scanf(“%d”,&init);k=1;while(k){ printf(“**********************************n”); printf(“$$$$$$$$$$劉清元——磁盤調(diào)度$$$$$$$$$n”); printf(“** 1.先來先服務(FCFS)**n”); printf(“** 2.最短尋道時間優(yōu)先(SSTF)**n”); printf(“** 3.掃描算法(SCAN)**n”); printf(“** 4.循環(huán)算法(C-SCAN)**n”); printf(“** 0.退出 **n”); printf(“**********************************n”); printf(“&&&&&&&&&&&&謝謝使用&&&&&&&&&&&&&&n”); printf(“請在下面輸入您的選擇:”); scanf(“%d”,&k); switch(k) { case 1:FCFS(a,n,init);break; case 2:SSTF(a,n,init);break; case 3:k1=1; while(k1) { printf(“*********************************n”); printf(“ #劉清元——磁盤調(diào)度 ###n”); printf(“**** 1.移動臂由里向外 **n”); printf(“**** 2.移動臂由外向里 **n”); printf(“**** 0.返回上一層 **n”); printf(“*********************************n”); printf(“ ######謝謝使用 #####n”); printf(“請在下面輸入您的選擇:”); } } } scanf(“%d”,&k1);switch(k1){ case 1:SCAN1(a,n,init);break;case 2:SCAN2(a,n,init);break;} } break;case 4:C_SCAN(a,n,init);break;六:運行結(jié)果 1.輸入數(shù)據(jù),選擇調(diào)度方法 2.先來先服務 3最短尋道時間優(yōu)先 4循環(huán)算法 5.循環(huán)算法 (1)磁頭由里向外移動 (2)磁頭由外向里移動 七:心得體會 通過此次課程設計,我明白了實踐的意義,要把書本上的知識轉(zhuǎn)換為現(xiàn)實中的成果,創(chuàng)新與不懈的努力也是成功的重要因素。如果沒有一定的耐心,這次的課程設計也不能成功。 “磁盤調(diào)度”是我本學期操作系統(tǒng)課程設計的題目。在設計此程序的過程中,我遇到過許多問題,也學到了很多東西。 本程序的設計實現(xiàn)主要是用C++語言實現(xiàn),通過對程序算法的設計優(yōu)化、輸出顯示的格式設計、輸入過程中的異常處理等一些設計過程中的問題的考慮解決,在C++學習上也有了很大的進步。 在程序設計中先后參考了很多網(wǎng)絡資料,也參考了一些別人寫的的程序,綜合這些算法思想和自己的思路對程序做了很好的設計方式,對一些算法的優(yōu)越性等也作了一些考慮。此外考慮最多的就是異常錯誤處理的設計。在設置程序的顯示優(yōu)化時,發(fā)現(xiàn)暫停函數(shù)在不同的情況下執(zhí)行順序不同,如此等等 電子政務試驗報告 一.試驗時間:第十周二.試驗地點:05612 三.試驗目的和要求: 1、本次模擬實習選擇的電子政務實踐平臺是奧派電子政務實踐平臺,通過在這個相對完整的電子政務系統(tǒng)上進行模擬操作,讓同學們在模擬實踐中體會電子政務給政府傳統(tǒng)辦公帶來的巨大變革,掌握大量電子政務系統(tǒng)的操作技巧。 2、通過實踐操作體驗電子政務的基本功能,將電子政務和實際教學結(jié)合起來,讓同學們能夠運用所學知識快速全面的理解和掌握政府機關辦公單位的辦公流程,并能初步掌握實施電子政務的基本方法和策略。 3、實踐教學中了解政府內(nèi)部辦公和為公眾服務方面等學習,提高實際動手能力,通過模擬政府內(nèi)部辦公的流程和實際業(yè)務,從而真正理解和領悟電子政務實施和應用的重要性和便民性。 四.實驗內(nèi)容:奧派電子政務教學實踐平臺包括政府信息門戶、行政審批系統(tǒng)、政府辦公系統(tǒng)、公文傳輸平臺、招標采購平臺等模塊。 五.試驗總結(jié) 奧派政府辦公自動化系統(tǒng)采用先進的技術和管理理念,基于B/S 結(jié)構,構建的功能完善、安全可靠的政府行政辦公管理軟件。系統(tǒng)以領導、公務員為服務對象,緊密結(jié)合政府辦公業(yè)務的特點,實現(xiàn)網(wǎng)上公文流轉(zhuǎn)及協(xié)同工作,使不同部門的工作人員可以方便、有序地參加協(xié)同工作,提高工作效率。通過實驗學習,同學們基本掌握了電子政務實踐操作和運用,對電子政務運用的重要性有一個更深層次的理解,電子政務能夠打破時空限制,提高辦事效率,提高行政的透明度,拓展社會服務功能,提供與公眾便利的交流渠道。通過試驗我們也獲得一些收獲,一 是本課程追求全而務實,因此在實踐教學中了解了政府內(nèi)部辦公和為公眾服務方面等的學習;二是提高學生的實際動手能力,可以通過把政府搬進課堂,讓學生模擬政府的內(nèi)部辦公流程和實際業(yè)務,從而真正地了解和領悟電子政務應用的重要性;三是豐富電子政務的實踐教學案例的內(nèi)容,電子政務實踐教學通過大量的教學案例和多媒體教學課件,使我們學習電子政務時更加直觀和易懂。 四、實驗思考 1、請描述你在該小組實驗中都完成了哪些任務? 答:查看商城用戶訂單詳細信息,生成已確認付款訂單,生成已確認缺貨采購單,生成已確認預警商品采購單,生成已確認正常商品采購單,銀行進出帳管理(存),銀行進出帳管理(取),銷售收入報表查詢,采購支付報表查詢,銀行進出報表查詢。 2、說說你對B to C電子商務運作流程的認識。 答:B to C模式是一種電子化零售,主要采取在線銷售形式,以網(wǎng)絡手段實現(xiàn)公眾消費或向公眾提供服務,并保證與其相關的付款方式的電子化。其主要的流程有:A.初始信息設置 商城管理員(添加商城信息、添加商品種類、添加商品信息、開通物流公司)物流用戶(物流公司申報) B.購買流程 商城用戶(注冊、登錄、采購)———銷售部———財務部(受理訂單、進EDI填開發(fā)票)———銷售部(確認單據(jù)、生成發(fā)貨單)———儲運部(發(fā)貨)———物流業(yè)務部(配送)———商城用戶(收貨) 2.退貨流程 商城用戶(登錄、查看訂單、退貨)———銷售部(同意/不同意退貨)———商城用戶(查看訂單處理情況) 3.正常采購 采購部(提交正常采購單)———財務部(審核)———采購部(確認采購單)———物流業(yè)務部(配送)———儲運部(產(chǎn)品入庫) 4.預警采購 采購部(提交預警采購單)———財務部(審核)———采購部(確認采購)———物流業(yè)務部(配送)———儲運部(產(chǎn)品入庫) 5.缺貨采購 商城用戶(注冊、登錄、采購)———銷售部(受理生成缺貨單)———采購部(生成缺貨采購單)———財務部(通過缺貨采購單)———采購部(確認缺貨采購)———物流部(缺貨商品配送)———儲運部(缺貨單入庫)———銷售部(生成財務單)———財務部(確認付款單)———銷售部(生成出運單)———儲運部(配送產(chǎn)品)———商城用戶(收貨) 請分別用三張實驗報告紙抄寫!第10周周五交到各班學習委員,過期不侯!另將軸系結(jié)構圖一并交上,每人一份,圖 上要標明尺寸! 請學習委員將實驗報告按學號排好交給我! 實驗一機械零件認識實驗 一、實驗目的1.初步了解《機械設計》課程所研究的各種常用零件的結(jié)構、類型、特點及應用。 2.了解各種標準零件的結(jié)構形式及相關的國家標準。 3.了解各種傳動的特點及應用。 4.了解各種常用的潤滑劑及相關的國家標準。 5.增強對各種零部的結(jié)構及機器的感性認識。 二、實驗方法 通過對實驗指導書的學習及機械零件模型的展示,實驗教學人員的介紹,答疑及同學的觀察去認識機器常用的基本零件,使理論與實際對應起來,從而增強同學對機械零件的感性認識。并通過展示的機械設備、機器模型等,使學生們清楚知道機器的基本組成要素—機械零件。 三、實驗內(nèi)容 (一)螺紋聯(lián)接 螺紋聯(lián)接是利用螺紋零件工作的,主要用作緊固零件。基本要求是保證聯(lián)接強度及聯(lián)接可靠性,同學們應了解如下內(nèi)容: 1.螺紋的種類; 2.螺紋聯(lián)接的基本類型; 3.螺紋聯(lián)接的防松;4.提高螺紋聯(lián)接強度的措施。 在掌握上述內(nèi)容,通過參觀螺紋聯(lián)接模型,同學應區(qū)分出:①什么是普通螺紋、管螺紋、梯形螺紋和鋸齒螺紋;②能認識什么是普通螺紋、雙頭螺紋、螺釘及緊定螺釘聯(lián)接;③能認識摩擦防松與機械防松的零件;④了解聯(lián)接螺栓的光桿部分做得比較細的原因是什么等問題。 (二)標準聯(lián)接零件 標準聯(lián)接零件一般是由專業(yè)企業(yè)按國標(GB)成批生產(chǎn),供應市場的零件。這類零件的結(jié)構形式和尺寸都已標準化,設計時可根據(jù)有關標準選用。通過實驗學生們要能區(qū)分螺栓與螺釘;能了解各種標準化零件的結(jié)構特點,使用情況;了解各類零件有那些標準代號,以提高學生們對標準化意識。 1.螺栓; 2.螺釘;3.螺母;4.墊圈;5.擋圈。 (三)鍵、花鍵及銷聯(lián)接 1.鍵聯(lián)接;2.花鍵聯(lián)接;3.銷聯(lián)接 以上幾種聯(lián)接,通過展柜的參觀同學們要仔細觀察其結(jié)構,使用場合,并能 分清和認識以上各類零件。 (四)機械傳動 機械傳動有螺旋傳動、帶傳動、鏈傳動、齒傳動及蝸桿傳動等。各種傳動都有不同的特點和使用范圍,這些傳動知識同學們在學習“機械設計”課程中都有要詳細講授。在這里主要通過實物觀察,增加同學們對各種機械傳動知識的感性認識,為今后理論學習及課程設計打下良好基礎。 1.螺旋傳動;2.帶傳動; 3.鏈傳動; 4.齒輪傳動; 5.蝸桿傳動。 (五)軸系零、部件 1.軸承;2.軸 (六)彈簧 (七)潤滑劑及密封 實驗二軸系結(jié)構分析 一、實驗目的1.熟悉并掌握軸與軸上零件的結(jié)構形狀及功用、工藝要求和裝配關系; 2.熟悉并掌握軸及軸上零件的定位與固定方法; 3.了解軸承的類型、布置、安裝及調(diào)整方法,以及潤滑和密封方式。 二、實驗設備及工具 1. 組合式軸系結(jié)構設計分析實驗箱 該實驗箱按照組合設計法,采用較少的零件,可以組合出盡可能多的軸系部件,以滿足實驗的要求。實驗箱內(nèi)有齒輪類、軸類、套筒類、端蓋類、支座類、軸承類及聯(lián)接件類等8類50多種零件,提供了可組成圓柱齒輪軸系、小圓錐齒輪軸系和蝸桿軸系三類軸系結(jié)構模型的成套零件。 2. 測量及繪圖工具 300mm鋼板尺、游標卡尺、鉛筆、三角板等。 三、實驗內(nèi)容及要求 1.依據(jù)指導教師給每組指定實驗內(nèi)容(圓柱齒輪軸系、小圓錐齒輪軸系或蝸桿軸系)觀察組裝后的軸系結(jié)構,繪制軸系部件的裝配草圖。 2.測量軸系的主要裝配尺寸,分析并測繪軸系零件,繪制主要零件的結(jié)構草圖。 四、實驗步驟 1.提前預習,明確實驗內(nèi)容,復習軸的結(jié)構設計及軸承組合設計等與實驗相關的教學內(nèi)容; 2.觀察與分析軸系結(jié)構的特點,繪制軸系裝配示意圖或結(jié)構草圖; 3. 測量軸系主要裝配尺寸(如支承跨距); 4. 對軸系部件進行拆解,觀察和分析軸系各零件的結(jié)構,對其主要的結(jié)構尺寸進行測量(支座不用測量)。 5. 根據(jù)裝配草圖和測量數(shù)據(jù),繪制軸系部件裝配圖。 6.裝配軸系部件使其恢復原狀。 實驗三軸系結(jié)構設計 一、實驗目的熟悉并掌握軸系結(jié)構設計中有關軸的結(jié)構設計、滾動軸承組合設計的基本方法。 二、實驗設備及工具 1. 組合式軸系結(jié)構設計分析實驗箱 實驗箱提供了可組成減速器圓柱齒輪軸系、小圓錐齒輪軸系和蝸桿軸系三類軸系結(jié)構模型的成套零件(詳見實驗中的設備介紹)。 2.測量及繪圖工具 300mm鋼板尺、游標卡尺、鉛筆、三角板等。 三、實驗內(nèi)容及要求 1、進行軸的結(jié)構設計與滾動軸承組合設計 每組學生進行軸系結(jié)構設計,解決軸承類型選擇,軸上零件定位、固定,軸承安裝與調(diào)節(jié)、潤滑及密封等問題。 2.繪制軸系結(jié)構裝配圖。 3.每人編寫實驗報告一份。 四、實驗步驟 1.明確實驗內(nèi)容,理解設計要求; 2.復習有關軸的結(jié)構設計與軸承組合設計的內(nèi)容與方法; 3.構思軸系結(jié)構方案 1)根據(jù)齒輪類型選擇滾動軸承型號; 2)確定支承軸向固定方式(兩端固定:一端固定、一端游動); 3)根據(jù)齒輪圓周速度(高、中、低)確定軸承潤滑方式(脂潤滑、油潤滑); 4)選擇端蓋形式(凸緣式、嵌入式)并考慮透蓋處密封方式(氈圈、皮碗、油溝); 5)考慮軸上零件的定位與固定,軸承間隙調(diào)整等問題; 6)繪制軸系結(jié)構方案示意圖 4.組裝軸系部件 根據(jù)軸系結(jié)構方案,從實驗箱中選取合適零件并組裝成軸系部件,檢查所設計組裝的軸系結(jié)構是否正確。 5.繪制軸系結(jié)構草圖。 6.測量零件結(jié)構尺寸(支座不用測量),并作好記錄。 7.將所有零件放人實驗箱內(nèi)的規(guī)定位置,交還所借工具 8.根據(jù)結(jié)構草圖及測量數(shù)據(jù),在3號圖紙上用1:l比例繪制軸系結(jié)構裝配圖,要求裝配關系表達正確,注明必要尺寸(如支承跨距、齒輪直徑與寬度、主要配合尺寸),填寫標題欄和明細表。 9.寫出實驗報告。 實驗一:ADT的類C描述向C程序的轉(zhuǎn)換實驗(2學時) 實驗目的: (1)復習C語言的基本用法; (2)學會用類C的語言對算法進行描述的方法,將類C算法轉(zhuǎn)換成C源程序的方法和過程; (3)抽象數(shù)據(jù)類型的定義和表示、實現(xiàn); (4)加深對數(shù)據(jù)的邏輯結(jié)構和物理結(jié)構之間關系的理解;(5)初步建立起時間復雜度和空間復雜度的概念。實驗內(nèi)容:(類C算法的程序?qū)崿F(xiàn))(1)輸入一組數(shù)據(jù)存入數(shù)組中,并將數(shù)據(jù)元素的個數(shù)動態(tài)地由輸入函數(shù)完成。求輸入數(shù)據(jù)的最大值、最小值,并通過函數(shù)參數(shù)返回所求結(jié)果; 實驗準備: 1)計算機設備;2)程序調(diào)試環(huán)境的準備,如TC環(huán)境;3)實驗內(nèi)容的算法分析與代碼設計與分析準備。實驗步驟: 1.安裝TC并設置好環(huán)境,如果已安裝好,可以跳過此步; 2.錄入程序代碼并進行調(diào)試和算法分析; 對實驗內(nèi)容(1)的操作步驟:1)用類C語言描述算法過程;2)用C語言環(huán)境實現(xiàn)該算法。 對實驗內(nèi)容(2)的操作步驟:1)完成算法的C實現(xiàn);2)分析其時間復雜度和空間復雜度。 3.編寫實驗報告。 實驗結(jié)果:// 動態(tài)分配數(shù)組空間 #include int size,i;int *pArray;int *p;void malloc_size(){ pArray=(int *)malloc(size*(sizeof(int)));} int input_size(){ printf(“please input the size:n”);printf(“size= ”);scanf(“%d”,&size);return 0;} int input_data(){ printf(“please input the value:n”);for(i=0;i printf(“pArray[%d]= ”,i); scanf(“%d”,&pArray[i]);} return *pArray;} int Compare(){ int x,y,i;x=y=p[0];for(i=0;i if(x>=p[i])x=p[i]; if(y<=p[i])y=p[i];} printf(“min= %dt max=%dn”,x,y);return 0;} int Output_data(){ p=pArray;printf(“before ofpaixu :n”);for(i=0;i printf(“%dt”,*pArray); pArray++;} printf(“n”);return *pArray;} void paixu(){ int x=0;int i,j;printf(“l(fā)ater of paixu:n”);for(i=0;i for(j=i+1;j { if(p[i]>=p[j]) { x=p[i];p[i]=p[j];p[j]=x; } } printf(“%dt”,p[i]);} printf(“n”);} void main(){ clrscr();input_size();malloc_size();input_data();Output_data();Compare();paixu();} 實驗結(jié)果: 實驗二 線性表及其基本操作實驗(2學時)實驗目的: (1)熟練掌握線性表ADT和相關算法描述、基本程序?qū)崿F(xiàn)結(jié)構;(2)以線性表的基本操作為基礎實現(xiàn)相應的程序; (3)掌握線性表的順序存儲結(jié)構和動態(tài)存儲結(jié)構之區(qū)分。 實驗內(nèi)容:(類C算法的程序?qū)崿F(xiàn),任選其一。具體要求參見教學實驗大綱)(1)一元多項式運算的C語言程序?qū)崿F(xiàn)(加法必做,其它選做);(2)有序表的合并;(3)集合的并、交、補運算; 實驗準備: 1)計算機設備;2)程序調(diào)試環(huán)境的準備,如TC環(huán)境;3)實驗內(nèi)容的算法分析與代碼設計與分析準備。實驗步驟: 1.錄入程序代碼并進行調(diào)試和算法分析; 2.編寫實驗報告。實驗結(jié)果://線性鏈表 #include typedef struct node { int data;struct node *next;}*Sqlist; void Initlialize(Sqlist &L){ L=(Sqlist)malloc(sizeof(Sqlist));L->next =NULL;} int Getlength(Sqlist L){ int i=0;Sqlist p=L->next;while(p!=NULL){ i++; p=p->next;} return i;} int Getelem(Sqlist L,int i){ int j=1,e;Sqlist p=L->next;while(j p=p->next; j++;} e=p->data;printf(“第 %d 個元素是:%dn”,i,e);return 1;} int Locatelem(Sqlist L,int x){ int i=0;Sqlist p=L->next;while(p!=NULL&&p->data!=x){ p=p->next; i++;} if(p==NULL) return 0;else { printf(“%d 是第 %d 個元素n”,x,i);return i;} } void CreatlistF(Sqlist &L,int a[ ],int n){ Sqlist s;int i;L=(Sqlist)malloc(sizeof(Sqlist));L->next =NULL;for(i=0;i s=(Sqlist)malloc(sizeof(Sqlist)); } } void CreatlistR(Sqlist &L,int a[],int n){ Sqlist s,r;int i;L=(Sqlist)malloc(sizeof(Sqlist));L->next =NULL;r=L;for(i=0;i s=(Sqlist)malloc(sizeof(Sqlist)); s->data =a[i]; s->next=NULL; r->next =s;r =s;} } int Inselem(Sqlist &L,int i,int x){ int j=1;Sqlist s,p=L->next;s=(Sqlist)malloc(sizeof(Sqlist));s->data =x;s->next =NULL;if(i<1||i>Getlength(L)) return 0;while(j p=p->next;j++;} printf(“在第 %d 個位置插入數(shù)據(jù):%dn”,i,x);s->next =p->next; p->next =s;return 1;} int Delelem(Sqlist &L,int i){ int j=1; Sqlist p,q; p=L; if(i<1||i>Getlength(L)) return 0;s->data =a[i]; s->next =L->next;L->next =s; while(j { p=p->next; j++; } q=p->next; p->next =q->next; free(q); return 1;} void Displist(Sqlist L){ Sqlist p=L->next; while(p!=NULL) { printf(“%dt”,p->data); p=p->next; } printf(“n”);} void input(int *pArray,int n){ printf(“請輸入數(shù)組數(shù)據(jù)(共含 %d 個元):n”,n); for(int i=0;i Scanf(“%d”,&pArray[i]); } int main(int argc, char* argv[]){ Sqlist L; int Array[M],Select;initlialize(L);do{ printf(“請輸入選擇方法(1表示頭插法,2表示尾插法,0表示結(jié)束):n”); scanf(“%d”,&Select); switch(Select) { case 1: printf(“按頭插法建立線性表:n”); input(Array,M); creatlistF(L,Array,M); break;case 2: printf(“按尾插法建立線性表:n”); input(Array,M); creatlistR(L,Array,M); break; } printf(“原線性表數(shù)據(jù)為:n”);Displist(L); Getelem(L,3); Locatelem(L,2); Inselem(L,5,5); printf(“修改后的線性表數(shù)據(jù)為:n”); Delelem(L,4); Displist(L);}while(Select!=0);return 0;} 運行結(jié)果: 實驗三 棧和隊列實驗(6學時)實驗目的: (1)熟練掌握棧和隊列的抽象數(shù)據(jù)類型及其結(jié)構特點;(2)實現(xiàn)基本的棧和隊列的基本操作算法程序。實驗內(nèi)容:(類C算法的程序?qū)崿F(xiàn),任選其一)(1)設計與實現(xiàn)基本的堆棧和隊列結(jié)構下的各種操作(如堆棧的PUSH、POP等操作)(必做); (2)以表達式計算為例,完成一個可以進行算術表達式計算功能的算法設計與實現(xiàn)(選做); 實驗準備: 1)計算機設備;2)程序調(diào)試環(huán)境的準備,如TC環(huán)境;3)實驗內(nèi)容的算法分析與代碼設計與分析準備。實驗步驟: 1.錄入程序代碼并進行調(diào)試和算法分析; 2.編寫實驗報告。實驗結(jié)果://隊列存儲 #include typedef struct sqqueue { char data[QueueSize];int front,rear;}SqQueue; void InitQueue(SqQueue &qu){ qu.front =qu.rear =0;} status EnQueue(SqQueue &qu,char x){ if((qu.rear +1)%QueueSize==qu.front) return 0;qu.rear =(qu.rear+1)%QueueSize;qu.data[qu.rear]=x;return 1;} status DeQueue(SqQueue &qu,char &x){ if(qu.rear==qu.front) return 0;qu.front =(qu.front +1)%QueueSize;x=qu.data[qu.front];return 1;} status GetHead(SqQueue qu,char &x){ if(qu.rear ==qu.front) return 0;x=qu.data[(qu.front+1)%QueueSize];return 1;} status QueueEmpty(SqQueue qu){ if(qu.rear==qu.front) return 1;else return 0;} void main(){ SqQueue qu;char e;InitQueue(qu);printf(“Queue %sn”,(QueueEmpty(qu)==1?“Empty”:“Not Empty”)); printf(“inser an”); EnQueue(qu,'a'); printf(“inser bn”); EnQueue(qu,'b'); printf(“inser cn”); EnQueue(qu,'c'); printf(“inser dn”); EnQueue(qu,'d'); printf(“Queue %sn”,(QueueEmpty(qu)==1?“Empty”:“Not Empty”)); GetHead(qu,e); printf(“Queue of top elem is: %cn”,e); printf(“show of Queue:n”); while(!QueueEmpty(qu)){ DeQueue(qu,e); printf(“%ct”,e);} printf(“n”);} 實驗結(jié)果: (2)//用棧實現(xiàn)對表達式的求值運算 #include #define TRUE 1 #define FALSE 0 #define OK #define ERROR 0 #define INFEASIBLE-1 #define OVERFLOW-2 #define STACK_INIT_SIZE #define STACKINCREMENT 10 typedef int Status;typedef char ElemType; typedef ElemType OperandType; typedef char OperatorType; typedef struct { ElemType *base; ElemType *top; int stacksize;}SqStack; Status InitStack(SqStack &S){ S.base =(ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType)); if(!S.base)exit(OVERFLOW); S.top = S.base; S.stacksize = STACK_INIT_SIZE; return OK;} Status GetTop(SqStack S){ ElemType e; if(S.top == S.base)return ERROR; e = *(S.top-1); return e;} Status Push(SqStack &S,ElemType e) { if(S.top1 < n){ merge(r, r1, i, i+length-1, i + 2*length1 < n-1) merge(r, r1, i, i+length-1, n-1); else for(j = i;j < n;j++)r1[j] = r[j];} void MergeSort(SortObject * pvector){ RecordNode record[MAXNUM]; int length = 1; while(length < pvector->n){ mergePass(pvector->record, record, pvector->n, length); length *= 2; mergePass(record, pvector->record, pvector->n, length); length *= 2; } } SortObject vector = {8, 49,38,65,97,76,13,27,49}; int main(){ int i;printf(“排序前序列為:”); for(i = 0;i < 8;i++) printf(“%d ”, vector.record[i]);printf(“n”); MergeSort(&vector);printf(“采用歸并排序為:”); for(i = 0;i < 8;i++) printf(“%d ”, vector.record[i]); getchar(); return 0;} 實驗結(jié)果: 實驗十 查找實驗(2學時)* 實驗目的: (1)熟練掌握各種靜態(tài)查找表方法(順序查找、折半查找、索引順序表等);(2)熟練掌握二叉排序樹的構造方法和查找算法; (3)了解和掌握其它查找方法。 實驗內(nèi)容:(類C算法的程序?qū)崿F(xiàn),除順序查找算法之外,任選一個)(1)順序查找算法的實現(xiàn)(必做);(2)折半查找算法的實現(xiàn)(選做); 實驗結(jié)果://查找實驗 1、順序查找: #include void SequenceSearch(int *fp,int Length){ int data; printf(“開始使用順序查詢.請輸入你想要查找的數(shù)據(jù): ”); scanf(“%d”,&data); for(int i=0;i if(fp[i]==data) { printf(“數(shù)據(jù)%d 是第 %d 個數(shù)據(jù)n”,data,i+1); return; } printf(“未能查找到數(shù)據(jù)%d.n”,i,data);} void main(){ int count; int arr[LENGTH]; printf(“請輸入你的數(shù)據(jù)的個數(shù):”); scanf(“%d”,&count); printf(“請輸入 %d 個數(shù)據(jù):”,count); for(int i=0;i scanf(“%d”,&arr[i]); SequenceSearch(arr,count);} 實驗結(jié)果: 2、折半查找: #include typedef struct { char *elem; int length; }SStable; void Create(char **t) { int i;static char a[M+1];*t=a;for(i=1;i<=M;i++){ printf(“A[%d] is:”,i); scanf(“%c”,&a[i]); if(a[i]!= 'n')getchar();} } int Searth(char *t,char k){ int i;for(i=M;i>=0 && t[i]!=k;i--); Return i;} void output(char *t){ int i;for(i=1;i<=M;i++) printf(“n A[%d] is %c”,i,t[i]);} void px(char *t) { char s;int i,j;for(i=1;i<=M;i++) for(j=i+1;j<=M;j++) { if(t[i]>t[j]){s=t[i];t[i]=t[j];t[j]=s;} } } int Search_bin(char *t,char k){ int low=1,high=M,mid;while(low<=high){ mid=(low+high)/2; if(k==t[mid])return mid; else if(k else low=mid+1;} return 0;} void main(){ char *t,k;int s;Create(&t);output(t);printf(“nplease input you search char:”);k=getchar();s=Searth(t,k);if(s>=0)printf(“1: use search find is A[%d]n”,s);else printf(“1:can not find itn”);px(t);output(t);s=Search_bin(t,k);if(s==0)printf(“n1:can not find it n”);else printf(“n2:use Search_bin find is A[%d]n”,s);getchar();} 實驗結(jié)果:第二篇:電子政務試驗報告
第三篇:電子商務試驗報告
第四篇:機械設計試驗報告
第五篇:數(shù)據(jù)結(jié)構試驗報告