西安交大C++程序設(shè)計(jì)第四章作業(yè)2_第1頁(yè)
西安交大C++程序設(shè)計(jì)第四章作業(yè)2_第2頁(yè)
西安交大C++程序設(shè)計(jì)第四章作業(yè)2_第3頁(yè)
西安交大C++程序設(shè)計(jì)第四章作業(yè)2_第4頁(yè)
西安交大C++程序設(shè)計(jì)第四章作業(yè)2_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、西安交通大學(xué)實(shí)驗(yàn)報(bào)告課程_計(jì)算機(jī)程序設(shè)計(jì)_實(shí)驗(yàn)名稱(chēng)_結(jié)構(gòu)體_第 1 頁(yè) 共 29 頁(yè)系 別_ _ 實(shí) 驗(yàn) 日 期 2014 年 4月 26日專(zhuān)業(yè)班級(jí)_ _組別_ 實(shí) 驗(yàn) 報(bào) 告 日 期 2014 年 4 月 27日姓 名_ _學(xué)號(hào)_ _ 報(bào) 告 退 發(fā) ( 訂正 、 重做 )同 組 人_ 教 師 審 批 簽 字 一、 實(shí)驗(yàn)?zāi)康恼莆战Y(jié)構(gòu)體的使用方法,學(xué)會(huì)用結(jié)構(gòu)體的方法定義變量并對(duì)變量進(jìn)行處理;掌握枚舉法的使用方法。二、實(shí)驗(yàn)內(nèi)容 (一)第一題: 1、輸入某小組5個(gè)人的姓名、性別、出生年份等信息,統(tǒng)計(jì)男女人數(shù)以及1988年以后(含1988年)出生的人數(shù)。1.源程序代碼:/輸入某小組個(gè)人的姓名、性別、

2、出生年份等信息,統(tǒng)計(jì)男女人數(shù)以及年以后(含年)出生的人數(shù)。#includeusing namespace std;struct xinxichar name20;char sex;int year;/定義結(jié)構(gòu)體xinxi,包含名稱(chēng)(字符串)、性別(字符)、出生時(shí)間(整數(shù))三個(gè)變量int main()xinxi cy5;int i,s=0,m=0;for(i=0;i5;i+)cout請(qǐng)輸入第i+1;coutcyi.sex;coutcyi.year;cout您輸入的是:n;for(i=0;i5;i+)/顯示輸入內(nèi)容tcyi.sextcyi.yearendl;

3、for(i=0;i=1988)m+;cout其中男生人數(shù)為:st女生人數(shù)為:5-sendl;cout1988年以后(含)出生的的人數(shù)為:mendl;return 0; 2.實(shí)驗(yàn)結(jié)果: 3.問(wèn)題分析:略。(二)第二題: 讀入五個(gè)用戶的姓名和電話號(hào)碼,按照姓名的字典順序排列后,輸出用戶的姓名和電話號(hào)碼。1.源程序代碼:/讀入五個(gè)用戶的姓名和電話號(hào)碼,按照姓名的字典順序排列后,輸出用戶的姓名和電話號(hào)碼。#include#includeusing namespace std;struct dianhuabuchar name30;char num15;/定義結(jié)構(gòu)體dianhuabu,包含兩個(gè)變量:名字

4、和電話號(hào)碼。由于電話號(hào)碼較長(zhǎng)又無(wú)需對(duì)其進(jìn)行具體處理,故定義為字符串型int main()dianhuabu dhb5;/聲明dianhuabu型變量int i;for(i=0;i5;i+)cout請(qǐng)輸入第i+1;coutdhbi.num;cout您輸入的信息如下:n;for(i=0;i5;i+)/顯示輸入信息tdhbi.numn;for(i=0;i5;i+)/排序int k=i;for(int j=i+1;j5;j+)if(strcmp(,)0)/用庫(kù)函數(shù)strcmp比較字符串大小k=j;if(k!=i)dianh

