



版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、一元數組運算器實驗報告 數組運算器實驗報告 實驗目的 實現一個數組運算器 實驗要求 一維數組的定義和使用 循環結構和分支結構 函數的定義和調用 數據處理技術(排序、插入、刪除、查找、統計、逆置、左旋、右旋) 數組作為實現算法的輔助工具(篩選法求素數、約瑟夫環) 實驗思路 1. 定義一維數組 首先配置數組大小,再填充數據。 時間復雜度:o(n) 2. 顯示一維數組 輸出數組每一個元素。 時間復雜度:o(n) 3. 數據處理 調用排序函數、插入函數、刪除函數、查找函數、統計函數、逆置函數、 左旋函數、右旋函數對數據進行操作。 時間復雜度:o(n) 4. 數組輔助工具 調用篩選法求素數函數、約瑟夫環
2、函數實現算法。 時間復雜度:o(n) 函數清單 void p() /主菜單 void p1() /配置數組大小 void p2() /生成樣本數據菜單 void p21() /隨機數填充數據 void p22() /鍵入填充數據 void p23() /填充同一數據 void p24() /填充等差序列數據 void p3() /顯示數組 void p4() /刪除菜單 void p41(int k) /刪除指定下標的元素 void p42(int k) /刪除指定值的元素 調用 p41 void p43() /刪除按指定下標區間的一組元素 void p5() /插入菜單 void p51()
3、 /按指定下標位置插入新元素 void p52sx() /在升序數組中插入新元素 void p52jx() /在降序數組中插入新元素 void p6() /統計菜單 void p61() /求最大值 void p62() /求最小值 void p63() /求平均值 void p64() /求方差和均方差 void p7() /查找菜單 void p71(int k) /普通查找 void p72(int k) /二分查找(首先保證有序) void p8() /判斷菜單 void p81() /是否升序排列 void p82() /是否降序排列 void p83() /是否全部相等 void
4、p9() /排列菜單 void p91() /排序菜單 void p911() /冒泡法(降序) void p912() /選擇法(升序) void p913() /交換法(降序) void p92(int a,int a,int b) /逆置數組 void p93(int a,int top,int k) /左旋數組 調用 p92 void p94(int a,int top,int k) /右旋數組 調用 p93 void p10() /其他菜單 void p101() /約瑟夫環 void p102() /篩選法求素數 測試數據 具體效果由測試者體驗,例如下圖: 調試分析 調試時編寫一個
5、函數對其 debug,減輕了后期調試壓力。 實驗心得 對一維數組的應用更加熟練;能加快編程速度和效率;能編寫和調試更長的程序。 源程序清單 #includestdlib.h #includestdio.h #includemath.h #includetime.h int a10000,top,i; #define for for(i=0;itop;i+) void p() printf(-*主菜單*-n); printf(0、退出n); printf(1、配置系統參數n); printf(2、生成樣本數據n); printf(3、顯示數組n); printf(4、刪除n); printf(5
6、、插入n); printf(6、統計n); printf(7、查找n); printf(8、判斷n); printf(9、排列數組元素n); printf(10、數組的其他應用n); printf(請選擇 0-10:); void p1() /配置系統參數 printf(請輸入數組大小:); scanf(%d,top); void p2() /生成樣本數據 printf(n1)用指定范圍的隨機數填充數組n); printf(2)鍵盤輸入n); printf(3)整個數組填同一個值n); printf(4)用等差序列填充數組(輸入首項和公差)n); printf(請選擇 1-4:); void
7、p21() int a,b; printf(請輸入隨機數的下限和上限:); scanf(%d%d,a,b); srand(unsigned int)time(null); for ai=rand()%(b-a)+a; void p22() printf(請輸入%d 個數填充數組:,top); for scanf(%d,ai); void p23() int k; printf(請輸入想填充的數據:); scanf(%d,k); for ai=k; void p24() int a,d; printf(請輸入首項和公差:); scanf(%d%d,a,d); a0=a; for(i=1;itop
8、;i+) ai=ai-1+d; void p3() / 顯示數組 for printf(%-6d,ai); printf(n); void p4() / 刪除 printf(n1)刪除指定下標的元素n); printf(2)刪除指定值的元素n); printf(3)刪除按指定下標區間的一組元素n); printf(請選擇 1-3:); void p41(int k) for(i=k;itop;i+) ai=ai+1; void p42(int k) for if(ai=k) p41(i); void p43(int a,int b) for(i=a;ib+1;i+) ai=ai+b-a+1;
9、void p5() / 插入 printf(n1)按指定下標位置插入新元素n); printf(2)在有序數組中插入新元素n); printf(請選擇 1-2:); void p51() int j,k; printf(請輸入插入位置下標和插入值:); scanf(%d%d,j,k); top+; for(i=top-1;ij;i-) ai=ai-1; aj=k; void p52sx() int k,j; printf(請輸入插入值:); scanf(%d,k); if(ka0) top+; for(i=top-1;i0;i-) ai=ai-1; a0=k; else if(katop-1)
10、 top+; atop-1=k; else for if(ai=k)(ai+1k) top+; for(j=top-1;ji+1;j-) aj=aj-1; ai+1=k; void p52jx() int k,j; printf(請輸入一個數,代表要插入的數:); scanf(%d,k); if(ka0) top+; for(i=top-1;i0;i-) ai=ai-1; a0=k; else if(katop-1) top+; atop-1=k; else for if(ai=k)(ai+1k) top+; for(j=top-1;ji+1;j-) aj=aj-1; ai+1=k; void
11、 p6() /統計 printf(n1)求最大值n); printf(2)求最小值n); printf(3)求平均值n); printf(4)求方差和均方差n); printf(請選擇 1-4:); void p61() int k=0; for if(aiak) k=i; printf(最大值=%dn,ak); void p62() int k=0; for if(aiak) k=i; printf(最小值=%dn,ak); void p63() double s=0; for s+=ai; printf(平均值=%lfn,s/top); void p64() double v,f,t,s1
12、=0,s2=0; for s1+=ai;s2+=ai*ai; v=s1/top; f=s2/top-v*v; t=sqrt(f); printf(方差=%lfn 均方差=%lfn,f,t); void p7() /查找 printf(n1)普通查找n); printf(2)二分查找(首先保證有序)n); printf(請選擇 1-2:); void p71(int k) int flag=0; for if(ai=k) flag=1; if(flag=1) for if(ai=k) printf(找到元素%d,下標為%d ,即a%d=%dn ,k,i,i,k); else printf(未找到
13、元素%dn,k); void p72(int k) int l=0,h=top-1,m; while(l=h) m=(l+h)/2; if(kam) l=m+1; else if(kam) h=m-1; else break; if(l=h) printf(找到此元素,下標為 %d,即 a%d=%d n,m,m,k); else printf(未找到此元素n); void p8() /判斷 printf(n1)是否升序排列n); printf(2)是否降序排列n); printf(3)是否全部相等n); printf(請選擇 1-3:); void p81() int flag=0; for(
14、i=1;itop;i+) if(aiai-1) flag=1; if(flag=0) printf(是n); else printf(否n); void p82() int flag=0; for(i=1;itop;i+) if(aiai-1) flag=1; if(flag=0) printf(是n); else printf(否n); void p83() int flag=0; for(i=1;itop;i+) if(ai!=ai-1) flag=1; if(flag=0) printf(是n); else printf(否n); void p9() /排列數組元素 printf(n1)
15、排序n); printf(2)逆置數組n); printf(3)左旋數組n); printf(4)右旋數組n); printf(請選擇 1-4:); void p91() printf(n1. 冒泡法(降序) 2. 選擇法(升序) 3. 交 換 法 ( 降序)n); printf(請選擇 1-3:); void p911() int j,t; for(i=0;itop-1;i+) for(j=0;jtop-i-1;j+) if(ajaj+1) t=aj; aj=aj+1; aj+1=t; void p912() int j,k,t; for(i=0;itop-1;i+) k=i; for(j=
16、i+1;jtop;j+) if(akaj) k=j; if(k!=i) t=ak; ak=ai; ai=t; void p913() int t,j; for(i=0;itop-1;i+) for(j=i+1;jtop;j+) if(aiaj) t=ai; ai=aj; aj=t; void p92(int a,int a,int b) int t,j; for(i=a,j=b;ij;i+,j-) t=ai; ai=aj; aj=t; void p93(int a,int top,int k) p92(a,0,k-1); p92(a,k,top-1); p92(a,0,top-1); void
17、 p94(int a,int top,int k) p93(a,top,top-k); void p10() printf(n1)約瑟夫環n); printf(2)篩選法求素數n); printf(請選擇 1-2:); void p101() int n,m,k,pos,man10000; for(i=0;in+1;i+) mani=0; i=k=0; printf(總人數和報數間隔:n); scanf(%d%d,n,m); for(pos=0;kn;pos=(pos+1)%n) if(manpos=0) i+; if(i=m) i=0; k+; manpos=k; printf(約瑟夫環:n
18、); for(pos=0;posn;pos+) printf(%-6d%c,manpos,(pos+1)%10=0)?"n":" "); printf(n); void p102() int j,n;char line10000; printf(求 1-指定數之間的素數n); printf(輸入一個數:); scanf(%d,n); for(i=0;i=n;i+) linei=1; for(i=2;i=n;i+) if(linei) printf(%-6d,i); for(j=i+1;j=n;j+) if(j%i=0) linej=0; printf(n
19、); main() int zhu,fu,k,a,b; while(1) p(); scanf(%d,zhu); if(zhu=0) return 0; if(zhu=1) p1(); if(zhu=2) p2(); scanf(%d,fu); switch(fu) case 1: p21();break; case 2: p22();break; case 3: p23();break; case 4: p24();break; if(zhu=3) p3(); if(zhu=4) p4(); scanf(%d,fu); switch(fu) case 1: printf(請輸入想刪除的元素對
20、應下標:); scanf(%d,k); p41(k);top-; break; case 2: printf(請輸入想刪除的元素:); scanf(%d,k); p42(k);top-; break; case 3: printf(請輸入刪除的區間:); scanf(%d%d,a,b); p43(a,b);top=top-(b-a)-1; break; if(zhu=5) p5(); scanf(%d,fu); switch(fu) case 1: p51();break; case 2: if(a0=atop-1) p52sx(); else p52jx(); break; if(zhu=6) p6(); scanf(%d,fu); switch(fu) case 1: p61();break; case 2: p62();break; c
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030中國便攜式頭燈行業市場發展趨勢與前景展望戰略研究報告
- 2025-2030中國互聯汽車出行解決方案行業市場發展趨勢與前景展望戰略研究報告
- 中樞性疼痛的護理課件
- 2025-2030中國A級防火外墻保溫材料行業市場現狀分析及競爭格局與投資發展研究報告
- 離子通道病護理課件
- 顱底惡性腫瘤護理措施
- 多發性小腦挫裂傷查房
- 防食堂改造項目方案
- 汽車電子維修方案簡單
- 建筑外墻檢修方案
- 教師進企業實踐三方協議書
- 施工現場隱患圖片識別合集
- 山西省建設工程計價依據
- 煤礦在用安全設備檢測檢驗制度
- GB/T 24632.2-2009產品幾何技術規范(GPS)圓度第2部分:規范操作集
- GB/T 20428-2006巖石平板
- GB/T 11363-1989釬焊接頭強度試驗方法
- 內調焦準距式望遠系統光學設計2022年
- 核磁共振的發展史課件
- 切紙機安全操作規程標準范本
- 國家開放大學2022秋法理學形考1-4參考答案
評論
0/150
提交評論