天天看點

2015級C++第16周實踐項目 檔案

(1)下面程式的功能是統計文本檔案abc.txt中的字元個數,請填空将程式補充完整。

(2)下面程式的功能是将文本檔案abc.txt中的所有行加上行号後寫到newabc.txt檔案中,請填空将程式補充完整。

注://這個程式設計上有問題,見參考解答中的讨論

  檔案score.dat中儲存的是若幹名學生的姓名和c++課、高數和英語成績。

  (1)定義學生類,其中包含姓名、c++課、高數和英語成績及總分資料成員。

(2)用對象數組進行存儲學生的成績,讀入成績并計算總分;将總分高于平均總分且沒挂科的同學的資訊儲存到檔案pass_score.dat中。

讨論:   學生人數和總分的另外一種解決方法是用全局變量。但這兩種資訊與學生有關,是學生類的“屬性”,成為學生類的資料成員合适;這兩種資訊由學生整體決定,用作靜态資料成員合适。如不了解這樣設計的理由,複習課程前面的相關内容。

  做一個簡單的電子詞典。在檔案dictionary.txt中,儲存的是英漢對照的一個詞典,詞彙量近8000個,英文、中文釋義與詞性間用’\t’隔開。程式設計式,由使用者輸入英文詞,顯示詞性和中文釋義。

  

2015級C++第16周實踐項目 檔案
提示1:可以定義一個word類表示一個詞條,其中的資料成員string english;表示英文單詞,string chinese;表示對應中文意思,string word_class;表示該詞的詞性;還可以定義一個dictionary類,用來表示詞典,其中word words[8000]成員表示詞典中的詞條,int wordsnum;表示詞典中的詞條數,在構造函數中從檔案讀入詞條,而專門增加一個成員函數用于查單詞。 提示2:檔案中的詞彙已經排序,故在查找時,用二分查找法提高效率。 提示3:這樣的項目,最好用多檔案的形式組織

  (1)定義學生類,其中包含學号、姓名、c++課、高數和英語成績及總分資料成員,成員函數根據需要确定。

  (2)讀入學生的成績,并求出總分,用對象數組進行存儲。ascii檔案score.dat中儲存的是100名學生的學号、姓名和c++課、高數和英語成績。

  (3)将所有資料儲存到一個二進制檔案binary_score.dat中,最後通過鍵盤輸入你的資訊,并寫入到檔案中(咱不謙虛,三科全100分,期末求好運)。

  (4)為驗證輸出檔案正确,再将binary_score.dat中的記錄逐一讀出到學生對象中并輸出檢視。

  (5)用binaryviewer指令檢視二進制檔案檔案

  (1)做一個類似binaryviewer的檢視二進制檔案的程式,輸入檔案名後,可以以16進制和ascii對照的方式列出該檔案的内容,可以參考下圖:

2015級C++第16周實踐項目 檔案
提示:   循環中,一次讀入16個位元組,先用16進制形式輸出,再用字元形式輸出。

  (2)通過為main函數加參數,在指令行方式下,輸入“指令加檔案名”的方式,就可以顯示該檔案的内容,也采用如上16進制和ascii對照的形式。

  在codeblocks等ide中都提供了代碼格式整理的功能。完成這種功能的程式,操作的資料是用c++寫的源代碼檔案。c++源檔案是一種文本檔案,可以通過程式進行操作。

  內建開發環境(ide)對對程式進行編譯,操作的“資料”是源程式。編譯中,要對源程式進行詞法檢查和文法檢查,後續還要進行目标代碼生成、代碼優化等工作。相關的技術将在《編譯原理》課中學習。這些技術可以用在很多領域,當然也能夠讓我們對于程式設計語言有更深的了解。

  本項目将以c++源程式為操作對象,完成對源程式的一系列處理。各功能可以分别編制一個程式實作(建議用這種簡單的方案),也可以将其內建在一起(向着自己做出ide努力)。

  (1)讀入一個c++程式,判斷其中是否隻有一個main()函數,輸出“暫時沒有發現問題”,或者“沒有main()函數”,或者“不能定義多個main()函數”;

提示1:簡單處理,可以隻比較判斷”main()”,考慮實際上的各種可能,main後面的括号中有任意多個空格及void的都應該算在内。建議按最簡單的情形處理。 提示2:建議設計一個函數,将讀到的代碼與字元串”main()”進行比較。函數用于判斷s1是否“包含”在讀入的一行s2中,調用時,形參s1處的實參用”main()”即可,這樣寫提升了“抽象”級别,更容易實作,對應更高的代碼品質。

  (2)讀入一個c++程式,使程式中的所有左花括号“ {”和右花括号“}”都單獨占一行,新程式儲存到另一個.cpp檔案中,并在螢幕上顯示處理過的程式,顯示時加上行号。

  (3)讀入一個c++程式,輸入m、n兩個數字,從第m行起的n行代碼将作為注釋使用(即在這些行前面加上”//”),新程式儲存到另一個.cpp檔案中,并在螢幕上顯示處理過的程式,顯示時加上行号。

  (4)文字處理領域能做的工作也就此向大家敞開大門,在課程首頁中,還提供了一些功能作為選做内容,請有餘力的同學參考。

(選做)讀入一個c++程式,将程式中的所有注釋(包括//形式和/…/形式的)删除,新程式儲存到另一個.cpp檔案中,并在螢幕上顯示處理過的程式,顯示時加上行号。

  (5)(選做)讀入一個c++程式,使程式中:(1)所有左花括号“ {”和右花括号“}”都單獨占一行;(2)每個語句單獨占一行;(3)各行采用統一的縮格排放(每遇一個“ {”,其下一行的程式,在第一個有意義的符号前的空格數增加4(也可以是增加一個’\t’),每遇一個“}”,其下一行的程式,在第一個有意義的符号前的空格數減少4(也可以是一個’\t’))。

繼續閱讀