版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、西安交通大學(xué)實驗報告課 程 計算機程序設(shè)計 系 別 理學(xué)院 日 期 2014 年 6 月 4 日專業(yè)班號 姓 名 學(xué) 號 1.實驗?zāi)康奈募x寫;2.實驗練習題(1)分離文本文件中的英文和中文有一個文本文件,每一行都是一個單詞或詞組及其中文解釋,英文和中文之間可以無空格。下面是一個樣例:China 中國Foreign Minister外交部長Sino-Russian tie 中俄關(guān)系last year去年編寫程序,將上面這樣的文件中的英文寫入文件out1.txt,將中文寫入文件out2.txt。都是每行一個詞匯?!颈绢}目的】練習基本的文本文件打開、讀取、寫入方法,以及同時操作多個文件的方法。練習
2、字符的判別方法?!締栴}分析】除了打開、關(guān)閉、讀取、寫入文件之外,主要要將每一行中的中文識別出來。每個中文字都是有兩個字節(jié)構(gòu)成,這兩個字節(jié)轉(zhuǎn)換成整數(shù)都小于0(即最高位為1)。利用這一點就可以識別中文。下面算法里中文的識別方法是:將一個字節(jié)讀入字符變量,然后將該變量轉(zhuǎn)換為整數(shù)。如果該整數(shù)大于0,就說明這個字節(jié)是英文;若小于0,則這個字節(jié)是中文的一部分。根據(jù)本題目的情況,可以邊讀文件邊處理。這樣程序?qū)?nèi)存的需要將很小,也提高了執(zhí)行效率。注意,打開文件時,應(yīng)增加判斷語句判斷文件打開成功與否?!舅惴枋觥慷xifstream對象,并使用其打開文件;定義ofstream對象,并使用其打開文件out1.tx
3、t;定義ofstream對象,并使用其打開文件out2.txt;當(文件沒有讀完)讀取一行內(nèi)容到字符數(shù)組str;計數(shù)器i=0;當( stri!=0 且 (int)stri > 0 ) /不是中文字符寫入out1.txt;將剩余str數(shù)組內(nèi)容寫入out2.txt; 關(guān)閉所有文件;【結(jié)果示例】英文文件的內(nèi)容為:China Foreign Minister Sino-Russian tie last year中文文件的內(nèi)容為:中國外交部長中俄關(guān)系去年【擴展問題】如果不小心文件的某一行出現(xiàn)了兩個英文單詞及其中文解釋放在一行的情況,即形如:“China 中國 Foreign Minister外交部
4、長”的情形。那么程序還能正常運行嗎?若不能,有沒有改進的方法。# include <iostream># include <fstream>using namespace std;int main(void)ifstream in("in.txt");ofstream out1("out1.txt");ofstream out2("out2.txt");if(!in)|(!out1)|(!out2)cout<<"Connot open the file!"<<endl
5、;return 1;char str100;while(in)in.getline(str,99);if(in)int i=0;while(stri!='0')if( (int) stri>0)if(stri!=' ')out1<<stri;if(stri+1<0)out1<<endl;if(int)stri<0)if(stri!=' ')out2<<stri;if(stri+1>0)out2<<endl;i+;out2<<endl;return 0;(在此填入程
6、序及實驗結(jié)果截圖)(2) 有格式文本文件創(chuàng)建及讀取從鍵盤讀入若干行數(shù)據(jù)(行數(shù)小于100),每行的數(shù)據(jù)依次為英文單詞、中文解釋、單詞出現(xiàn)次數(shù),這些數(shù)據(jù)以空格隔開。最后一行輸入“-1 -1 -1”表示輸入結(jié)束。將輸入的數(shù)據(jù)逐行寫入文件fa.txt(最后一行三個-1不要寫入文件)。然后再將文件打開,讀取英文單詞和單詞出現(xiàn)次數(shù),并按照單詞出現(xiàn)次數(shù)由高到低逐行輸出在屏幕上?!颈绢}目的】練習文件打開、關(guān)閉的方法,有格式文本文件的基本讀寫方法?!締栴}分析】首先看寫文件的階段。英文單詞和中文解釋應(yīng)該用字符數(shù)組表示,而單詞出現(xiàn)次數(shù)則可用整型變量表示。屏幕輸入的信息可以按行讀取并逐行寫入文件。寫入數(shù)據(jù)過程用符號“
7、<<”即可。寫入完成一定要關(guān)閉文件,以便下一步操作。再看讀文件的階段。由于要讀入多個英文單詞,所以可以用二維數(shù)組存儲這些單詞。而所有使用次數(shù)則用一維整型數(shù)組即可。比如,可以用word10020、num100存儲100個單詞的內(nèi)容和使用次數(shù)。wordk20和numk代表同一行中的兩個數(shù)值。排序過程需要對num數(shù)組進行,注意是由大到小排序。在對num數(shù)組的內(nèi)容操作時,比如交換numi和numj,則需要同時交換wordi20和wordj20,以保持單詞和使用次數(shù)的對應(yīng)?!舅惴枋觥慷xofstream對象fa.txt;定義數(shù)組w20、c20、n;當(w20、c20和n不是-1)從屏幕讀入
8、w20、c20、n;若(w20、c20和n不是-1)向文件寫入w20、c20、n; 關(guān)閉文件;再次打開文件;定義word10020、num100;從文件讀取所有單詞及其使用次數(shù)到word、num數(shù)組;對數(shù)組排序;輸出word、num數(shù)組;【擴展問題】用二維數(shù)組解決本問題是傳統(tǒng)C語言的解決方式,還可以用string數(shù)組來存儲多個字符串,那樣更方便一些,請嘗試實現(xiàn)一下。# include <iostream># include <fstream># include <string>using namespace std;int main(void)ofstrea
9、m out("fa.txt");if(!out)cout<<"Connot open the file!"<<endl;return 1;char w20,c20;int n;cout<<"請輸入英文單詞、中文解釋、使用次數(shù)(以-1、-1、-1結(jié)束)"<<endl;cin>>w>>c>>n;while(w0!=-1&&c0!=-1&&n!=-1)out<<w<<'t'<<
10、;c<<'t'<<n<<endl;cin>>w>>c>>n;out.close();ifstream in("fa.txt");if(!in)cout<<"Connot open the file!"<<endl;return 1;char str100;char word10020;int num100;int i=0; int temp;while(in)in>>wordi>>str>>numi;i+;i
11、nt len=i-1;int j;for (i=0;i<len;i+)for (j=i+1;j<len+1;j+)if(numi<numj)temp=numi;numi=numj;numj=temp;strcpy(str,wordi);strcpy(wordi,wordj);strcpy(wordj,str);cout<<"您存入文件中單詞的使用次數(shù)由高到低為:"<<endl;for (i=0;i<len+1;i+)cout<<wordi<<endl;return 0;(在此填入程序及實驗結(jié)果截圖)(3
12、)學(xué)生成績信息的處理已知一個文件內(nèi)容是學(xué)生成績信息。每一行的內(nèi)容依次是學(xué)號、姓名、性別、高數(shù)成績、物理成績、英語稱績,樣例如下:010010張三男879086010011李四女799590.編寫程序,讀取這樣的文件(假定已知人數(shù)小于100,數(shù)量未知),將所有女生的成績信息在屏幕上逐行輸出,最后再輸出所有女生三門課的平均成績。本題目文本文件請自行建立。【本題目的】練習讀取特定格式的文本文件的方法,練習結(jié)構(gòu)體的使用?!締栴}分析】讀入文件時,由于要讀入多個字符串(如學(xué)號、姓名、性別),當然可以用二維數(shù)組存儲這些串。但這里采用其他方法來處理,將學(xué)生的信息存為結(jié)構(gòu)體的形式。其定義方式可采用下面的形式。s
13、truct STUDENT char ID10;/學(xué)號char Name15;/姓名char Sex3;/性別int math;/高數(shù)成績int phy;/物理成績int eng;/英語稱績由于要計算所有女生的平均分,因此可以定義一個STUDENT數(shù)組,將所有女生的信息保存到數(shù)組中,最后計算平均分。其實對本題目而言,不使用STUDENT數(shù)組也可解決問題??梢远x三個變量SumMath、SumPhy、SumEng用于累加所有女生各科的成績,累加過程可以在讀數(shù)據(jù)時進行,同時記錄女生的人數(shù),最后就可以算出平均分?!舅惴枋觥慷x并初始化count用于統(tǒng)計人數(shù);定義并初始化SumMath、SumPhy
14、、SumEng;STUDENT stu;利用ifstream打開當(文件尚未讀完)利用“>>”符號讀取一行信息到stu;若(stu.Sex 為“女”) 輸出信息;累加各科的成績到SumMath、SumPhy、SumEng;count +;計算平均分并輸出到屏幕;【思考問題】什么時候必須用數(shù)組先將學(xué)生的信息全保存下來,再作進一步處理。試舉出幾個例子。# include <iostream># include <fstream># include <iomanip>using namespace std;struct Studentchar ID10
15、;/學(xué)號char Name15;/姓名char Sex3;/性別int math;/高數(shù)成績int phy;/物理成績int eng;/英語稱績;int main(void)Student stu;int count=0;double Summath=0;double Sumeng=0;double Sumphy=0;ifstream in("stu.txt");if(!in)cout<<"Connot Open the file!"return 1;cout<<"您打開文件中女生成績信息為:"<<
16、endl;cout<<"姓名"<<" 數(shù)學(xué)成績"<<" 物理成績"<<" 英語成績"<<endl;while(in)in>>stu.ID>>stu.Name>>stu.Sex>>stu.math>>stu.phy>>stu.eng;if(in)if(strcmp(stu.Sex,"女")=0)cout<<stu.Name<<'t
17、9;<<stu.math<<'t'<<stu.phy<<'t'<<'t'<<stu.eng<<endl;count+; Summath+=stu.math; Sumeng+=stu.eng; Sumphy+=stu.phy; cout<<"女生各科平均成績?nèi)缦拢?quot;cout<<endl<<"數(shù)學(xué)成績 "<<" 物理成績 "<<" 英語成績
18、"<<endl;cout<<Summath/count<<'t'<<setw(9)<<Sumphy/count<<'t'<<Sumeng/count<<endl;return 0;(在此填入程序及實驗結(jié)果截圖)(4)定義基類:字符窗口類,以及其派生類:矩形類、三角形類和菱形類,分別顯示它們的字符形狀圖。 定義一個字符窗口類作為基類,包括顯示變量值的公有成員虛函數(shù);定義一個矩形類作為派生類,包括顯示字符形狀圖的公有成員函數(shù);定義一個三角形類作為派生類,包括顯示
19、字符形狀圖的公有成員函數(shù);定義一個菱形類作為派生類,包括顯示字符形狀圖的公有成員函數(shù);最后在主函數(shù)中定義它們的各一個對象并調(diào)用這些函數(shù),顯示結(jié)果?!颈绢}目的】練習類的多態(tài)、虛函數(shù)的使用。 (1)問題分析定義字符窗口類及字符形狀圖的函數(shù);定義矩形類,繼承字符窗口類及包括字符形狀圖的函數(shù);定義三角形類,繼承字符窗口類及包括字符形狀圖的函數(shù);定義菱形類,繼承字符窗口類及包括字符形狀圖的函數(shù);在主函數(shù)中定義四個對象,并顯示結(jié)果。 (2)編程指導(dǎo) 字符窗口類的基本格式如下:class Window顯示字符形狀圖的虛函數(shù):virtual void show(); 矩形類的基本格式如下:class Rect
20、angle:public Window顯示字符形狀圖的函數(shù): void show(); 三角形類的基本格式如下:class Triangle:public Window顯示字符形狀圖的函數(shù): void show(); 菱形類的基本格式如下:class Diamond:public Window顯示字符形狀圖的函數(shù): void show();主函數(shù)的格式如下:int main()定義四個對象顯示結(jié)果 return 0 ;運行結(jié)果* * * * * * * * * * * * * * * *# include <iostream>using namespace std;class Windowpublic:virtual void show(); class Rectangle:public Windowpublic:void show()for (int i=0;i<4;i+)cout<<"*"<<endl; class Triangle:public Windowpu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度WPS辦公軟件租賃借款合同樣本3篇
- 二零二五年度商務(wù)汽車贈與合同范本3篇
- 2024年電子支付服務(wù)合同
- 2025年度機械制造技術(shù)轉(zhuǎn)讓合同12篇
- 2025年新能源汽車充電樁建設(shè)與運營管理合同模板3篇
- 2024年版:人工智能技術(shù)研發(fā)與授權(quán)合同
- 在線零售商城系統(tǒng)升級合同
- 2025年度特殊教育學(xué)校臨時教師聘用合同3篇
- 2024版城市軌道交通照明工程合同
- 動車組維修保養(yǎng)服務(wù)協(xié)議
- 2024年06月上海廣發(fā)銀行上海分行社會招考(622)筆試歷年參考題庫附帶答案詳解
- TSG 51-2023 起重機械安全技術(shù)規(guī)程 含2024年第1號修改單
- 計算機科學(xué)導(dǎo)論
- 浙江省杭州市錢塘區(qū)2023-2024學(xué)年四年級上學(xué)期英語期末試卷
- 《工程勘察設(shè)計收費標準》(2002年修訂本)
- 2024年一級消防工程師《消防安全技術(shù)綜合能力》考試真題及答案解析
- 2024-2025學(xué)年六上科學(xué)期末綜合檢測卷(含答案)
- 安徽省森林撫育技術(shù)導(dǎo)則
- 2024年湖南省公務(wù)員考試《行測》真題及答案解析
- 超聲科危急值內(nèi)容及報告制度
- 過賬協(xié)議模板
評論
0/150
提交評論