第八章 課後習題

習題

一、填空題

(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);

D. cin>>setf(iosthex.ios: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   )是錯誤的。
A. cout<<'A';                                          B. cout<<put('A');
C. coul. put('A');                                     D. char a='A'; cout< < a;

(11)關於對getline()函數的下列描述中,(  A   )是錯誤的。
A.該函數所使用的終止符只能是換行符
B.該函數是從鍵盤上讀取字符審的
C.該函數所讀取的字符串的長度是受限制的
D. 該函數讀取字符審時遇到終止符便停止
(12) 下面( A  B C   )語句能把"Hello,students"賦值給一個字符數組string[50].
A. cin> > string;                                B. cin. getline(string ,80);
C. cin, get(string,40,'\n');                    D. cin. get(string);
(13)關於read()函數的下列描述中,(   C    )是正確的。
A.該函數只能從鍵盤輸人中獲取字符串
B.該函數只能用於文本文件的操作
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;
}

程序輸出結果如下:



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章