版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 電子設(shè)計應(yīng)用軟件訓練任務(wù)</p><p><b> 一 、訓練任務(wù)</b></p><p> 1、PROTEL 部分</p><p> (1) 熟練掌握PROTEL 軟件的使用;</p><p> (2) 按要求繪制電路原理圖和PCB 版圖(能夠用自動布線和手動布線相結(jié)合);</p&g
2、t;<p> (3) 能夠按要求建立元件庫和封裝庫。</p><p><b> 2、軟件設(shè)計部分</b></p><p> 按照給定的軟件設(shè)計任務(wù)完成相應(yīng)的軟件設(shè)計(見軟件設(shè)計任務(wù)部分)。</p><p><b> 二、基本要求及說明</b></p><p> 1、PROTE
3、L 部分</p><p> (1) 電路原理圖圖紙尺寸按照給定的任務(wù)作相應(yīng)的設(shè)置;</p><p> (2) 電路原理圖見PROTEL 訓練任務(wù)部分;</p><p> (3) 按指定電路圖在PROTEL 99 中繪制原理圖和印制板圖;</p><p> (4) 按照給定要求創(chuàng)建原理圖器件和該器件的相應(yīng)的封裝(見PROTEL訓練任務(wù)部
4、分)。查找資料, 按資料創(chuàng)建原理圖中某一元件及其封裝形式;</p><p><b> 2、軟件設(shè)計部分</b></p><p> 按軟件設(shè)計要求實現(xiàn)相應(yīng)的功能(見軟件設(shè)計任務(wù)部分)</p><p> 三、按照要求撰寫總結(jié)報告</p><p><b> 成績評定表</b></p>
5、<p><b> 軟件設(shè)計部分</b></p><p><b> 一.題目分析</b></p><p> 利用隨機函數(shù)產(chǎn)生N個隨機整數(shù),對這些數(shù)進行多種方法進行排序。</p><p> 要求:至少采用三種方法實現(xiàn)上述問題求解(提示,可采用的方法有插入排序、希爾排序、起泡排序、快速排序、選擇排序、堆排序、
6、歸并排序)。并把排序后的結(jié)果保存在不同的文件中。</p><p> 統(tǒng)計每一種排序方法的性能(以上機運行程序所花費的時間為準進行對比),找出其中兩種較快的方法。</p><p> 二.設(shè)計過程(程序流程圖)</p><p> 1.定義一個結(jié)構(gòu)體類型的線性表,并將該線性表初始長度設(shè)置為0。</p><p> 2.構(gòu)造輸入隨機數(shù)并顯示在界
7、面上的函數(shù)和輸出排序之后的數(shù)據(jù)函數(shù),使排序前和排序后的結(jié)果能直觀顯示在屏幕上。</p><p> 3.主函數(shù)調(diào)用直接插入排序函數(shù),通過函數(shù)調(diào)用將隨機數(shù)進行排序。流程圖如圖11所示。</p><p><b> Y</b></p><p><b> N</b></p><p><b>
8、 Y</b></p><p><b> N</b></p><p><b> Y</b></p><p> N </p><p> Y </p><p> 圖11 直接插入排序函數(shù)流程圖</p&
9、gt;<p> 主函數(shù)調(diào)用起泡排序函數(shù),通過函數(shù)調(diào)用將隨機數(shù)進行排序。流程圖如圖12所示。</p><p><b> N</b></p><p><b> Y</b></p><p><b> N</b></p><p><b> Y</
10、b></p><p><b> N</b></p><p><b> Y</b></p><p> N </p><p><b> Y</b></p>
11、<p> 圖12起泡排序函數(shù)流程圖</p><p> 主函數(shù)調(diào)用選擇排序函數(shù),通過函數(shù)調(diào)用將隨機數(shù)進行排序。流程圖如圖13所示。</p><p><b> N</b></p><p><b> Y</b></p><p><b> Y</b></p
12、><p><b> Y</b></p><p><b> N</b></p><p><b> Y</b></p><p><b> N</b></p><p><b> Y</b></p>
13、<p> 圖13 選擇排序函數(shù)流程圖</p><p><b> 調(diào)試過程及結(jié)果</b></p><p> 1.開始時程序有許多錯誤,其中不乏一些低級錯誤,經(jīng)過改正后錯誤明顯減少,有幾個錯誤花費了大量時間去修改,經(jīng)過查資料,與同學探討,最終程序正確。</p><p><b> 圖14 開始界面</b>&l
14、t;/p><p> 圖15產(chǎn)生的隨機數(shù) </p><p> 圖16 直接插入排序的時間</p><p> 圖17 起泡排序的時間</p><p> 圖18 選擇排序的時間</p><p> 2.本程序使用了switch語句,break語句,for循環(huán)等語句。使用了函數(shù)調(diào)用,宏定義,結(jié)構(gòu)體,和typedefin
15、e聲明新類型。</p><p><b> 四.結(jié)論</b></p><p> 這次的課設(shè)讓我學會了用不同排序方法通過其排序時間來比較其優(yōu)良與否。通過先繪制流程圖使我在編程時變得得心應(yīng)手,并且能很好的理解程序。在編程時要注意一些細節(jié),犯一點錯就會使程序出錯,這將造成很大的麻煩。編程時注意一些細節(jié)會讓我們事半功倍。</p><p><b&
16、gt; 五、參考文獻</b></p><p> 1 吳元斌.C語言程序設(shè)計簡明教程,[M]北京理工大學出版社 2011</p><p> 2 嚴蔚敏.吳偉民. 《數(shù)據(jù)結(jié)構(gòu)(C語言版) 》,[M]北京: 清華大學出版社,2009</p><p> 3 陳銳, 陳亞民.C語言入門與提高,[M]北京希望電子出版社 2011</p><
17、;p> 4 羅朝盛.C語言程序設(shè)計.第2版,[M]科學出版社 2012</p><p> 5 王洪海.C語言程序設(shè)計實驗指導,[M]人民郵電出版社 2011 </p><p><b> 六.程序清單</b></p><p> #include "stdio.h"</p><p> #i
18、nclude "stdlib.h"</p><p> #include "time.h"//計時</p><p> #define ERROR 0</p><p> #define OK 1</p><p> #define OVERFLOW -2</p><p> #
19、define MAXSIZE 99999 //用戶自己規(guī)定排序的數(shù)字的長度</p><p> typedef int sequenlist;</p><p> typedef struct</p><p><b> {</b></p><p> int *r; // r[0]閑置</p><
20、;p> int length; //順序表的總長度</p><p><b> }Sqlist;</b></p><p> //構(gòu)造一個空線性表</p><p> sequenlist InitSqlist(Sqlist &L)</p><p><b> {<
21、;/b></p><p> L.r=(int *)malloc(MAXSIZE*sizeof(int)); //分配存儲空間</p><p> if(!L.r) </p><p><b> {</b></p&
22、gt;<p> printf("存儲分配失敗!");</p><p><b> exit(0);</b></p><p> } //存儲分配失敗</p><p> L.length=0;//初始長度為0</p><p> return OK;</p><p&
23、gt;<b> }</b></p><p> //輸入隨機數(shù)并顯示在界面上</p><p> sequenlist ScanfSqlist(int &N,Sqlist &L)</p><p> { int i;</p><p> printf("請輸入要排序的元
24、素個數(shù)N: ");</p><p> scanf("%d",&N);</p><p> for(i=1;i<=N;i++)</p><p> L.r[i]=rand(); //隨機產(chǎn)生樣本整數(shù)</p><p> printf("\n");</p>
25、<p> printf(" 隨機產(chǎn)生了%d個隨機數(shù),它們是:\n",N);</p><p> for(i=1;i<=N;i++)</p><p><b> {</b></p><p> printf("%7.2d ",L.r[i]);</p><p&g
26、t;<b> }</b></p><p> printf("\n");</p><p> L.length=N; //存儲線性表的長度</p><p> return OK;</p><p><b> }</b></p><p> //下面為輸
27、出排序之后的數(shù)據(jù)函數(shù)</p><p> sequenlist PrintfSqlist(int N,Sqlist L)</p><p> { int i;</p><p> printf("數(shù)據(jù)個數(shù):");//輸出數(shù)據(jù)個數(shù)</p><p> printf("%d\n",L.lengt
28、h);</p><p> printf("排序后的數(shù)據(jù):(從左向右依次增大)\n");//輸出數(shù)據(jù)</p><p> for(i=1;i<=N;i++)</p><p> printf("%7.2d ",L.r[i]);</p><p> printf("\n");
29、</p><p> return OK;</p><p><b> }</b></p><p> //下面為直接插入排序函數(shù)</p><p> sequenlist InsertSort(Sqlist &L)</p><p><b> {</b>&l
30、t;/p><p><b> int i,j;</b></p><p> if(L.length==0)</p><p><b> {</b></p><p> printf("要排序的數(shù)據(jù)為空!");</p><p> return ERROR;&l
31、t;/p><p><b> }</b></p><p> for(i=2;i<=L.length;i++)</p><p><b> {</b></p><p> if(L.r[i]<L.r[i-1]) //將L.r[i]插入有序子表</p><
32、;p><b> {</b></p><p> L.r[0]=L.r[i]; //復(fù)制為監(jiān)視哨</p><p> L.r[i]=L.r[i-1]; </p><p> for(j=i-2;L.r[0]<L.r[j];j--)&
33、lt;/p><p><b> {</b></p><p> L.r[j+1]=L.r[j]; //記錄后移</p><p><b> }</b></p><p> L.r[j+1]=L.r[0]; //插入到正確位置</p><p><b>
34、}</b></p><p><b> }</b></p><p> return OK;</p><p><b> }</b></p><p> //下面為起泡排序函數(shù)</p><p> sequenlist BubbleSort(Sqlist &
35、;L)</p><p><b> {</b></p><p> int i,j,t;</p><p> if(L.length==0)</p><p><b> {</b></p><p> printf("要排序的數(shù)據(jù)為空!");<
36、;/p><p> return ERROR;</p><p><b> }</b></p><p> for(i=1;i<=L.length-1;i++)</p><p><b> {</b></p><p> for(j=1;j<=L
37、.length-i;j++)</p><p><b> {</b></p><p> if(L.r[j]>L.r[j+1]) //前面的數(shù)據(jù)>后面數(shù)據(jù)時</p><p><b> {</b></p><p> t=L.r[j+1];</p>
38、;<p> L.r[j+1]=L.r[j];</p><p> L.r[j]=t; //將元素交換</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p>
39、; return OK;</p><p><b> }</b></p><p> // 下面為選擇排序函數(shù)</p><p> sequenlist ChooseSort(Sqlist &L)</p><p><b> {</b></p><p>
40、 int i,j,k,t;</p><p> if(L.length==0)</p><p><b> {</b></p><p> printf("沒有數(shù)據(jù)!");</p><p> return ERROR;</p><p><b> }</b&g
41、t;</p><p> for(i=1;i<=L.length;i++) //排序的趟數(shù)</p><p><b> {</b></p><p><b> k=i;</b></p><p> for(j=i+1;j<=L.length;j++) //比較第i個元素以及其后的數(shù)據(jù)
42、中最小的 </p><p><b> {</b></p><p> if(L.r[j]<L.r[k])</p><p><b> k=j;</b></p><p><b> }</b></p><p> if(i!=j) //將最小數(shù)據(jù)
43、賦值給L.r[i]</p><p><b> {</b></p><p><b> t=L.r[i];</b></p><p> L.r[i]=L.r[k];</p><p><b> L.r[k]=t;</b></p><p><b>
44、; }</b></p><p><b> }</b></p><p> return OK;</p><p><b> }</b></p><p> //下面為主函數(shù)函數(shù)</p><p> void main()</p><p>
45、;<b> {</b></p><p><b> Sqlist L;</b></p><p> Sqlist L0;</p><p> InitSqlist(L); //初始化L</p><p> InitSqlist(L0); </p><p> int m,
46、i; </p><p> char choice='z';</p><p> clock_t start, finish; //定義clock_t用于計時</p><p> double duration; </p><p><b> //向L中輸入元素</b></
47、p><p> printf("\n \n");</p><p> printf(" \n");</p><
48、;p> printf(" 排序算法比較系統(tǒng) \n");</p><p> printf(" \n");</p><p> printf(" \n"
49、);</p><p> printf(" 以下是各個排序算法的代號:\n\n");</p><p> printf(" 1、直接插入排序 \n");</p><p> printf(" 2、起泡排序 \n");</p><p&
50、gt; printf(" 3、選擇排序\n");</p><p> printf(" 4、退出該系統(tǒng)\n\n");</p><p> ScanfSqlist(m,L0);</p><p> printf("\n");</p><p> print
51、f(" 1、直接插入排序 \n");</p><p> printf(" 2、起泡排序 \n");</p><p> printf(" 3、選擇排序\n");</p><p> printf(" 4、退出該系統(tǒng)\n\
52、n");</p><p> printf("\n請選擇排序的方式,數(shù)字1-4: ");</p><p> scanf("%d",&choice); //選擇排序方式賦值choice,用于后面的函數(shù)選擇</p><p> while(choice<1||choice>4)</p>
53、;<p><b> {</b></p><p> printf("輸入方式有誤。\n請輸入1-3選擇排序方式,或者選擇4退出系統(tǒng)");</p><p> scanf("%d",&choice);</p><p><b> }</b></p>
54、<p> while(choice!=4)</p><p><b> {</b></p><p> for(i=1;i<=L0.length;i++)</p><p> L.r[i]=L0.r[i];</p><p> L.length=L0.length;</p><p&
55、gt; switch(choice)</p><p><b> {</b></p><p> case 1://直接插入排序</p><p> start = clock(); InsertSort(L);finish = clock();</p><p><b> break;</b>
56、</p><p> case 2://起泡排序</p><p> start = clock();BubbleSort(L);finish = clock(); </p><p><b> break;</b></p><p> case 3://選擇排序</p><p> start
57、= clock();ChooseSort(L);finish = clock(); </p><p><b> break;</b></p><p> case 4://直接退出</p><p><b> break;</b></p><p><b> }</b><
58、;/p><p> PrintfSqlist(m,L); //輸出數(shù)據(jù)和L的長度</p><p> duration = (double)(finish - start) / CLOCKS_PER_SEC; //輸出算術(shù)時間</p><p> printf("\n本次排序運算所用的時間是:%lf seconds\n",duration);&
59、lt;/p><p> printf(" 本次排序結(jié)束。\n");</p><p> printf(" \n");</p><p> printf(" 繼續(xù)本系統(tǒng)嗎?\n\n");</p><p> printf("
60、 以下是各個排序算法的代號:\n");</p><p> printf(" 1、直接插入排序\n");</p><p> printf(" 2、起泡排序\n");</p><p> printf(" 3、選擇排序\n");</p><
61、p> printf(" 4、退出該系統(tǒng)\n");</p><p> printf("\n請請輸入1-3選擇排序方式,或者選擇4退出系統(tǒng):");</p><p> scanf("%d",&choice);</p><p> while(choice<1||choice
62、>4)</p><p><b> {</b></p><p> printf("輸入方式有誤。\n請輸入1-3選擇排序方式,或者選擇4退出系統(tǒng)");</p><p> scanf("%d",&choice);</p><p><b> }</b
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 內(nèi)部排序課程設(shè)計---內(nèi)部排序算法的比較
- 課程設(shè)計報告----內(nèi)排序算法比較
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---排序算法比較
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--排序算法比較
- 課程設(shè)計報告---排序算法的實現(xiàn)與比較
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--內(nèi)部排序算法的比較
- 課程設(shè)計---設(shè)計排序典型算法(冒泡與快速排序)
- 《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計報告---排序算法的實現(xiàn)與比較
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--排序算法
- 課程設(shè)計---多種排序的實現(xiàn)與比較
- 拓撲排序課程設(shè)計--拓撲排序算法的研究與實現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--排序算法演示系統(tǒng)
- 排序算法設(shè)計和比較
- 數(shù)據(jù)排序課程設(shè)計
- 拓撲排序課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---排序算法的實現(xiàn)
- 拓撲排序(算法與數(shù)據(jù)結(jié)構(gòu)課程設(shè)計)
- 排序算法比較
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計----內(nèi)部排序算法性能分析
- 大數(shù)據(jù)結(jié)構(gòu)課程設(shè)計排序算法演示系統(tǒng)
評論
0/150
提交評論