5、uabu tmp=*(dhb+i);/定義dianhuabu型變量tmp作為中間變量,進(jìn)行交換*(dhb+i)=*(dhb+k);*(dhb+k)=tmp;cout排序結(jié)果如下:n;for(i=0;i5;i+)tdhbi.numendl;/輸出排序后結(jié)果return 0;2.實(shí)驗(yàn)結(jié)果:(1)隨機(jī)輸入名稱(chēng):(2)輸入名稱(chēng)長(zhǎng)度遞增,后者包含前者,用來(lái)檢驗(yàn)庫(kù)函數(shù)strcmp的排序效果:3.問(wèn)題分析:略。 (三)第三題:輸入兩個(gè)整型數(shù)組(假設(shè)數(shù)組的大小為7)的各個(gè)元素,輸出不是兩個(gè)數(shù)組共有元素,例如,輸入1,2,3,4,5,6,7和5,6,7,8,9,0,輸出為1,2,3,4

6、,8,9,0.1.源程序代碼: /輸入兩個(gè)整型數(shù)組(假設(shè)數(shù)組的大小為7)的各個(gè)元素,輸出不是兩個(gè)數(shù)組共有元素,/例如,輸入1,2,3,4,5,6,7和5,6,7,8,9,0,輸出為1,2,3,4,8,9,0.#includeusing namespace std;int main()int a7,b7,c14;int i,j,m=0;cout請(qǐng)輸入數(shù)組a的每個(gè)元素:n;for(i=0;i*(a+i);cout請(qǐng)輸入數(shù)組b的每個(gè)元素:n;for(j=0;j*(b+j);for(i=0;i7;i+)j=0;while(*(a+i)!=*(b+j)&j7)j+;if(j=7)*(c+m)=*(a+i

7、);m+;for(i=0;i7;i+)j=0;while(*(b+i)!=*(a+j)&j7)j+;if(j=7)*(c+m)=*(b+i);m+;if(m=0)cout沒(méi)有非共有元素!n;return 0;/直接結(jié)束,不再進(jìn)行以下內(nèi)容cout共有m個(gè)非共有元素:n;int k;for(k=0;km;k+)cout*(c+k) ;/輸出coutendl;return 0;2.實(shí)驗(yàn)結(jié)果:(1)全不相同:(2)部分相同:(3)全相同:3.問(wèn)題分析:不足之處:題目中說(shuō)是數(shù)組大小為7,但第二個(gè)數(shù)組只有六個(gè)元素也進(jìn)行了比較。而我的作業(yè)中沒(méi)有實(shí)現(xiàn)這一點(diǎn),只能是7個(gè)元素.(四)實(shí)驗(yàn)題目四:口袋中有紅、黃、藍(lán)

8、、白、黑5種顏色的小球若干個(gè),如果每次都從口袋中取出3種不同顏色的小球,共有多少種組合?試打印出每種組合的3種顏色,要求使用枚舉類(lèi)型來(lái)表示小球的顏色。 1. 程序源代碼#includeusing namespace std;enum Colorsred,yellow,blue,white,black;void ys(int i)switch(i)case red:coutred ;break;case yellow:coutyellow ;break;case blue:coutblue ;break;case white:coutwhite ;break;case black:coutbla

9、ck ;break;void main()int s=0,i,j,k;for(i=red;i=blue;i+)for(j=1+i;j=white;j+)for(k=j+1;k=black;k+)s+;ys(i);ys(j);ys(k);coutendl;cout總共的組合數(shù)為:sendl;2. 實(shí)驗(yàn)結(jié)果3.問(wèn)題分析:此題中雖然定義了枚舉類(lèi)型,然而實(shí)際過(guò)程中,感覺(jué)并沒(méi)有使用到枚舉,它的存在似乎沒(méi)有意義,不知道是不是方法用錯(cuò)了。五、第五題: 5、編寫(xiě)函數(shù),該函數(shù)實(shí)現(xiàn)任意一個(gè)正整數(shù)是否為完全數(shù)。再編寫(xiě)函數(shù)輸出完全數(shù)等于各因子之和的式子。最后找出2100000之內(nèi)所有完全數(shù)。所謂完全數(shù)是其各因子之和正

