第八章 习题

一、填空题

(1)在C++的输入输出系统中,最核心的对象是  流(stream)  。执行输入和输出操作的类体系叫做 流 类  。

(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)进行文件输入操作时应包含()文件

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 代码表示一个字符,文本文件的优点是可直接按字符形式输出,供人们阅读。二进制 文件则是把数据的内部存储形式原样作放到文件中。这种文件的优点是与数据在内存中的存储形式保持一致,因此存储效率高,无须进行存储形式的转换,但不能直接按字符形式输出。对于那些保存中间运算结果的临时工作文件,使用二进制形式较为合理。

  五、程序分析题(写出程序的输出结果并分析输出结果)

[cpp]  view plain  copy
  1. #include<bits/stdc++.h>    
  2. #include<iostream>    
  3. #include<fstream>    
  4. using namespace std;    
  5. int main()    
  6. {    
  7.     char buf[80];    
  8.     ofstream outfile;    
  9.     outfile.open("data.txt");    
  10.     if(!outfile)    
  11.     {    
  12.         cout<<"can't open the file"<<endl;    
  13.         exit(1);    
  14.     }    
  15.     outfile<<"hello,students!"<<endl;    
  16.     outfile<<"welcome you to oop!"<<endl;    
  17.     outfile.close();    
  18.     ifstream infile;    
  19.     infile.open("data.txt");    
  20.     if(!infile)    
  21.     {    
  22.       cout<<"can't open the file"<<endl;    
  23.         exit(1);    
  24.     }    
  25.     while (!infile.eof())    
  26.     {    
  27.         infile.getline(buf,80);    
  28.         cout<<buf<<endl;    
  29.     }    
  30.     infile.close();    
  31.     return 0;    
  32. }  

运行结果


六、程序设计题

(1)定义一个分数类fraction,通过重载的运算符“<<”以分数形式输出分数的结果,如将三分之二输出为2/3。

[cpp]  view plain  copy
  1. //xt8_1.cpp  
  2. #include <iostream.h>  
  3. class Fraction  
  4. {  
  5.     public:  
  6.         Fraction(int x=0,int y=1);  
  7.         friend ostream& operator<<(ostream&,Fraction&);  
  8.     private:  
  9.         int den;    //分子  
  10.         int num;    //分母  
  11. };  
  12. Fraction::Fraction(int x,int y)  
  13. {  
  14.     den=x;  
  15.     num=y;  
  16. }  
  17. ostream& operator<<(ostream& os,Fraction& fr)  
  18. {  
  19.     os<<fr.den<<'/'<<fr.num;  
  20.     return os;  
  21. }  
  22. int main()  
  23. {  
  24.     Fraction fenshu(2,3);  
  25.     cout<<"fenshu= "<<fenshu<<endl;  
  26.     return 0;  
  27. }  

运行结果


(2)按一行一行的方法将一个文本文件复制到另一个文件中。

[cpp]  view plain  copy
  1. #include <fstream>  
  2. using namespace std;  
  3. int main()  
  4. {  
  5.     char str[80];  
  6.     ifstream infile("f1.txt");//以输入方式打开文件f1.txt  
  7.     ofstream ("f2.txt");//以输出方式打开文件f2.txt  
  8.     if (!infile||!outfile)  
  9.     {  
  10.         cout<<"File cannot be opened."<<endl;  
  11.         return 0;  
  12.     }  
  13.     while(!infile.eof())//从文件f1.txt中读出数据,并输出到f2.txt。  
  14.     {  
  15.         infile.getline(str,sizeof(str));//从文件中读出一行数据  
  16.         outfile<<str<<endl;  
  17.     }  
  18.     infile.close();  
  19.     outfile.close();  
  20.     return 0;  
  21. }  

运行结果


(3)编写一个程序来统计文件file.txt的字符个数。

[cpp]  view plain  copy
  1.   
[cpp]  view plain  copy
  1. #include <iostream>  
  2. #include <fstream>  
  3. using namespace std;  
  4. int main()  
  5. {  
  6.     int count=0;  
  7.     ifstream infile("file.txt");//以输入方式打开文件file.txt  
  8.   
  9.     if (!infile)  
  10.     {  
  11.         cout<<"File cannot be opened."<<endl;  
  12.         return 0;  
  13.     }  
  14.     while(!infile.eof())//从文件file.txt中读出数据  
  15.     {  
  16.         infile.get();  
  17.         count=count+1;  
  18.     }  
  19.     cout<<"文件有:"<<count<<"个字符"<<endl;  
  20.     infile.close();  
  21.     return 0;  
  22. }  


运行结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值