版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、上機(jī)考試復(fù)習(xí)題1212 34 38 20 82 1730 18 25 13 56 2145 39 15 24 19 3211 76 40 41 64 431. 定義一個(gè)二維數(shù)組a并用下列數(shù)據(jù)初始化。編寫一個(gè)直接插入排序函數(shù)void insert(int x, int n)對(duì)每一行元素排序。并對(duì)每行元素最大值進(jìn)行排序。要求:在main函數(shù)中輸出原數(shù)組、排序后的數(shù)組、及排序后的最大值。(提示:把每行最大值存到一個(gè)一維數(shù)組max中)/利用同一個(gè)函數(shù)對(duì)二維數(shù)組的每行及最大值數(shù)組進(jìn)行排序#include<iostream.h>void insert(int x, int n);/形參為一維數(shù)
2、組,因只處理一維數(shù)組,故只需傳遞列數(shù)(每行元素的個(gè)數(shù))void main() int a46=12,34,38,20,82,17,30,18,25,13,56,21,45,39,15,24,19,32,11,76,40,41,64,43; int i, j, max4; for(i=0; i<4; i+) for(j=0; j<6; j+) cout<<aij<<" " cout<<endl; cout<<endl; for(i=0; i<4; i+)/調(diào)用排序函數(shù), 每次調(diào)用傳遞一行, 實(shí)參ai是行元素,
3、第i行的名字(地址), insert(ai, 6);/這種方法簡單、明確,但因循環(huán)調(diào)用效率不高。 maxi=ai5;/為數(shù)組max賦值 for(i=0; i<4; i+) for(j=0; j<6; j+) cout<<aij<<" " cout<<endl; cout<<endl;insert(max, 4); for(i=0; i<4; i+) cout<<maxi<<" " cout<<endl;void insert(int x, int n)/
4、一維數(shù)組的直接插入排序函數(shù) int i, j, k; for(i=1; i<n; i+) k=xi; j=i;/把待排序元素存入中間變量,設(shè)置插入指針j while(k<xj-1&&j>0) xj=xj-1;/后移 j-; xj=k;/插入 2. 定義一個(gè)二維數(shù)組a并用下列數(shù)據(jù)初始化。輸入一個(gè)數(shù),在數(shù)組中進(jìn)行順序查找,找到時(shí)輸出該數(shù)的下標(biāo),否則輸出“沒有找到”(用查找函數(shù)int seqsearch(int a6, int x, int &m, int &n)完成)。編寫一個(gè)直接選擇排序函數(shù)void select(int x, int m, in
5、t n)對(duì)每一行元素排序,輸出排序后的數(shù)組。12 34 38 20 82 1730 18 25 13 56 2145 39 15 24 19 3211 76 40 41 64 43/兩種傳遞二維數(shù)組的方式#include<iostream.h>int seqsearch(int a6, int x, int &m, int &n);/順序查找函數(shù),二維數(shù)組作形參,6不可省略!void select(int x, int m, int n);/直接選擇排序。一維數(shù)組作形參,因需處理二維數(shù)組,故要傳遞行列數(shù) m nvoid main() int a46= 12,34,3
6、8,20,82,17, 30,18,25,13,56,21, 45,39,15,24,19,32, 11,76,40,41,64,43, ; int i, j, x, m, n; for(i=0; i<4; i+) for(j=0; j<6; j+) cout<<aij<<" " cout<<endl; cout<<endl; cout<<"輸入需查找的數(shù):" cin>>x; if(seqsearch(a,x,m,n) cout<<"(i,j)=&q
7、uot;<<m<<", "<<n<<endl<<endl;/注意:形參是二維數(shù)組,須用數(shù)組名a作實(shí)參 else cout<<"沒有找到nn" select(a0, 4, 6);/調(diào)用排序函數(shù),降階處理:采用一維形式處理二維數(shù)組。(因此須用一維數(shù)組名a0作實(shí)參) /由于一次性傳遞整個(gè)數(shù)組,故效率高,是處理二維數(shù)組更為普遍的方式。要求對(duì)數(shù)組有較深入的了解。 for(i=0; i<4; i+) for(j=0; j<6; j+) cout<<aij<<&
8、quot; " cout<<endl; cout<<endl;void select(int x, int m, int n) int h, i, j, k, t; for(h=0; h<m; h+)/ h 為需處理的行數(shù)(把數(shù)組x看作一行一行一字排開一維數(shù)組) for(i=0; i<n-1; i+)/直接選擇排序算法,對(duì)一行(n個(gè)數(shù))排序 k=i;/設(shè)置交換指針k for(j=i+1; j<n; j+) if(xj<xk) k=j;/記錄最小值元素的下標(biāo) t=xi; xi= xk; xk=t; /與待排序元素xi交換x+=n;/降階處
9、理的要點(diǎn):由于數(shù)組名 x 是指針(變量),使它指向下一行。 int seqsearch(int a6, int x, int &m, int &n)/順序查找函數(shù)(挨個(gè)比較),找到返回1,否則返回0,下標(biāo)由引用返回 int i, j, ok=0; for(i=0; i<4&&!ok; i+)/雙重循環(huán)條件:找到一個(gè)即停止循環(huán),否則一直找到底for(j=0; j<6; j+) if(aij=x)ok=1; m=i; n=j;break;/找到!置ok為1,并記錄下標(biāo)。注意:函數(shù)中的m n 是主函數(shù)中m n 的引用(在不同函數(shù)中可以同名) return
10、ok;/如沒找到,ok保持為012 34 38 20 82 1730 18 25 13 56 2145 39 15 24 19 3211 76 40 41 64 433. 定義一個(gè)二維數(shù)組a并用下列數(shù)據(jù)初始化。編寫冒泡排序函數(shù) void bubble(int x, int n,float& av)對(duì)每一行元素排序,并計(jì)算每行元素的平均值。要求:在main函數(shù)中輸出原數(shù)組、按行輸出排序后的數(shù)組及平均值。(提示:把平均值存到一個(gè)一維數(shù)組aver中)#include<iostream.h>void bubble(int x, int n, float& av);void
11、main() int a46=12,34,38,20,82,17,30,18,25,13,56,21,45,39,15,24,19,32,11,76,40,41,64,43; int i, j; float aver4=0; for(i=0; i<4; i+) for(j=0; j<6; j+) cout<<aij<<" " cout<<endl; cout<<endl; for(i=0; i<4; i+) bubble(ai, 6, averi);/注意3個(gè)實(shí)參:ai,6 是數(shù)組名和長度,傳遞二維數(shù)組的一行
12、,/averi是數(shù)組元素(相當(dāng)于簡單變量),地址傳給引用形參av for(i=0; i<4; i+) for(j=0; j<6; j+) cout<<aij<<" " cout<<averi<<endl; cout<<endl;void bubble(int x, int n, float & av)/一維數(shù)組冒泡排序函數(shù) int i=0, j, k=1, t; while(k)/冒泡算法 k=0;/設(shè)置逆序標(biāo)志 k(同時(shí)也是循環(huán)條件,1 為有逆序,0 為無逆序) for(j=0; j<n
13、-1-i; j+) if(xj>xj+1)/出現(xiàn)逆序 k=1; t=xj; xj= xj+1; xj+1=t;/重置 k ,交換逆序數(shù)對(duì) i+; for(i=0; i<n; i+) av+=xi;/同時(shí)計(jì)算每行的平均值并由av回傳 av=av/n;4. 定義一個(gè)二維數(shù)組int a4=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16。定義函數(shù)int lsum(int x, int n, int &sum)返回每行元素之和并求所有元素之和,要求該函數(shù)中使用靜態(tài)局部變量s存儲(chǔ)二維數(shù)組總和。按行輸出數(shù)組及每行之和,最后輸出總和。定義數(shù)組void exch
14、(int x4, int n)其功能是轉(zhuǎn)置該數(shù)組并作如上操作。#include<iostream.h>#include<iomanip.h>int lsum(int x, int, int& );/求和函數(shù),返回每行之和。void exch(int x4, int);/轉(zhuǎn)置函數(shù)void main() int a4=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16; int i, j, sum; sum=0; for(i=0; i<4; i+)for(j=0; j<4; j+) cout<<setw(3)<
15、<aij;cout<<setw(7)<<lsum(ai, 4, sum);cout<<endl; cout<<"total: "<<sum<<endl<<endl; exch(a,4); sum=0;/這句必須嗎? for(i=0; i<4; i+)for(j=0; j<4; j+) cout<<setw(3)<<aij;cout<<setw(7)<<lsum(ai, 4, sum);cout<<endl; cou
16、t<<"total: "<<sum<<endl;int lsum(int x, int n, int &sum) int i, t=0; static s;/靜態(tài)變量記錄總和 if(!sum) s=0;/等價(jià)于sum=0,去掉這句行嗎? for(i=0; i<n; i+)t+=xi; s+=xi; sum=s;/ 總和由引用sum返回 return t;void exch(int x4, int n) int i,j,t; for(i=0; i<n; i+)for(j=i; j<n; j+) if(i=j) co
17、ntinue;else t=xij; xij=xji; xji=t;5. 編寫求組合的程序,在主函數(shù)中輸入任意兩個(gè)正整數(shù)n,m求其組合。要求:使用遞歸函數(shù)求階乘。#include<iostream.h>long fact(int x);void main() int c, m, n, t; cin>>m>>n; if(m<n) t=m; m=n; n=t; c=fact(m)/fact(n)/fact(m-n); cout<<"Comb("<<m<<","<<n&l
18、t;<")="<<c<<endl;long fact(int x) long f; if(x=0) f=1; else f=x*fact(x-1); return f;6. 定義一個(gè)整型數(shù)組a=11,27,19,23,15,27,19,11,13,13,13,17,并且定義一個(gè)函數(shù),int del(int x,int &m),該函數(shù)的功能為刪除數(shù)組中所有重復(fù)的元素,并返回所刪除元素的個(gè)數(shù)。要求:輸出原數(shù)組,和刪除后的數(shù)組,分別用一行四位寬度輸出,并輸出所刪除元素的個(gè)數(shù)c。#include<iostream.h>#includ
19、e<iomanip.h>int del(int x, int &m);void main() int a=11,27,19,23,15,27,19,11,13,13,13,17; int i,n=12,c=0; for(i=0; i<n; i+) cout<<setw(4)<<ai; cout<<endl; c=del(a,n); cout<<c<<" elements deleted.nn" for(i=0; i<n; i+) cout<<setw(4)<<
20、ai; cout<<endl;int del(int x, int &m)/刪除相同元素函數(shù),返回刪除個(gè)數(shù),由于有元素的刪除,所以數(shù)組長度 m 要相應(yīng)改變,并回傳 int i, j, k, c=0;/算法:用xi與后面的元素逐個(gè)比較xj,有相同元素,則由 j 開始將后面的元素逐個(gè)前移(刪除xj) for(i=0; i<m-1; i+) for(j=i+1; j<m; j+) if(xi=xj) cout<<xj<<endl;/顯示刪除的元素 for(k=j; k<m; k+) xk=xk+1;/數(shù)組長m度減1,比較指針j減1(因?yàn)檠?/p>
21、環(huán)語句中j+)使之指在原處,計(jì)數(shù)器c加1 m-; j-; c+; return c;7. 在一個(gè)有序整型數(shù)組2,4,6,8,10,12,14,16,18中,輸入一個(gè)數(shù)k,如果是奇數(shù),則插入,插入后數(shù)組仍保持有序。編寫二分查找函數(shù)int bisearch(int a, int n, int b)返回一個(gè)任意輸入整數(shù)a的下標(biāo)。要求輸出原數(shù)組,插入后的數(shù)組,分別用一行四位寬度輸出。并輸出所查找數(shù)的下標(biāo),若沒找到則輸出“該數(shù)不存在”。#include<iostream.h>#include<iomanip.h>int bisearch(int a, int n, int b);
22、void main() int x20=2,4,6,8,10,12,14,16,18;/因?yàn)橐迦霐?shù)據(jù),數(shù)組定義要比實(shí)際數(shù)據(jù)大 int n=9, i, j, k, a; for(i=0; i<n; i+) cout<<setw(4)<<xi; cout<<endl; do cout<<"請(qǐng)輸入一個(gè)數(shù): " cin>>k; while(k%2=0); i=n; while(k<xi-1 && i>0)/插入方法:k 從最后一個(gè)數(shù)開始比較,小則把數(shù)組元素后移 xi=xi-1; i-;/
23、i為插入指針(下標(biāo)) xi=k; n+;/插入,不要忘記數(shù)組長度增加! for(i=0; i<n; i+) cout<<setw(4)<<xi; cout<<endl; cout<<"輸入待查找的整數(shù):" cin>>a; if(j=bisearch(x, n, a)>=0) cout<<"該數(shù)下標(biāo)為: "<<j<<endl; else cout<<"該數(shù)不存在!"<<endl;int bisearch(i
24、nt a, int n, int b)/二分查找函數(shù):要求待查序列必須是排序好的! int l=0, h=n-1, m; while(l<=h)/循環(huán)條件:低邊界小于等于高邊界 m=(l+h)/2;/二分 if(am=b) break; else if(b<am) h=m-1;/待查數(shù)據(jù)在低區(qū),左移高邊界 else l=m+1;/待查數(shù)據(jù)在高區(qū),右移低邊界 if(l>h) return -1;/沒找到,返回-1(不存在的下標(biāo)) else return m;/找到,返回該數(shù)下標(biāo)8. 在主函數(shù)中定義一個(gè)字符串“We are learning C+ language. C+ is
25、useful.”并顯示。輸入一個(gè)字符串(如“Fortran 95”)替換句中的“C+”。定義函數(shù) void exch(char*)將其倒序。輸出替換及倒序后的字符串。要求:使用指針操作完成倒序運(yùn)算。/字符串的操作練習(xí),并熟悉常用字符串函數(shù)的用法#include<iostream.h>#include<string.h>void exch( char *);void main() char s080="We are learning C+ language. C+ is useful." char st80, s120, *sp; int n, i;
26、cout<<s0<<endl; cout<<"輸入一個(gè)字符串: " cin.getline(s1,20);/輸入字符串的方式(可含空格) n=strlen(s1);/測定輸入字符串的長度(字符數(shù)) for(i=0,sp=s0; *sp; i+,sp+)/工作指針sp指向初始字符串 s0 逐個(gè)字符查找 "C+"(子字符串) if(strncmp(sp, "C+", 3)=0)/找到,(sp所指字串前3個(gè)字符為"C+") strcpy(st,sp+3);/把"C+"
27、;后面的內(nèi)容復(fù)制到數(shù)組 st (保護(hù)起來) strcpy(sp,s1);/用輸入的字符串 s1 替換 "C+" 及其以后的內(nèi)容,sp也可寫為s0+i sp+=n-1; i+=n-1; /把指針以及下標(biāo)值置于替換后字符串尾部 strcat(sp,st);/把保存在 st 中原字符串的其余部分再復(fù)制回來,完成一次替換。繼續(xù)如上過程替換后面的"C+" cout<<s0<<endl; exch(s0); cout<<s0<<endl;void exch(char* str)/倒序函數(shù) char *p, *q, c;
28、 p=str; q=p+strlen(str)-1;/工作指針 p 指向字符串 str 首字符,q 指向尾字符 while(p<q) c=*p; *p=*q; *q=c; p+; q-; 9. 定義一個(gè)字符串常量,并判斷該字符串是否為“回文”。要求:定義一個(gè)順序棧char st,編寫入棧、出棧函數(shù)(void push(char *st,char c, int &top),char pop(char *st, int &top),利用棧結(jié)構(gòu)的性質(zhì)完成該判斷。/堆棧:一種數(shù)據(jù)結(jié)構(gòu),規(guī)定只能在一端進(jìn)行插入和刪除數(shù)據(jù)(類似子彈夾),最后入棧的元素最先出棧#include<i
29、ostream.h>void push(char *st, char c, int &top);char pop(char *st, int &top);void main() char *p="madam", *q=p, s20; int t=-1;/設(shè)置空棧指針(數(shù)組下標(biāo)) while(*q)/把指針 q 所指字符逐個(gè)壓入堆棧 s 中 push(s, *q, t); q+; q=p;/重要!重置指針 q cout<<q; while(t>=0 && *q=pop(s,t) q+;/正向 *q,逆向 pop(s,t) 逐個(gè)字符比較字符串,若完全相同(至 t<0 )則為回文 if(t<0) cout<<" 是回文!n" else cout<<" 不是回文!n"void push(char *st, char c, int &top)/入棧函數(shù) top+;/棧頂指針(棧頂元素的下標(biāo))上移 sttop=c;/將字符 c 壓入棧中(入棧一個(gè)元素)char pop(char *st, int &top)/出棧函數(shù),返回棧頂元素 char c=stt
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度消防設(shè)備全面維護(hù)保養(yǎng)與應(yīng)急響應(yīng)合同
- 二零二五年度太陽能電池板生產(chǎn)知識(shí)產(chǎn)權(quán)保護(hù)合同
- 2025年度摩托車行業(yè)展會(huì)舉辦及贊助合同
- 二零二五年度民房租賃租賃期限及租金調(diào)整合同
- 二零二五年度智能交通系統(tǒng)建設(shè)投標(biāo)擔(dān)保證明合同
- 2025年度民爆器材進(jìn)出口貿(mào)易合同3篇
- 二零二五年度農(nóng)業(yè)用地租賃合同
- 2025年度品牌行業(yè)展會(huì)參展合同3篇
- 二零二五年度企業(yè)銷售技巧培訓(xùn)合同7篇
- 2025年度豪華摩托車整車銷售及售后服務(wù)合同范本3篇
- 射頻在疼痛治療中的應(yīng)用
- 和平精英電競賽事
- 四年級(jí)數(shù)學(xué)豎式計(jì)算100道文檔
- “新零售”模式下生鮮電商的營銷策略研究-以盒馬鮮生為例
- 項(xiàng)痹病辨證施護(hù)
- 職業(yè)安全健康工作總結(jié)(2篇)
- 懷化市數(shù)字經(jīng)濟(jì)產(chǎn)業(yè)發(fā)展概況及未來投資可行性研究報(bào)告
- 07FD02 防空地下室電氣設(shè)備安裝
- 教師高中化學(xué)大單元教學(xué)培訓(xùn)心得體會(huì)
- 彈簧分離問題經(jīng)典題目
- 部編版高中歷史中外歷史綱要(下)世界史導(dǎo)言課課件
評(píng)論
0/150
提交評(píng)論