一、填空題
(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 B. ios::right C. ios::hec D. ios::oct
(8) 下列格式控制符,在iostream. h中定義的是( A D ),在iomanip.b中定義的是( B C )。
A. endl B. setfill C. setw D. oct
(9)控制輸出格式的控制符中,( D )是設置輸出寬度的。
A. ws B. ends C. sefill() D. setw()
(10)下列輸出字符'A'的方法中,( B )是錯誤的。
(11)關於對getline()函數的下列描述中,( A )是錯誤的。
A.該函數所使用的終止符只能是換行符
B.該函數是從鍵盤上讀取字符審的
C.該函數所讀取的字符串的長度是受限制的
D. 該函數讀取字符審時遇到終止符便停止
(12) 下面( A B C )語句能把"Hello,students"賦值給一個字符數組string[50].
C. cin, get(string,40,'\n'); D. cin. get(string);
(13)關於read()函數的下列描述中,( 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 代碼表示一個字符,文本文件的優點是可直接按字符形式輸出,供人們閱讀。二進制 文件則是把數據的內部存儲形式原樣作放到文件中。這種文件的優點是與數據在內存中的存儲形式保持一致,因此存儲效率高,無須進行存儲形式的轉換,但不能直接按字符形式輸出。對於那些保存中間運算結果的臨時工作文件,使用二進制形式較爲合理。
五、程序分析題(寫出程序的輸出結果並分析輸出結果)
#include<bits/stdc++.h>
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
char buf[80];
ofstream outfile;
outfile.open("data.txt");
if(!outfile)
{
cout<<"can't open the file"<<endl;
exit(1);
}
outfile<<"hello,students!"<<endl;
outfile<<"welcome you to oop!"<<endl;
outfile.close();
ifstream infile;
infile.open("data.txt");
if(!infile)
{
cout<<"can't open the file"<<endl;
exit(1);
}
while (!infile.eof())
{
infile.getline(buf,80);
cout<<buf<<endl;
}
infile.close();
return 0;
}
程序輸出結果如下:
分析:程序首先定義了一個字符型數組buf,創建輸出流對象outfile,然後以輸出的方式打開data.txt,如果打開失敗則if表達式裏的語句,輸出Can't open the file。接着執行下面的語句,將Hello,students!和Welcome you to oop!輸出到data.txt文件中,最後關閉outfield文件。下面的infile功能一樣,不同的是outfile是輸出流對象,infile是輸入流對象。white語句的功能是判斷進行文件提取時是否到達文件尾,如果沒有到達,則執行white語句裏面的內容。
六、程序設計題
(1)定義一個分數類fraction,通過重載的運算符“<<”以分數形式輸出分數的結果,如將三分之二輸出爲2/3。
編寫程序如下:
#include<iostream>
using namespace std;
class fraction
{
public:
fraction(int x=0,int y=1);
friend ostream& operator<<(ostream&,fraction);
private:
int den;
int num;
};
fraction::fraction(int x,int y)
{
den=x;
num=y;
}
ostream& operator<<(ostream& os,fraction fr)
{
os<<fr.den<<'/'<<fr.num;
return os;
}
int main()
{
fraction fenshu(2,3);
cout<<"分數= "<<fenshu<<endl;
return 0;
}
程序輸出結果如下:
(2)按一行一行的方法將一個文本文件複製到另一個文件中。
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
char str[80];
ifstream infile("f1.txt");
ofstream outfile("f2.txt");
if(!infile||!outfile)
{
cout<<"File cannot be opened."<<endl;
return 0;
}
while(!infile.eof())
{
infile.getline(str,sizeof(str));
outfile<<str<<endl;
}
infile.close();
outfile.close();
return 0;
}
程序輸出結果如下:
(3)編寫一個程序來統計文件file.txt的字符個數。
編寫程序如下:
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
fstream f("test.txt",ios::in);
int n=0;
char c;
while((c=getchar())!='\n'){
if((c>='a'&&c<='z')||c>='A'&&c<='Z')
n++;
}
printf("The number of letters is:%d\n",n);
return 0;
}
程序輸出結果如下: