湖北理工學院14本科C語言實驗報告實驗四數(shù)組_第1頁
湖北理工學院14本科C語言實驗報告實驗四數(shù)組_第2頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、實驗數(shù)組實驗課程名:C語言程序設計專業(yè)班級:14電氣工程2班學號:201440210237姓名:熊帆實驗時間:512-5.26實驗地點:K4-208指導教師:祁文青、實驗目的和要求1. 掌握一維數(shù)組和二維數(shù)組的定義、賦值和輸入輸出的方法;2. 掌握字符數(shù)組和字符串函數(shù)的使用;3. 掌握與數(shù)組有關的算法(特別是排序算法)。二、實驗內(nèi)容1. 調(diào)試下列程序,使之具有如下功能:輸入10個整數(shù),按每行3個數(shù)輸出這些整數(shù),最后輸出10個整數(shù)的平均值。寫出調(diào)試過程。#includevstdio.h>#defineN10voidmain()inti,aN,av;for(i=0;i<N;i+)sca

2、nf("%d",ai);for(i=0;i<N;i+)printf(”d",ai);if(i%3=0)printf("n");for(i=0;i!=N;i+)av+=ai;printf("av=%fn",av);解答:(1)源代碼:#includestdio.h>#defineN10voidmain()inti,aN;floatav=0;for(i=0;i<N;i+)scanf("%d",&ai);printf("n");for(i=0;iN;i+)print

3、f("%3d",ai);if(i+l)%3=0)printf("n");for(i=0;i!=N;i+)av+=ai;printf("n");av=av/N;printf("n");printf("av=%fn",av);(2)運行結果:258141279246258141279246au=7.800000Pressanifkeytocontinue(3)運行結果分析:原程序中有若干處錯誤,分別為av這個變量應該定義為float型,scanf語句中輸入數(shù)組的時候,在它前面應該加上地址符&

4、。第一個if語句if(i%3=0),應該改成if(i+l)%3=0),因為要實現(xiàn)一行三個地輸出,實際i=0對應的才是數(shù)組中的第一個元素。再者,在程序的適當位置加上輸出換行語句可使得程序1執(zhí)行頁面更美觀。調(diào)試的過程大體可分為三大塊,第一塊為從第7行到第9行,功能為輸入10個值。第二塊為從第10到第15行,功能為一行三個地輸出那10個值。第三塊為最后一個for語句,功能為將那10個值進行累加。2. 下面程序是輸入5個數(shù)據(jù),然后求它們的和并輸出結果。#includevstdio.h>voidmain()inti,a,sum=0;scanf("%d,%d,%d,%d,%d",

5、a);for(i=0;i<=4;i+)sum+=ai;printf("sum=%dn",sum);該程序中有哪些錯誤?如何修改?寫出正確運行后的結果。解答:(1) 源代碼:#includestdio.h>voidmain()inti,a5,sum=0;for(i=0;i=4;i+)scanf("%d",&ai);for(i=0;i<=4;i+)sum+=ai;printf("sum=%dn",sum);(2) 運行結果:542433128sum=131Pressanykeytocontinue(3)運行結果分

6、析:原程序中的scanf語句是錯的,應該采用for語句循環(huán)輸入,還要把a換成ai,并在前面加上地址符&。驗證程序的時候輸入了這樣五個值:542433128。然后運行程序,發(fā)現(xiàn)輸出結果和預期一致。3. 有一個3行4列的距陣,現(xiàn)要求編程求出其中最大的那個元素的值,以及它所在的行號與列號。下面程序的初始說明和輸出語句如下所示,請補充完成該程序。#includevstdio.h>voidmain()inti,j,row,colum,max;staticinta34=1,2,3,4,9,8,7,6,-10,10,-5,2;printf("Max=%d.Row=%d,Colum=%

