一、填空題
(1)在C++的輸入輸出系統中,最核心的對象是 流 。執行輸入和輸出操作的類體系叫做 流類 。
(2)當實際進I/O操作時,cin與 標準輸入 設備相關聯。
(3)C++的流類庫預定義了4個流,它們是 cin 、 cout 、 cerr 、和 clog 。
(4)使用文件流類庫的程序必須用#include編譯指令將頭文件 fstream.h 包含進來。
(5)C++的I/O流類庫提供了2種控制格式輸入輸出的方法。一種是用 ios類的成員函數 ,另一種是 使用控制符 。
(6)按數據的存取方式來分類,文件可分爲 順序文件 和 隨機讀寫文件 。
(7)C++中共有3種文件流,它們是 輸入文件流 、 輸出文件流 、和 輸入/輸出文件流 。
(8)打開文件就是使一個文件流對象與 一個指定的文件 相關聯。
(9)如果打開文件失敗,則流對象的值爲 0 。
(10)最好用istream的函數和 read ostream 的函數 write 分別來讀/寫二進制文件。
二、選擇題(至少選一個,可以多選)
(1)進行文件輸人操作時應包含( B )文件。
A. ifstream.h
B. fstream.h
C. ofstream.h
D.iostream. h
(2)下列類中( A )不是輸人輸出流類iostream的基類。
A. fstream
B. istream
C. ostream
D.ios
(3)在下列選項中( B C D )是ostream類的對象。
A. cin
B. cerr
C. clog
D. cout
(4)使用控制符進行格式輸出時,應包含( C )文件。
A. iostream. h
B. math. h
C. iomanip. h
D. fstream. h
(5)在ios類提供的控制格式標誌字中,( A )是轉換爲十六進制形式的標誌常量。A. hex
B. oct
C. dec
D. right
(6)下列選項中,用於清除基數格式位設置以八進制輸出的語句是( C )。A. cout< <setf(ios:.dec ,ios:basefield);
B. cout< <setf(ios::hex,iosbasefield);
C. cout< < setf(iosl.octios..; basefield);
(7)函數stais:dusifiled中a的值可以是( A B )
A. ios::left
(8) 下列格式控制符,在iostream. h中定義的是( A D ),在iomanip.b中定義的是( B C )。
A. endl
(9)控制輸出格式的控制符中,( D )是設置輸出寬度的。
A. ws
(10)下列輸出字符'A'的方法中,( B )是錯誤的。
(11)關於對getline()函數的下列描述中,( A )是錯誤的。
A.該函數所使用的終止符只能是換行符
B.該函數是從鍵盤上讀取字符審的
C.該函數所讀取的字符串的長度是受限制的
D. 該函數讀取字符審時遇到終止符便停止
(12) 下面( B C )語句能把"Hello,students"賦值給一個字符數組string[50].
C. cin, get(string,40,'\n');
(13)關於read()函數的下列描述中,( C )是正確的。
C.該函數只能按規定讀取指定數目的字符
D.從輸人流中讀取一行字符
(14)在打開磁盤文件的訪問方式常量中,( C )是以追加方式打開文件的。
A. in
B. out
C. app
D. ate
(15)下面( B C D )語句以寫的方式打開文件“myfile. dat”。
A. ifstream infile( "myfile. dat" ,ios:in);
B. fstream infile("myfile. dat" ,ios::app);
C. fstream infile( "myfile. dat" ,ios::out);
D. ofstream infile( "myfile. dat");
(16)假定已定義整型變量data,以二進制方式把data的值寫人輸出文件流對象outile中去,正確的語句是( C )
A. outfile. write((int* )&data ,sizeof(int));
B. outfile. write((int* )&data,data);
C. outfile. write( (char* )&data ,sizeof(int));
D. outfile, write((char* )&data,data);上iesd
三、判斷題
(1)流格式標誌字的每位表示一種格式,格式位之間互不影響。 (錯)
(2)控制符本身是一一種對象,它可以直接被提取符或插人符操作。 (對)
(3)預定義的提取符和插人符都是可以重載的。 (對)
(4)函數write()是用來將一個字符串送到一種輸出流中,但必須將一個字符串中全部字符都送到輸出流中。 (錯)
(5)以app方式打開文件時,當前指針定位於文件尾。 (對)
(6) read()函數只能用於文本文件的操作中。 (錯)
四、簡答題
(1)分析說明C++語言的流類庫中爲什麼要將ios類作爲其派生類的虛基類。
答: 從流類庫的基本結構可以看到,ios類是istream 類和ostream 類的基類,從ios頭公有派生 istream 和ostream兩個類, 而iostream 類通過多重繼承istream 類和ostream類而產生的。如果不將ios類作爲其派生類的虛基類,可能會產生二義性:
(2)文本文件與二進制文件有什麼區別?並說明在什麼情況下應該使用文本文件?在 什麼情況下使用二進制文件。
答: 在文術文件中,每個字節存放一 個ASCII 代碼表示一個字符,文本文件的優點是可直接按字符形式輸出,供人們閱讀。二進制 文件則是把數據的內部存儲形式原樣作放到文件中。這種文件的優點是與數據在內存中的存儲形式保持一致,因此存儲效率高,無須進行存儲形式的轉換,但不能直接按字符形式輸出。對於那些保存中間運算結果的臨時工作文件,使用二進制形式較爲合理。