10、好等于本身的數(shù),例如輸出格式如下的完全數(shù):6=1+2+3,28=1+2+4+7+14。#includeusing namespace std;void panduan(int i)/自定義函數(shù),用于判斷i是不是完全數(shù)int m,s=0;int *num=new inti;/動(dòng)態(tài)分配數(shù)組空間,雖然仍然大于實(shí)際需要值,但數(shù)組大小基本上得到了控制for(m=1;m=i/2;m+)if(i%m=0)nums=m;s+;/s最終為因子個(gè)數(shù)int sum=0;int n;for(n=0;ns;n+)sum=sum+numn;/sum最終為各因子之和if(sum=i)couti=;for(n=0;ns-1;

11、n+)coutnumn+;coutnums-1endl;delete num;/釋放數(shù)組空間int main()int i;cout從2到的100000完全數(shù)如下:n;for(i=2;i100000;i+) panduan(i);return 0;2.實(shí)驗(yàn)結(jié)果:3.問(wèn)題分析:在做這道題的過(guò)程中,起初出現(xiàn)了一個(gè)奇怪的現(xiàn)象:如果上限由100000改為10000,則程序正常運(yùn)行,但對(duì)于100000,會(huì)顯示出現(xiàn)問(wèn)題:后來(lái)檢查不出問(wèn)題時(shí),發(fā)現(xiàn)了一直以來(lái)一個(gè)不良習(xí)慣:不編寫(xiě)釋放數(shù)組空間的語(yǔ)句。試著加上這一語(yǔ)句之后再運(yùn)行時(shí),發(fā)現(xiàn)程序能夠正常進(jìn)行了,因而認(rèn)為應(yīng)該是這句語(yǔ)句的作用,但并不知道具體的原因。六、第六

12、題:6、(必做題)編寫(xiě)一個(gè)實(shí)現(xiàn)文章(即字符串)單詞統(tǒng)計(jì)功能的程序,要求:輸入一系列英文單詞字符串(即帶空格的字符串),單詞間用空格隔開(kāi)或逗號(hào)或句號(hào)隔開(kāi)。請(qǐng)統(tǒng)計(jì)該字符串中單詞出現(xiàn)的頻率,并按詞典順序輸出單詞及其頻率。必須用結(jié)構(gòu)體方法實(shí)現(xiàn)。 1.源程序代碼:#include#includeusing namespace std;struct frequencychar word20;int n;danci100; /定義結(jié)構(gòu)體變量danci,它由單詞及其頻率兩個(gè)量組成struct wchar a20;in100;/定義了個(gè)元素的字符串組,用于儲(chǔ)存輸入的句子中的每個(gè)單詞int fre(char nu

13、,w in,int mu)/統(tǒng)計(jì)每個(gè)單詞的頻率函數(shù)int i,pl=0;for(i=0;imu;i+)if(strcmp(nu,ini.a)=0)pl+;return pl;void main()char article501;cout輸入句子:n;cin.get(article,500);int l=strlen(article);/取其長(zhǎng)度,定義為整型數(shù)lint i,j,k,m;for(i=0,j=0;il;i+)/開(kāi)始循環(huán),從i=0循環(huán)到i=l,循環(huán)內(nèi)部也會(huì)對(duì)i進(jìn)行增加,因而主循環(huán)的i是處理了一些節(jié)點(diǎn):離開(kāi)單詞部分到進(jìn)入單詞部分之間的字符char a=*(article+i);/a定義為

14、article第i個(gè)字符,if(a=a)|(a=A)/判斷若已經(jīng)是字母了的話就進(jìn)入循環(huán)記錄接下來(lái)的單詞內(nèi)容,否則繼續(xù)i增加直到走完非字母字符到達(dá)字母m=0;k=i;char b=*(article+k);while(b=a)|(b=A)/當(dāng)它是字母就循環(huán),若已經(jīng)不是字母了,就跳出循環(huán)inj.am=b;k+;m+;b=*(article+k);/一直加直到遇到非字母字符時(shí)停止inj.am=0;/這個(gè)單詞轉(zhuǎn)錄完了之后,將最后一個(gè)字符寫(xiě)為0以防亂碼j+;/下一個(gè)單詞的寫(xiě)入i=k-1;/由于在小循環(huán)中k最后一次循環(huán)多加了一個(gè),所以在這里扣除,賦給i,i就不再執(zhí)行單詞的中間字母部分,只需對(duì)非字母部分判斷