7、dn",max,row,colum);解答:(1)源代碼:#include<stdio.h>voidmain()inti,j,row,colum,max;staticinta34=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(max<aij)max=aij;row=i+1;colum=j+1;printf("Max=%d,Row=%d,Colum=%dn",max,row,colum);(2)運行結果:Max=10,Row=3,Colum=2Pressanpk

8、eptocontinue(3)運行結果分析:應該對原本不完整的程序作這樣的補充,加上兩個for循環(huán)語句,以實現(xiàn)找出數(shù)組中最大的元素。并用row和column分別儲存行標和列標,但要注意+1。4. 數(shù)組中已存互不相同的10個整數(shù),從鍵盤輸入一個整數(shù),輸出與該值相同的數(shù)組元素下標。解答:(1)源代碼:#includestdio.h>voidmain()inti,x,a10=l,2,3,4,5,6,7,8,9,10;scanf("%d",&x);for(i=0;i<10;i+)printf("%4d",ai);printf("n&

9、quot;);for(i=0;i<10;i+)if(x=ai)break;if(i<10)printf("該元素的下標為%dn",i);elseprintf("該數(shù)組中沒有%dn",x);(2)運行結果:712345678910該元素的下標為&Pressanykeytocontinue肝一12345678910該數(shù)組中沒有I?Pressanykeytocontinue(3)運行結果分析:數(shù)組中已存互不相同的10個整數(shù):1,2,3,4,5,6,7,8,9,10。驗證程序的時候分別輸入了7和19,并且正確地輸出了下標或輸出結果。如上面兩張

10、圖所示。5. 編寫程序,任意輸入10個整數(shù)的數(shù)列,先將整數(shù)按照從大到小的順序進行排序,然后輸入一個整數(shù)插入到數(shù)列中,使數(shù)列保持從大到小的順序。解答:(1)源代碼:#include<stdio.h>voidmain()inta11,i,j,x,temp;printf("請輸入10個整數(shù):n");for(i=0;i<10;i+)scanf("%d",&ai);for(j=0;j<9;j+)for(i=0;i<9-j;i+)if(ai<ai+1)/排序,交換temp=ai+1;ai+1=ai;ai=temp;for(

11、i=0;i10;i+)printf("%d",ai);printf("n");printf("請再輸入一個整數(shù):");scanf("%d",&x);for(i=0,j=0;i10;i+)if(ai>=x&&x>=ai+l)j=i;break;elsecontinue;for(i=0;ij+l;i+)printf("%d",ai);/輸出插入點前的數(shù)字temp=aj+1;aj+1=x;printf("%d",aj+1);/輸出插入點的數(shù)字aj

12、+1二temp;for(i=0;i9-j;i+)/移位交換a10-i=a9-i;for(i=0;i<9-j;i+)printf("%d",ai+j+2);/輸出插入點后的數(shù)字printf("n");(2)運行結果:(3)運行結果分析:運行程序時輸入了這樣10個整數(shù):61191568232325028。經(jīng)過程序中排序部分的作用,將10個整數(shù)按從大到小的順序排序為:68503228231511962。和預期是一致的,再輸入一個數(shù),以26為例,26位于28和23之間,于是按照程序變插入到28和23之間,最后輸出68503228262315119626.

13、輸入十個互不相同的整數(shù)并存在數(shù)組中,找出最大元素,并刪除。解答:(1)源代碼:#includestdio.h>voidmain()inta10,i,m,t,n;printf("輸入十個互不相同的整數(shù):n");for(i=0;i10;i+)scanf("%d",&ai);n=a0;printf("刪除其中最大的數(shù)之后:n");for(i=1;i<10;i+)if(n<ai)n=ai;m=i;t二m;for(i=m;i<9;i+)ai=ai+1;a9=t;for(i=0;i9;i+)printf("

