版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、暨南大學(xué)本科實驗報告專用紙(附頁)暨南大學(xué)本科實驗報告專用紙課程名稱 C+ 程序設(shè)計 成績評定 實驗項目名稱 字符串及基本輸入輸出 指導(dǎo)教師 實驗項目編號 02 實驗項目類型 驗證 實驗地點 C304 學(xué)生姓名 學(xué)號 學(xué)院 系 專業(yè) 軟件工程 實驗時間 2010年 4月 14 日 上午 一、實驗?zāi)康膌 進一步熟悉C+的標(biāo)準(zhǔn)輸入、輸出功能; l 熟悉vector類型的使用;l 進一步熟悉string類型的使用。二、實驗環(huán)境P4 1.7G計算機一臺,Windows XP操作系統(tǒng),Microsoft Visual C+ 2005編程環(huán)境。三、實驗內(nèi)容及分析根據(jù)題目要求編寫程序,驗證程序的正確性。撰寫
2、實驗報告并提交紙質(zhì)版本,程序源代碼的電子版發(fā)送至教師的Email信箱。(一)最長的、最短的字符串(本題下課之前提交)1. 題意描述:練習(xí)3-4(輸入以EOF標(biāo)記結(jié)束) 寫一個程序,找出輸入中最長和最短的字符串。2. 問題分析與解決根據(jù)題意,需要得到輸出四個值:最長maxlength,最短minlength以及其對應(yīng)的字符串。先將字符串單個讀取,并逐一進行比較,將當(dāng)前比較所得的字符串最長與最短值分別保存在maxlength 與 minlength 中,并將字符串全部存放在一容器中。然后分別將長度為最長與最短的字符串分別存儲在兩容器中,輸出即可。 預(yù)設(shè)maxlength=0 與minlength=
3、1000 ,并在讀取時進行比較,存入 vector ret 中。將長度為最長與最短的字符分別存入vector longret 與 shortret 中。3. 調(diào)試、測試運行情況及結(jié)果分析(1) 測試數(shù)據(jù)及運行結(jié)果 (2) 結(jié)果分析與結(jié)論根據(jù)輸入的數(shù)據(jù)(上圖上部分),得出最長字符長度33,找到并輸出一個與其相符的字符串:“designers should build an original”;得出最短字符長度6,找到并輸出兩給與其相符的字符串:“it out”、“of the”。程序運行正確,并達到實驗要求。(二)單詞計數(shù)1. 題意描述:練習(xí)4-5(輸入以EOF標(biāo)記結(jié)束)寫一個函數(shù),從輸入流中讀
4、取單詞,并把單詞保存在一個vector 中。然后使用這個函數(shù)寫一個程序,計算輸入中單詞的數(shù)目,并計算每個單詞出現(xiàn)的次數(shù)。2. 問題分析與解決首先,需要將輸入流中的單詞讀取出來并把它保存在一個vector word 中,用到函數(shù) Getwords() ,該函數(shù)有編程者自己定義。然后將vector word中的每個元素單獨作為處理對象,從第一個開始,逐個與其后的元素比較,遇到相同的便從vector word中刪除,并將刪除次數(shù)紀(jì)錄在vector Times中直到最后一個。此為第一輪比較。然后取vector word中的第二個,從第三個開始與其比較,刪除相同的,依此類推。直到 vector word
5、 中沒有相同元素為止。 通過Getwords( )來得到單個單詞: 對單詞進行單個處理,并將vector中的重復(fù)單詞刪除,couts紀(jì)錄刪除次數(shù):3. 調(diào)試、測試運行情況及結(jié)果分析(1) 實驗中碰到的問題及解決方法原想通過構(gòu)造一結(jié)構(gòu)體,分別將word 與 times 分別記錄,然后用以vector存儲,而在存儲前進行必要的比較,若vector中已有該單詞,則只將times自加1,結(jié)果失敗。原因:結(jié)構(gòu)體中只能是靜態(tài)變量(static)。后改用本次實驗中的方法,見“問題分析與解決”。(2) 測試數(shù)據(jù)及運行結(jié)果(3) 結(jié)果分析與結(jié)論輸入:“I love My home , home is a goo
6、d place !”總共10個不同的單詞(標(biāo)點符號算作單個單詞);有輸出可知:該string種有單詞10個,除了home 出現(xiàn)2次,其他的均出現(xiàn)1次。結(jié)果正確,達到實驗要求。(三)異常處理1. 題意描述:3-6在3.1的程序中,如果學(xué)生沒有輸入任何家庭作業(yè)成績,那么計算平均值時可能會除以0。在C+中,除以0是不確定的,也就是說系統(tǒng)會進行隨意操作。首先描述在你的系統(tǒng)在程序運行中出現(xiàn)除以0的情況時如何反應(yīng);然后在3.1節(jié)的程序中添加C+的異常處理,使得程序行為不依賴于系統(tǒng)如何對待除以0的情況。2. 問題分析與解決題中需解決問題:若沒有輸入家庭作業(yè)成績時,使程序行為不依賴與系統(tǒng)對待除以0的處理。只需
7、在得到家庭作業(yè)最終成績前,對輸入的家庭做業(yè)次數(shù)進行判斷是否合法即可。在3.1程序中添加如下部分:3. 調(diào)試、測試運行情況及結(jié)果分析(1) 實驗中碰到的問題及解決方法原代碼:結(jié)果:當(dāng)輸入homework數(shù)位0時,出錯。不太會使用domain_error() 函數(shù)。(2) 測試數(shù)據(jù)及運行結(jié)果當(dāng)輸入0個homework成績時,系統(tǒng)自動處理如下:修改后:提醒出錯!正確輸入并運行正確。(3) 結(jié)果分析與結(jié)論由(2)可知基本達到實驗要求。(四)多個學(xué)生的成績題意描述:練習(xí)4-0,練習(xí)4-6。4-0:編譯、執(zhí)行并測試本章的程序。4-6:重寫Student_info結(jié)構(gòu)來直接計算成績,并且在Student_i
8、nfo結(jié)構(gòu)中只保存最終成績。也就是說,首先,務(wù)必看懂4.5節(jié)的程序,弄清楚每個函數(shù)的來龍去脈,作用何在。然后,將Student_info 結(jié)構(gòu)體的定義改寫為:Student_infostring name, double finalGrade 其中 finalGrade 代表最終成績。根據(jù)這個變化,相應(yīng)的修改4.5節(jié)的程序,完成同樣的功能。1. 問題分析與解決運行本章程序,熟悉本章程的設(shè)計思路,將Student_info改為Student_infostring name, double finalGrade,則需要考慮原程序中除name部分外,其余成績的處理??上染椭鴷纤悸罚瑢idterm
9、,final與homework一齊放到另結(jié)構(gòu)體中單獨進行處理,然后再將計算后的最終成績給finalGrade即可。由于Student_info的改變,檢錯過程也要相應(yīng)改變:2. 調(diào)試、測試運行情況及結(jié)果分析(1) 測試數(shù)據(jù)及運行結(jié)果 正常輸入時,分別得了到最后成績。如“”所指處,當(dāng)輸入有誤時,會出現(xiàn)提示“student has no homework”,繼續(xù)正確給出輸入,則得到正確結(jié)果。出錯!以下為書本第四章程序測試結(jié)果,均正確:出錯?。?) 結(jié)果分析與結(jié)論分析與結(jié)論見(1)。(五)計算平方1. 題意描述:提示用戶輸入一個整數(shù) I,編寫一個程序來計算從1I 的雙精度浮點數(shù)(double)值的平
10、方。程序的輸出分為兩列:第一列是double值,第二列是double值的平方。使用控制器來控制輸出,讓數(shù)值按列左對齊排列起來。 注意,程序應(yīng)當(dāng)有一定靈活性,當(dāng) I 增長時我們不需要修正setw的參數(shù)。(提示:可以先完成練習(xí)4-2,4-3以資借鑒。)2. 問題分析與解決首先,給定整數(shù)I,然后可用for循環(huán)來對數(shù)1I進行平方(I*I即可),接著輸出。輸出用到setw()函數(shù)填充空格數(shù),setiosflags(ios:left)函數(shù)與 resetiosflags(ios:left)函數(shù)分別用于左右對齊。并在做夠大的空間不需對setw()進行改變。3. 調(diào)試、測試運行情況及結(jié)果分析(1) 實驗中碰到的
11、問題及解決方法源代碼: 結(jié)果:平方后,沒有達到右對齊的效果 并且,數(shù)字本身的位數(shù)影響了所占的字節(jié)數(shù)。解決辦法見本題“2。問題分析與解決”。(2) 測試數(shù)據(jù)及運行結(jié)果(3) 結(jié)果分析與結(jié)論分為兩列:左列為數(shù)值,右列為相應(yīng)的平方值。平方值右對齊。達到實驗?zāi)康?。四、實驗小結(jié)(主要表述通過實驗是否達到鞏固知識、學(xué)到在課堂上無法得到的知識補充的目的,并且在哪些方面有待重點提高的,自己對實驗的體會等)基本完成實驗要求,但對于異常處理,還有待加強。書本知識還不能很好地實際運用,需要加強練習(xí)。五、附錄(一)最長的、最短的字符串源程序:#include<iostream>#include<st
12、ring>#include<vector>#include<cctype>/say what standard_library names we useusing std:cin; using std:endl;using std:cout; using std:string;using std:vector;int main()cout<<"Please enter the strings you like ,""followed by end-of-file: "/to give the voctors to
13、 save all the strings and the strings whitch is the shortestvector<string> ret,longret,shortret;string s;/to set the maxlength(mlength),small enough /to set the shortestlenth(slength),large enoughstring:size_type maxlength=0,minlength=1000;/read string and process it one by one and save them i
14、n vector retwhile(getline(cin,s)maxlength=maxlength<=s.size()?s.size():maxlength;minlength=minlength>=s.size()?s.size():minlength;ret.push_back(s); /get the longest strings and the shortest stringsfor(vector<string>:size_type i=0;i!=ret.size();+i)if(reti.size()=maxlength)longret.push_bac
15、k(reti);else if(reti.size()=minlength)shortret.push_back(reti);/output the longest strings cout<<"The length of the longest string is: "<<maxlength<<endl;cout<<" the strings are:* "for(vector<string>:size_type m=0;m!=longret.size();+m)cout<<lon
16、gretm+"* *"cout<<endl;/output the shortest stringscout<<"The length of the shortest string is: "<<minlength<<endl;cout<<" the strings are:* "for(vector<string>:size_type n=0;n!=shortret.size();+n)cout<<shortretn+"* *"c
17、out<<endl;return 0;(二)單詞計數(shù)源程序:#include<iostream>#include<string>#include<vector>using std:cin; using std:cout;using std:string; using std:vector;using std:endl;vector<string> Getwords(string& s)vector<string> ret;typedef string:size_type string_size;string_siz
18、e i=0;/invariant:we have processed charactersoriginal of i,i)while(i!=s.size()/ignore leading lianks/invariant:characters in rang original i,current i) are all spaceswhile(i!=s.size()&&isspace(si)+i;/find end of next wordstring_size j=i;/invariant:none of the characters in rang originalj,cur
19、rent j)is a spacewhile(j!=s.size()&&!isspace(sj)+j;/if we found some nonwhitespace charactersif(i!=j)/copy from s starting at i and taking j-i charsret.push_back(s.substr(i,j-i);i=j;return ret;int main()/ask for the stringcout<<"Please enter a string: " /read and spilt each l
20、ine of inputstring s;getline(cin,s);vector<string> word=Getwords(s);vector<int> Times;vector<string>:size_type i=0;while(i!=word.size()int couts=1;for(vector<string>:size_type m=i+1;m!=word.size();+m)if(wordi=wordm)word.erase(word.begin()+m);+couts;Times.push_back(couts);+i;/
21、output the wordscout<<"There are "<<word.size()<<" words in the string."<<endl;cout<<"The words and their times are in the list below: "<<endl;for(vector<string>:size_type p=0;p!=word.size();+p)cout<<wordp<<" &q
22、uot;<<Timesp<<endl;return 0;(三)異常處理源程序:#include<ios>#include<iostream>#include<string>#include<stdexcept>using std:cin; using std:setprecision;using std:cout; using std:string;using std:endl; using std:streamsize;using std:domain_error;int main()/ask for and read
23、the student's namecout<<"Please enter your first name: "string name;cin>>name;cout<<"Hello,"<<name<<"!"<<endl;/ask for and read the midterm and final gradescout<<"Please enter your midterm and final exam grades: "d
24、ouble midterm,final;cin>>midterm>>final;/ask for the homework gradescout<<"Enter all your homework grades, ""followde by end-of-file: "/the sum and sum of grades read so far int count=0;double sum=0;/a variable into which to readdouble x;/invariant:we have read
25、count grades so far/and sum is the sum of the first count gradeswhile(cin>>x)+count;sum+=x;/write the result /judge if there is any errors(1): if(count=0) cout<<endl<<"You forgot to enter your homework grades," "try again,please!"<<endl<<endl;elsestr
26、eamsize prec=cout.precision(); cout<<"You final grade is "<<setprecision(3) <<0.2*midterm+0.4*final+0.4*sum/count <<setprecision(prec); cout<<endl;return 0; (2): if(count=0) throw domian_error("You have to input your homework.");trystreamsize prec=co
27、ut.precision(); cout<<"You final grade is "<<setprecision(3) <<0.2*midterm+0.4*final+0.4*sum/count <<setprecision(prec);catch(domain_error e)cout<<e.what();cout<<endl;return 0;(四)多個學(xué)生的成績源程序:mian:#include<algorithm>#include<iomanip>#include<
28、;ios>#include<iostream>#include<string>#include<vector>#include"Student_info.h"using std:cin; using std:setprecision;using std:cout; using std:sort;using std:domain_error; using std:streamsize;using std:endl; using std:string;using std:max; using std:vector;int main()/
29、ask for the information of a few studentscout<<"Please enter the information of the student in this order"<<"(name,grade of midterm,final,homeworks): "<<endl;/get the informationvector<Student_info> students;Student_info STUDENT;Grade record;string:size_ty
30、pe maxlen=0; /read and store all the student's datawhile(read(cin,STUDENT.name,record)maxlen=max(maxlen,STUDENT.name.size();/to see if there is any errortrydouble final_grade=grade(record);STUDENT.finalGrade=final_grade;catch(domain_error e)cout<<e.what();students.push_back(STUDENT); /alph
31、abtize the student recordssort(students.begin(),students.end(),compare); /write the name and the gradefor(vector<Student_info>:size_type i=0;i!=students.size();i+)cout<<<<string(maxlen+1-.size(),' ');cout<<studentsi.finalGrade;cout<<e
32、ndl;return 0;*Student_info.h:*#include"grade.h"using std:vector;using std:istream;using std:string;struct Student_infostd:string name;double finalGrade;std:istream& read(istream& is,string&,Grade&);std:istream& read_hw(std:istream&,vector<double>&);bool co
33、mpare(const Student_info&,const Student_info&);bool compare(const Student_info& x,const Student_info& y)return <;istream& read(istream& is,string& name,Grade& record) is>>name>>record.midterm>>record.final;read_hw(is,record.homework);r
34、eturn is;istream& read_hw(istream& in,vector<double>&hw)if(in)hw.clear();double x;while(in>>x)hw.push_back(x);in.clear();return in;*grade.h:*using std:domain_error;using std:vector;struct Gradedouble midterm;double final;vector<double> homework;double grade(double,double,double);double grade(double,double,const std:vector<double>&);double grade(const Grade&);double median(std:vector<double>);double grade(double midterm,double
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024幼兒園保育員幼兒教育理念與實踐合同3篇
- 二零二五年房地產(chǎn)項目海外分銷代理協(xié)議3篇
- 二零二五版國際貿(mào)易人才招聘與培訓(xùn)合同2篇
- 2025年教育設(shè)施智能化改造與裝修服務(wù)合同范本3篇
- 2025年度環(huán)保設(shè)施運營管理合同范本及效益評估3篇
- 專業(yè)車輛運送協(xié)議模板(2024定制版)版B版
- 2024虛擬股投資退出機制合同范本3篇
- 二零二五年度駕校經(jīng)營管理權(quán)定制化服務(wù)協(xié)議2篇
- 二零二五年度文化產(chǎn)業(yè)發(fā)展前景調(diào)研合同3篇
- 二零二五年度汽車售后服務(wù)品牌授權(quán)合同3篇
- 24年追覓在線測評28題及答案
- TGDNAS 043-2024 成人靜脈中等長度導(dǎo)管置管技術(shù)
- 《陸上風(fēng)電場工程概算定額》NBT 31010-2019
- GB/T 29490-2013企業(yè)知識產(chǎn)權(quán)管理規(guī)范
- GB/T 14436-1993工業(yè)產(chǎn)品保證文件總則
- 湖南省鄉(xiāng)鎮(zhèn)衛(wèi)生院街道社區(qū)衛(wèi)生服務(wù)中心地址醫(yī)療機構(gòu)名單目錄
- 《中外資產(chǎn)評估準(zhǔn)則》課件第6章 英國評估準(zhǔn)則
- FZ∕T 63006-2019 松緊帶
- 罐區(qū)自動化系統(tǒng)總體方案(31頁)ppt課件
- BIQS評分表模板
- 工程建設(shè)項目內(nèi)外關(guān)系協(xié)調(diào)措施
評論
0/150
提交評論