15、直到遇到下一個(gè)單詞的開(kāi)頭字母/至此,已記錄所有單詞到in.a中。int mu=j;/記錄下單詞數(shù)目,共有單詞mu個(gè)(注意到最后j加了)/然后將每一個(gè)不同的單詞儲(chǔ)存在danci.word里int s=0;for(i=0;imu;i+)j=0;while(ji&strcmp(ini.a,inj.a)!=0)j+;if(j=i)strcpy(dancis.word,ini.a);s+;/至此將所有不同單詞依次儲(chǔ)存到了danci.word中,s為不同單詞個(gè)數(shù)/然后排序for(i=0;is;i+)k=i;for(j=i+1;js;j+)if(strcmp(dancij.word,dancik.word)

16、0)k=j;if(k!=i)frequency tmp=*(danci+i);*(danci+i)=*(danci+k);*(danci+k)=tmp; /cout統(tǒng)計(jì)結(jié)果為:n;for(i=0;is;i+)/逐個(gè)判斷頻率并導(dǎo)入到dancii.n中去dancii.n=fre(dancii.word,in,mu);cout單詞: dancii.wordt頻率: dancii.nendl;/輸出2.實(shí)驗(yàn)結(jié)果:(1)按照題目要求的檢驗(yàn):(2)事實(shí)上,由于審題失誤,我所編寫(xiě)的這個(gè)程序,能夠?qū)σ磺星闆r進(jìn)行處理(個(gè)人認(rèn)為這個(gè)程序能夠?qū)崿F(xiàn)題目的要求,所以不能算錯(cuò)),單詞之間可以有多個(gè)非字母字符,可以有空格,

17、開(kāi)頭也可以有各種字符,唯一不足的是無(wú)法將The和the識(shí)別為同一單詞:3.問(wèn)題分析:這道題較難,再加上審題的失誤導(dǎo)致我在這道題上做了更多的工作??赡苻k法有點(diǎn)笨,但沒(méi)有深入思考,所以最終程序較為麻煩。從我最終編寫(xiě)的程序來(lái)看,能夠?qū)崿F(xiàn)對(duì)各種輸入情況下單詞數(shù)的統(tǒng)計(jì),實(shí)現(xiàn)這一功能主要問(wèn)題在以下幾點(diǎn): 首先說(shuō)明程序的思路:輸入一個(gè)含有各種字符的字符串,然后將其中的每一個(gè)單詞依次挑選出來(lái)同時(shí)將其儲(chǔ)存在用結(jié)構(gòu)體定義好的一組字符串中;然后將這些單詞中不同的單詞挑出來(lái)存到另一二元結(jié)構(gòu)體單詞,頻率的每一項(xiàng)的“單詞”元素中;然后對(duì)二元結(jié)構(gòu)體根據(jù)“單詞”元素進(jìn)行排序;然后根據(jù)每個(gè)“單詞”元素在原來(lái)儲(chǔ)存的所有單詞中的出

18、現(xiàn)次數(shù)得到頻率并且同時(shí)將頻率值保存到“頻率”元素中并輸出。(1)單詞的分離過(guò)程,這應(yīng)該是其中幾乎最麻煩的過(guò)程。由于要將每個(gè)單詞識(shí)別出來(lái),分開(kāi)并且儲(chǔ)存下來(lái)所以要定義一系列的字符串用于存儲(chǔ)每個(gè)單詞,為此定義了結(jié)構(gòu)體: struct wchar a20;in100;然后需要判斷單詞。從第一個(gè)字符開(kāi)始,遇到字母后開(kāi)始將原字符串的字符錄入到單詞字符串,遇到不是字母的字符時(shí)停止,給末尾加上0后這一單詞的錄入便完成,然后從這個(gè)非字母字符開(kāi)始在往下判斷,遇到下一個(gè)字母也就是下一個(gè)單詞的首字母時(shí)子進(jìn)行下一個(gè)單詞的錄入,直到完成所有錄入。完成以上工作之后,為了進(jìn)行下一步的統(tǒng)計(jì)頻率,還需要將其中不同的單詞挑出來(lái)然后