14、;%d",ai);printf("n");(2)運行結果:輸入干個互不相同的整數(shù):566123973215245128刪除其中最大的數(shù)之后:5661233215245128Pressani/keytocontinueH(3)運行結果分析:在運行程序的時候,輸入了如圖所示的十個不同的整數(shù),經(jīng)過程序的執(zhí)行,刪除其中最大的數(shù)97,再將剩下的9個數(shù)輸出來。7. 以下程序的功能是:從鍵盤上輸入若干個學生的成績,統(tǒng)計計算出平均成績,并輸出低于平均分的學生成績,用輸入負數(shù)結束輸入。請?zhí)羁眨?includevstdio.h>voidmain()floatx1000,sum=

15、0.0,ave,a;intn=0,i;printf("Entermark:n");scanf("%f",&a);while(a>=0.0&&nv1000)sum+=;xn=;n+;scanf("%f",&a);ave=;printf("Output:n");printf("ave=%fn",ave);for(i=0;ivn;i+)if()printf("%fn",xi);(1)源代碼:#includestdio.h>voidmain

16、()floatx1000,sum=0.0,ave,a;intn=0,i;printf("Entermark:n");scanf("%f",&a);while(a>=0.0&&n<1000)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)

17、運行結果:Entermark:75816254899646789180-1Output:ave=75.19999775.00000062.00000054.00000046.000000PressanykeytocontinueH(3)運行結果分析:運行程序的時候輸入了如上圖所示的10個分數(shù),根據(jù)while語句中的內(nèi)容,故可以把-1作為輸入結束的標志。接下來再作相應的運算,結果均與事實相符。8.綜合編程題:打印如下楊輝三角形11111112345136101411051解答:(1)源代碼:#include<stdio.h>voidmain()inta66,i,j;for(i=0;i

18、6;i+)for(j=0;j二i;j+)if(i<=1)aij=l;elseif(j=i|j=0)aij=1;if(j>0&&i>j)aij二aiTj-l+aiTj;printf("下面的是楊輝三角形n");for(i=0;i6;i+)for(j=0;j<=i;j+)printf("%4d",aij);printf("n");(2)運行結果:下面的是楊輝三角形11112113311464115101051Presseinykeytocontinue(3)運行結果分析:運用二維數(shù)組的定義和for循

19、環(huán)來實現(xiàn)輸出楊輝三角形。9. 調(diào)試下列程序,使之具有如下功能:任意輸入兩個字符串(如:“abc123”和“china”),并存放在a,b兩個數(shù)組中。然后把較短的字符串放在a數(shù)組,較長的字符串放在b數(shù)組。并輸出。#includevstdio.h>#include<string.h>voidmain()chara10,b10;intc,d,k,ch;scanf("%s",&a);scanf("%s",&b);printf("a=%s,b=%sn",a,b);c=strlen(a);d=strlen(b);

20、if(c>d)for(k=0;kvd;k+)ch=ak;ak=bk;bk=ch;printf("a=%sn",a);printf("b=%sn",b);解答:(1) 源代碼:#includestdio.h>#includestring.h>voidmain()chara10,b10;intc,d,k,ch;scanf("%s",&a);scanf("%s",&b);printf("a=%s,b=%sn",a,b);c=strlen(a);d=strlen(b);

21、if(c>d)for(k=0;k<c;k+)ch=ak;ak=bk;bk=ch;bk='0';printf("a=%sn",a);printf("b=%sn",b);(2) 運行結果:I_Loue_UI_Doa=I_Loue_U,b=I_Doa=I_Dob=I_Loue_UPressani/keytocontinue(3)運行結果分析:原程序中,應該把for語句中的kd改為kc,再就是在輸出最終結果之前可令bk='0',以避免輸出結果中出現(xiàn)亂碼的情況。運行程序的時候,輸入a為一個較長的字符串,b較短,然后二者會

22、進行交換,輸出結果如上圖所示。10. 閱讀下面的程序,然后回答后面的問題:#includevstdio.h>#include<string.h>voidmain()chars180,s240;inti=0,j=0;printf(”nPleaseinputstringl:");scanf(”s",s1);printf("nPleaseinputstring2:");scanf(”s",s2);while(s1i!='0')i+;while(s2j!='0')s1i+=s2j+;s1i='0

