版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、實(shí)驗(yàn)四 數(shù) 組實(shí)驗(yàn)課程名:c語言程序設(shè)計(jì)專業(yè)班級(jí): 14電氣工程2班 學(xué)號(hào): 201440210237 姓名: 熊帆 實(shí)驗(yàn)時(shí)間: 5.12-5.26 實(shí)驗(yàn)地點(diǎn): k4-208 指導(dǎo)教師: 祁文青 一、實(shí)驗(yàn)?zāi)康暮鸵?. 掌握一維數(shù)組和二維數(shù)組的定義、賦值和輸入輸出的方法;2. 掌握字符數(shù)組和字符串函數(shù)的使用;3. 掌握與數(shù)組有關(guān)的算法(特別是排序算法)。二、實(shí)驗(yàn)內(nèi)容1. 調(diào)試下列程序,使之具有如下功能:輸入10個(gè)整數(shù),按每行3個(gè)數(shù)輸出這些整數(shù),最后輸出10個(gè)整數(shù)的平均值。寫出調(diào)試過程。#include #define n 10void main( ) int i,an,av;for(i=0;i
2、n;i+) scanf(%d,ai);for(i=0;in;i+) printf(%d,ai); if(i%3=0) printf(n);for(i=0;i!=n;i+)av+=ai;printf(av=%fn,av);解答:(1) 源代碼: #include#define n 10void main()int i,an;float av=0;for(i=0;in;i+)scanf(%d,&ai); printf(n);for(i=0;in;i+)printf(%3d,ai);if(i+1)%3=0)printf(n);for(i=0;i!=n;i+)av+=ai;printf(n);av=a
3、v/n;printf(n);printf(av=%fn,av);(2)運(yùn)行結(jié)果: (3) 運(yùn)行結(jié)果分析:原程序中有若干處錯(cuò)誤,分別為av這個(gè)變量應(yīng)該定義為float型,scanf語句中輸入數(shù)組的時(shí)候,在它前面應(yīng)該加上地址符&。第一個(gè)if語句if(i%3=0),應(yīng)該改成if(i+1)%3=0),因?yàn)橐獙?shí)現(xiàn)一行三個(gè)地輸出,實(shí)際i=0對(duì)應(yīng)的才是數(shù)組中的第一個(gè)元素。再者,在程序的適當(dāng)位置加上輸出換行語句可使得程序1執(zhí)行頁面更美觀。 調(diào)試的過程大體可分為三大塊,第一塊為從第7行到第9行,功能為輸入10個(gè)值。第二 塊為從第10到第15行,功能為一行三個(gè)地輸出那10個(gè)值。第三塊為最后一個(gè)for語句, 功能為
4、將那10個(gè)值進(jìn)行累加。 2. 下面程序是輸入5個(gè)數(shù)據(jù),然后求它們的和并輸出結(jié)果。#include void main( )int i, a5, sum = 0; scanf(%d,%d,%d,%d,%d, a ); for (i = 0; i = 4; i +) sum += ai; printf(sum = %d n, sum);該程序中有哪些錯(cuò)誤?如何修改?寫出正確運(yùn)行后的結(jié)果。解答:(1) 源代碼:#includevoid main()int i,a5,sum=0;for(i=0;i=4;i+)scanf(%d,&ai);for(i=0;i=4;i+)sum+=ai;printf(sum
5、=%dn,sum);(2) 運(yùn)行結(jié)果: (3) 運(yùn)行結(jié)果分析:原程序中的scanf語句是錯(cuò)的,應(yīng)該采用for語句循環(huán)輸入,還要把a(bǔ)換成ai,并在前面加上地址符&。驗(yàn)證程序的時(shí)候輸入了這樣五個(gè)值:54 24 33 12 8。然后運(yùn)行程序,發(fā)現(xiàn)輸出結(jié)果和預(yù)期一致。3. 有一個(gè)3行4列的距陣,現(xiàn)要求編程求出其中最大的那個(gè)元素的值,以及它所在的行號(hào)與列號(hào)。下面程序的初始說明和輸出語句如下所示,請(qǐng)補(bǔ)充完成該程序。#include void main( )int i, j, row, colum, max;static int a34 = 1,2,3,4, 9,8,7,6, -10,10,-5,2; pr
6、intf( max = %d, row = %d, colum = %d n, max, row, colum);解答:(1) 源代碼:#includevoid main()int i,j,row,colum,max;static int a34 = 1,2,3,4, 9,8,7,6, -10,10,-5,2; max=a00;for(i=0;i3;i+)for(j=0;j4;j+)if(maxaij)max=aij;row=i+1; colum=j+1;printf(max=%d,row=%d,colum=%dn,max,row,colum);(2) 運(yùn)行結(jié)果: (3) 運(yùn)行結(jié)果分析:應(yīng)該對(duì)
7、原本不完整的程序作這樣的補(bǔ)充,加上兩個(gè)for循環(huán)語句,以實(shí)現(xiàn)找出數(shù)組中最大的元素。并用row和column分別儲(chǔ)存行標(biāo)和列標(biāo),但要注意+1。4. 數(shù)組中已存互不相同的10個(gè)整數(shù),從鍵盤輸入一個(gè)整數(shù),輸出與該值相同的數(shù)組元素下標(biāo)。解答:(1) 源代碼: #includevoid main() int i,x,a10=1,2,3,4,5,6,7,8,9,10; scanf(%d,&x); for(i=0;i10;i+) printf(%4d,ai); printf(n); for(i=0;i10;i+) if(x=ai) break; if(i10) printf(該元素的下標(biāo)為%dn,i); e
8、lse printf(該數(shù)組中沒有 %dn,x);(2) 運(yùn)行結(jié)果: (3) 運(yùn)行結(jié)果分析:數(shù)組中已存互不相同的10個(gè)整數(shù):1,2,3,4,5,6,7,8,9,10。驗(yàn)證程序的時(shí)候分別輸入了7和19,并且正確地輸出了下標(biāo)或輸出結(jié)果。如上面兩張圖所示。5. 編寫程序,任意輸入10個(gè)整數(shù)的數(shù)列,先將整數(shù)按照從大到小的順序進(jìn)行排序,然后輸入一個(gè)整數(shù)插入到數(shù)列中,使數(shù)列保持從大到小的順序。解答:(1) 源代碼:#includevoid main()int a11,i,j,x,temp;printf(請(qǐng)輸入10個(gè)整數(shù):n);for(i=0;i10;i+)scanf(%d,&ai);for(j=0;j9;
9、j+)for(i=0;i9-j;i+)if(aiai+1)/排序,交換temp=ai+1;ai+1=ai;ai=temp;for(i=0;i10;i+)printf(%d ,ai);printf(n);printf(請(qǐng)?jiān)佥斎胍粋€(gè)整數(shù):);scanf(%d,&x);for(i=0,j=0;i=x&x=ai+1)j=i;break;elsecontinue;for(i=0;ij+1;i+)printf(%d ,ai);/輸出插入點(diǎn)前的數(shù)字temp=aj+1; aj+1=x;printf(%d ,aj+1);/輸出插入點(diǎn)的數(shù)字aj+1=temp;for(i=0;i9-j;i+)/移位交換a10-i=
10、a9-i;for(i=0;i9-j;i+)printf(%d ,ai+j+2);/輸出插入點(diǎn)后的數(shù)字printf(n);(2)運(yùn)行結(jié)果: (3)運(yùn)行結(jié)果分析:運(yùn)行程序時(shí)輸入了這樣10個(gè)整數(shù):6 11 9 15 68 23 2 32 50 28。經(jīng)過程序中排序部分的作用,將10個(gè)整數(shù)按從大到小的順序排序?yàn)椋?8 50 32 28 23 15 11 9 6 2。和預(yù)期是一致的,再輸入一個(gè)數(shù),以26為例,26位于28和23之間,于是按照程序變插入到28和23之間,最后輸出68 50 32 28 26 23 15 11 9 6 26. 輸入十個(gè)互不相同的整數(shù)并存在數(shù)組中,找出最大元素,并刪除。解答:(
11、1) 源代碼:#includevoid main()int a10,i,m,t,n;printf(輸入十個(gè)互不相同的整數(shù):n);for(i=0;i10;i+)scanf(%d,&ai);n=a0;printf(刪除其中最大的數(shù)之后:n);for(i=1;i10;i+)if(nai)n=ai;m=i;t=m;for(i=m;i9;i+)ai=ai+1;a9=t;for(i=0;i9;i+)printf(%d ,ai);printf(n);(2)運(yùn)行結(jié)果: (3) 運(yùn)行結(jié)果分析:在運(yùn)行程序的時(shí)候,輸入了如圖所示的十個(gè)不同的整數(shù),經(jīng)過程序的執(zhí)行,刪除其中最大的數(shù)97,再將剩下的9個(gè)數(shù)輸出來。7. 以
12、下程序的功能是:從鍵盤上輸入若干個(gè)學(xué)生的成績,統(tǒng)計(jì)計(jì)算出平均成績,并輸出低于平均分的學(xué)生成績,用輸入負(fù)數(shù)結(jié)束輸入。請(qǐng)?zhí)羁眨?include void main( ) float x1000, sum=0.0, ave, a; int n=0, i; printf (enter mark : n) ; scanf(%f, &a); while (a=0.0 & n1000) sum+= ; xn= ; n+; scanf(%f, &a); ave= ; printf (output : n); printf (ave = %fn, ave); for (i=0; in; i+) if ( ) p
13、rintf(%fn, xi);解答:(1) 源代碼:#includevoid main()float x1000,sum=0.0,ave,a;int n=0,i;printf(enter mark : n) ;scanf(%f,&a); while(a=0.0&n1000) sum+=a; xn=a;n+; scanf(%f, &a); ave=sum/n;printf (output : n);printf (ave = %fn, ave); for(i=0;in;i+) if (xiave) printf(%fn,xi);(2)運(yùn)行結(jié)果: (3) 運(yùn)行結(jié)果分析:運(yùn)行程序的時(shí)候輸入了如上圖所
14、示的10個(gè)分?jǐn)?shù),根據(jù)while語句中的內(nèi)容,故可以把-1作為輸入結(jié)束的標(biāo)志。接下來再作相應(yīng)的運(yùn)算,結(jié)果均與事實(shí)相符。8. 綜合編程題:打印如下楊輝三角形1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 解答:(1) 源代碼:#includevoid main()int a66,i,j;for(i=0;i6;i+)for(j=0;j=i;j+)if(i0&ij)aij=ai-1j-1+ai-1j;printf(下面的是楊輝三角形n);for(i=0;i6;i+)for(j=0;j=i;j+)printf(%4d,aij);printf(n); (2)運(yùn)行結(jié)果
15、: (3) 運(yùn)行結(jié)果分析:運(yùn)用二維數(shù)組的定義和for循環(huán)來實(shí)現(xiàn)輸出楊輝三角形。9. 調(diào)試下列程序,使之具有如下功能:任意輸入兩個(gè)字符串(如:“abc 123”和“china”),并存放在a,b兩個(gè)數(shù)組中。然后把較短的字符串放在a數(shù)組,較長的字符串放在b數(shù)組。并輸出。#include #include void main() char a10,b10; int c,d,k,ch; scanf(%s,&a); scanf(%s,&b); printf(a=%s,b=%sn,a,b); c=strlen(a); d=strlen(b); if(cd) for(k=0;kd;k+) ch=ak;ak=
16、bk;bk=ch; printf(a=%sn,a); printf(b=%sn,b); 解答:(1) 源代碼: #include #include void main() char a10,b10; int c,d,k,ch; scanf(%s,&a); scanf(%s,&b); printf(a=%s,b=%sn,a,b); c=strlen(a); d=strlen(b); if(cd) for(k=0;kc;k+) ch=ak; ak=bk; bk=ch; bk=0; printf(a=%sn,a); printf(b=%sn,b);(2)運(yùn)行結(jié)果: (3) 運(yùn)行結(jié)果分析:原程序中,應(yīng)
17、該把for語句中的kd改為kc,再就是在輸出最終結(jié)果之前可令bk=0,以避免輸出結(jié)果中出現(xiàn)亂碼的情況。運(yùn)行程序的時(shí)候,輸入a為一個(gè)較長的字符串,b較短,然后二者會(huì)進(jìn)行交換,輸出結(jié)果如上圖所示。10. 閱讀下面的程序,然后回答后面的問題:#include #include void main( ) char s180, s240; int i = 0, j = 0; printf( n please input string1:); scanf(%s, s1); printf( n please input string2:); scanf(%s, s2); while (s1i!= 0 )i+
18、; while (s2j!= 0 )s1i+=s2j +; s1i= 0; printf(n new string: %s, s1);編輯、運(yùn)行該程序,然后分別輸入country 和side。請(qǐng)問:程序執(zhí)行的結(jié)果是什么?輸出:countryside該程序的功能是什么?將第二個(gè)字符串連接到第一個(gè)字符串的后面從而組成一個(gè)新的字符串解答:(1) 源代碼:#include #include void main( ) char s180, s240; int i = 0, j = 0; printf( n please input string1:); scanf(%s, s1); printf( n
19、please input string2:); scanf(%s, s2); while (s1i!= 0 )i+; while (s2j!= 0 )s1i+=s2j +; s1i= 0; printf(n new string: %s, s1); printf(n);(2)運(yùn)行結(jié)果: (3) 運(yùn)行結(jié)果分析:運(yùn)行程序的時(shí)候先輸入country,再輸side,經(jīng)過程序的運(yùn)行,實(shí)現(xiàn)了將side連接到country的后面形成新的單詞countryside,即實(shí)現(xiàn)了將第二個(gè)字符串連接到第一個(gè)字符串的后面從而組成一個(gè)新的字符串的功能。11. 填空完成下面程序,使其功能是對(duì)從鍵盤上輸入的兩個(gè)字符串進(jìn)行比較
20、,然后輸出兩個(gè)字符串中第一個(gè)不相同字符的ascii碼之差。例如:輸入的兩個(gè)字符串分別為abcdefg和abceef,則輸出為-1。程序如下: #include void main ( ) char str1100,str2100; int i,s; printf(n input string 1:n);gets(str1); printf(“n input string 2:n”);gets(str2); i= (1) ; while(str1i=str2i)&(str1i!= (2) ) i+; s= (3) ; printf(%dn,s); 解答:(1) 源代碼:#include void
21、 main() char str1100,str2100; int i,s; printf(n input string 1:n);gets(str1); printf(n input string 2:n);gets(str2); i=0; while(str1i=str2i)&(str1i!=0) i+; s=str1i-str2i; printf(%dn,s);(2)運(yùn)行結(jié)果: (3) 運(yùn)行結(jié)果分析:運(yùn)行程序時(shí)先輸入hey boys,再輸入hey girls,兩個(gè)字符串中第一個(gè)不相同字符分別為b和g,ascii碼值相差-5,與事實(shí)相符。12. 填空完成下面程序,使其的功能是統(tǒng)計(jì)從終端輸入
22、字符中每個(gè)大寫字母的個(gè)數(shù)。用#號(hào)作為輸入結(jié)束標(biāo)志。程序如下: #include #include void main ( ) int num26,i; char c; for (i=0;i26;i+) numi=0; while ( (1) != #) /* 統(tǒng)計(jì)從終端輸入的大寫字母個(gè)數(shù)*/ if (isupper(c) numc-65 (2) ; for (i=0;i26;i+) /* 輸出大寫字母和該字母的個(gè)數(shù)*/ if (numi)printf(%c:%dn,i (3) ,numi); 解答:(1) 源代碼:#include#includevoid main() int num26,i; char c; for(i=0;i26;i+) numi=0; while(c=getchar()!=#) if(isupper(c) numc-65+=1; for(i=0;i26;i+) if(numi)printf(%c:%dn,i+65,numi);(2)運(yùn)行結(jié)果: (3) 運(yùn)行結(jié)果分析:運(yùn)行程序的時(shí)候輸入的字符串為cyuyancna,經(jīng)過程序的運(yùn)行,統(tǒng)計(jì)出的個(gè)字母的數(shù)量與事實(shí)是相符的。13. 編寫程序,輸入若干個(gè)字符串,求出每個(gè)字符串的長度,并打印最長一個(gè)字符串的
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024綜合居間代理采購合作合同版
- 2024石榴產(chǎn)業(yè)生態(tài)園投資合作協(xié)議書3篇
- 2025年度玻璃纖維增強(qiáng)復(fù)合材料銷售合同3篇
- 2025年度旅游客車租賃與旅游交通配套服務(wù)合同3篇
- 2025年度購房贈(zèng)送高端定制家具及裝修一體化合同4篇
- 2025年碎石石粉行業(yè)人才培養(yǎng)與引進(jìn)合同樣本3篇
- 2025年度窗簾環(huán)保材料采購合同3篇
- 2025年度旅游項(xiàng)目投資合伙人合同范本3篇
- 2025年度鋁灰處理廢棄物處理項(xiàng)目環(huán)保驗(yàn)收合同4篇
- 2025年度旅游景區(qū)導(dǎo)游工作績效評(píng)估合同4篇
- 高二物理競賽霍爾效應(yīng) 課件
- 金融數(shù)學(xué)-(南京大學(xué))
- 基于核心素養(yǎng)下的英語寫作能力的培養(yǎng)策略
- 現(xiàn)場安全文明施工考核評(píng)分表
- 亞什蘭版膠衣操作指南
- 四年級(jí)上冊(cè)數(shù)學(xué)教案 6.1口算除法 人教版
- DB32-T 3129-2016適合機(jī)械化作業(yè)的單體鋼架塑料大棚 技術(shù)規(guī)范-(高清現(xiàn)行)
- 6.農(nóng)業(yè)產(chǎn)值與增加值核算統(tǒng)計(jì)報(bào)表制度(2020年)
- 人工挖孔樁施工監(jiān)測監(jiān)控措施
- 供應(yīng)商物料質(zhì)量問題賠償協(xié)議(終端)
- 物理人教版(2019)必修第二冊(cè)5.2運(yùn)動(dòng)的合成與分解(共19張ppt)
評(píng)論
0/150
提交評(píng)論