19、存儲(chǔ)到二元結(jié)構(gòu)體的Word元素中,為此進(jìn)行如下操作:從第一個(gè)單詞開(kāi)始,逐個(gè)判斷它是不是與前面所有單詞都不相同,若是,則將其存儲(chǔ)下來(lái),否則不存儲(chǔ)。為此用了庫(kù)函數(shù)strcmp進(jìn)行兩個(gè)字符串之間的比較。(2)排序:這一環(huán)節(jié)比較簡(jiǎn)單,完全可以仿照作業(yè)第二題的方法;(3)頻率統(tǒng)計(jì):將存儲(chǔ)下來(lái)的不同單詞依次在所有單詞中找出與之相同的個(gè)數(shù)即可,由于之前已經(jīng)完成,故可以在記錄頻率同時(shí)輸出結(jié)果。(4)不足:用到庫(kù)函數(shù)strcmp時(shí),程序有警告,但可以運(yùn)行,至于警告的原因,尚不清楚。(七)第七題: 7、(必做題)任意輸入一個(gè)正整數(shù),統(tǒng)計(jì)輸出各個(gè)數(shù)位上數(shù)字出現(xiàn)的次數(shù)。例如輸入312366060,輸出0為2;1為1;

20、2為1;3為2;6為3。1.源程序代碼:#includeusing namespace std;struct frequencyint m;/數(shù)字int n;/頻率;int main()int x;/輸入的數(shù)coutx;int a,i,j,k,s=x;/s初始為輸入值,后逐漸縮小,用于求解位數(shù);a得到的是位數(shù)for(a=0;s0;a+)s=s/10;int *num=new inta;for(i=0,s=x;ia;i+)*(num+i)=s%10;s=s/10;frequency fre10;for(j=0;j=9;j+)k=0;for(i=0;i=a;i+)if(j=numi)k+;frej

21、.n=k;frej.m=j;cout統(tǒng)計(jì)結(jié)果如下:n;for(j=0;j10;j+)if(frej.n!=0)coutfrej.mtfrej.nendl;return 0;2.實(shí)驗(yàn)結(jié)果:(1)開(kāi)頭不是0:(2)開(kāi)頭是0,由于是輸入正整數(shù),所以開(kāi)頭的0不考慮:3.問(wèn)題分析: 思路:(1) 求出整數(shù)位數(shù),以便動(dòng)態(tài)分配數(shù)組空間;(2) 依次分離出每一位的數(shù)存儲(chǔ)下來(lái);(3) 從0到9逐個(gè)統(tǒng)計(jì)個(gè)數(shù);(4) 對(duì)于個(gè)數(shù)為0的不輸出,大于0的輸出統(tǒng)計(jì)結(jié)果。八、第八題:8、(選作題)第一將整數(shù)翻譯程序中翻譯千位整數(shù)的函數(shù)直接屏幕輸出英文改為形成翻譯字符串返回給主調(diào)函數(shù);第二將子串個(gè)數(shù)統(tǒng)計(jì)程序改為使用庫(kù)函數(shù)str

22、ncmp()來(lái)實(shí)現(xiàn)。1.源程序代碼:(1)#include#includeusing namespace std;static char *gewei= , one , two , three , four , five , six , seven , eight , nine , ten , eleven , twelve , thirteen , fourteen , fifteen , sixteen , seventeen , eighteen , nineteen ;static char *shiwei= , , twenty , thirty , forty , fifty , sixty , seventy , eighty , ninety ;char *m(int a)int b = a % 100;char output50 = ;if(a / 100 != 0) strcat(output,geweia/100); str

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論