23、'printf("nNewstring:%s",s1);編輯、運行該程序,然后分別輸入Country和side。請問: 程序執(zhí)行的結果是什么?輸出:Countryside 該程序的功能是什么?將第二個字符串連接到第一個字符串的后面從而組成一個新的字符串解答:(1)源代碼:#includestdio.h>#includestring.h>voidmain()chars180,s240;inti二0,j二0;printf("nPleaseinputstring1:");scanf("%s",s1);printf(&qu

24、ot;nPleaseinputstring2:");scanf("%s",s2);while(s1i!='0')i+;while(s2j!='0')s1i+=s2j+;s1i='0'printf("nNewstring:%s",si);printf("n");(2)運行結果:Pleaseinputstringl:CountryPleaseinputstring2:sideNeustring:CountrysidePressanykeytocontinue(3)運行結果分析:運行

25、程序的時候先輸入Country,再輸side,經(jīng)過程序的運行,實現(xiàn)了將side連接到Country的后面形成新的單詞Countryside,即實現(xiàn)了將第二個字符串連接到第一個字符串的后面從而組成一個新的字符串的功能。11. 填空完成下面程序,使其功能是對從鍵盤上輸入的兩個字符串進行比較,然后輸出兩個字符串中第一個不相同字符的ASCII碼之差。例如:輸入的兩個字符串分別為abcdefg和abceef,則輸出為-1。程序如下:#includevstdio.h>voidmain()charstrl100,str2100;inti,s;printf("nInputstring1:n&q

26、uot;);gets(str1);printf(“nInputstring2:n")gets(str2)i=叫;while(str1i=str2i)&&(str1i!=(2)i+;s=(3);printf(”dn",s);解答:(1)源代碼:#includestdio.h>voidmain()charstr1100,str2100;inti,s;printf("nInputstring1:n");gets(str1);printf("nInputstring2:n");gets(str2);i=0;while(s

27、trli二二str2i)&&(strli!二'0')i+;s=strli-str2i;printf("%dn",s);(2)運行結果:Inputstring1:heyboi/sInputstring2:heygirls卜5Pressanykeytocontinue(3)運行結果分析:運行程序時先輸入heyboys,再輸入heygirls,兩個字符串中第一個不相同字符分別為b和g,ASCII碼值相差-5,與事實相符。12. 填空完成下面程序,使其的功能是統(tǒng)計從終端輸入字符中每個大寫字母的個數(shù)。用#號作為輸入結束標志。程序如下:#includev

28、stdio.h>#includevctype.h>voidmain()intnum26,i;charc;for(i=0;iv26;i+)numi=0;while(1)!=#)/*統(tǒng)計從終端輸入的大寫字母個數(shù)*/if(isupper(c)numc-65;for(i=0;i<26;i+)/*輸出大寫字母和該字母的個數(shù)*/if(numi)printf("%c:%dn",i(3),numi);解答:(1)源代碼:#includestdio.h>#includectype.h>voidmain()intnum26,i;charc;for(i=0;i26;

29、i+)numi=0;while(c=getchar()!='#')if(isupper(c)numc-65+=l;for(i=0;i<26;i+)if(numi)printf("%c:%dn",i+65,numi);(2)運行結果:CVUYANCNAttA:2C:2N:2U:1¥:2Pressanykeytocontinue(3)運行結果分析:運行程序的時候輸入的字符串為CYUYANCNA,經(jīng)過程序的運行,統(tǒng)計出的個字母的數(shù)量與事實是相符的。13. 編寫程序,輸入若干個字符串,求出每個字符串的長度,并打印最長一個字符串的內(nèi)容。以“stop,作為輸入的最后一個字符串。解答:(1)源代碼:#includestdio.h>#includestring.h>voidmain()chara2020;inti=0,t二0,b

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論