第17章输入输出流_第1页
第17章输入输出流_第2页
第17章输入输出流_第3页
第17章输入输出流_第4页
第17章输入输出流_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第十七章 输入/输出流,杨章伟 e-mail:,课程内容安排,C+中引入标准输入/输出流的原因。 常用标准输入/输出流对象。 输入/输出流成员函数的使用和格式控制。,输入/输出流简介,C+完全支持C的输入/输出系统,但由于C的输入/输出系统不支持类和对象,所以C+又提供了自己的输入/输出系统,并通过重载运算符“”来支持类和对象的输入/输出。C+的输入/输出系统是以字节流的形式实现的。 C+没有使用C的输入/输出函数库,而是使用iostream类库。iostream是通过类的继承,以及类的成员函数的重载来实现的,从而使iostream类库使用统一的函数接口操作标准I/O、文件、存储块等输入/输出

2、设备。同时,iostream类库具有很好的扩展性,用户可通过重载对其进行扩展。,标准输入/输出流,C+将一些常用的流类对象,如键盘输入、显示器输出、程序运行出错输出、打印机输出等,定义并内置在系统中,供用户直接使用。这些系统内置的用于设备间传递数据的对象称为标准流类对象,共有4个。 cin对象:与标准输入设备相关联的标准输入流。 cout对象:与标准输出设备相关联的标准输出流。 cerr对象:与标准错误输出设备相关联的非缓冲方式的标准输出流。 clog对象:与标准错误输出设备相关联的缓冲方式的标准输出流。,输入/输出流成员函数,C+中,输入/输出流除了可以使用前面介绍的输入/输出流对象外,类i

3、stream还有三个从流中进行非格式化抽取的成员函数:get()、getline()、put()、read()和write()函数及其他成员函数。,输入/输出格式控制,C+仍可使用C中的printf()和scanf()进行格式化控制。同时,C+又提供了两种格式化控制的方法:一种是使用ios类中的有关格式控制的成员函数,另一种是使用被称为格式控制符的特殊类型的函数。 一般来说,ios类的成员函数进行格式控制主要是通过对格式状态字、域宽、填充字符和输出精度操作来完成的。 使用ios类的成员函数控制输入/输出格式时,每个函数的调用都要写一条语句,它们还不能直接嵌入到输入/输出语句中,这使得使用很不方

4、便。为此,C+由提供了另外一种输入/输出格式的控制方法,即使用一种称为格式控制符的特殊函数。,重载输出运算符“”,重载输出运算符“”也称为插入运算符,用于用户自定义类型数据的输出。重载运算符“”的一般形式为: ostream 其中,第一个参数stream是对ostream对象的引用,必须是输出流,它可以是其他合法的标识符,但必须与return后面的标识符相同;第二个参数接收将被输出的对象。,重载输入运算符“”也称为提取运算符,用于用户自定义类型数据的输入。定义运算符“”重载函数的一般形式为: istream 其中,第一个参数stream是对istream对象的引用,必须是输入流,它可以是其他合

5、法的标识符,但必须与return后面的标识符相同。第二个参数是一个引用,前面的“ int main() char bufN; ostrstream out1(buf,sizeof(buf); int a=50; for(int I=0;I6;I+,a+=10) out1”a=”a”,”; out1 0 cout”Buf:”bufendl; double PI=3.1415926; out1.setf(ios:fixed|ios:showpoint); out1.seekp(0); out1”the value of ip=”PI 0 coutbufendl; char *pstr=out1.s

6、tr(); coutpstrendl; ,【分析】该试题主要考查输出流的实现。上述程序段定义了输出流对象out1,并通过循环语句将变量a中的值输出,同时调用输出流的格式控制函数setf和seekp函数对输出格式进行控制,并输出一个浮点型变量的值。根据循环语句和输出格式,其输出结果如下: Buf:a=50;a=60;a=70;a=80;a=90;a=100; The value of pi is 3.14159265 The value of pi is 3.14159265,【题目249】 cin是( )的一个对象,处理标准输入。cout、cerr和clog是( )的对象,cout处理标准输出

7、,cerr和clog都处理标准出错信息,只是( )输出不带缓冲,( )输出带缓冲。 AistreamBostreamCcerrDclog 【分析】该试题主要考查输入输出流的一些对象。根据前面学习的内容,读者知道输入流cin是istream类流的对象,而cout、cerr和clog等3个都是ostream类的对象。其中,cout处理标准输出,cerr和clog都处理标准出错信息,其区别在于前者是非缓冲输出,后者为带缓冲输出。因此,根据如上原则,该试题的正确选项应为ABCD。,【题目250】分析下列程序的输出结果: #include using namespace std; int main()

8、char buf=” 12345” int I,j; istrstream s1(buf); s1I; istrstream s2(buf,3); s2j; coutI+jendl; ,【分析】该试题主要考查输入流类的问题。上述程序中定义了字符数组并为其赋初值12345,同时创建了输入流对象s1,通过该对象来对字符数组进行操作,最后将变量I和j中的值进行相加。根据前面学习的内容,读者可以分析出,该程序的输出结果为12468。 【题目251】编写一个程序,统计从键盘上输入每一行字符的个数,从中选出最长的行的字符个数,统计共输入多少行。 【分析】该试题主要考查输入流对象的成员函数的使用。该试题的实

9、现可以在接收用户输入的同时就通过对象cin的成员函数gcount进行字符个数的统计,同时通过一个循环语句接收用户的输入,使用cin的成员函数getline()判断用户的输入是否完成。,【题目252】有一元二次方程ax2+bx+c=0,其一般解为 x、1、2= 但若a=0,或b2-4ac0时,用此公式出错。 编写一个C+程序,从键盘输入a,b,c的值,求x1和x2。如果a=0或b2-4ac0,输出出错信息。 【分析】该试题主要考查cerr和clog等标准输出流对象的使用。该试题要求在a=0或b2-4ac0时不能使用求根公式,并输出错误信息,此处即可使用cerr输出流来实现。判断是否出错可通过分支

10、结构的if语句来实现。 【题目253】编写一个C+程序,从键盘输入一行字符,逐个读入字符,将读入字符赋给字符变量c,然后输出该字符。,【题目254】编写一个程序,将已有一个字符串BASIC,要求把它们按相反的顺序输出。 【分析】该试题主要考查输出流cout的成员函数问题。该试题可首先定义一个字符串并将其初始化为BASIC,再通过循环语句,从字符串的最后一个字符开始通过标准输出流cout的put()函数进行输出,直到输出字符串的第一个字符为止。 【核心代码】 #include using namespace std; int main() char *a=BASIC; /字符指引指向B for(

11、int i=4;i=0;i-) cout.put(*(a+i); /从最后一个字符开始输出 cout.put(n); return 0; ,【题目255】编写一个程序,建立类triangle,用来存储直角三角形的宽与高,在该类中重载输出运算符函数“ EF55GZ 则输出为: Digit string 1 is: 012 Digit string 2 is: 378 Digit string 3 is: 274 Digit stirng 4 is: 55,【题目257】程序中有说明语句: int a1; char a2 ; double a3 ; 根据下面的输出要求写出相应的cout语句。 (1)输出a1、a2、a3的值,每两个值之间用5个空格间隔。; (2)以固定长度10按左对齐方式输出变量a1的值。 (3)以固定长度10按左对齐方式输出变量a1的值,如果a1值为正,要求输出前面的正号。 (4)以固定长度15按右对齐方式输出变量a3的值,用填充字符*填充不足部分(用浮点数的定点数表示法表示)。 (5)以固定长度15、小数点后保留3位、按左对齐方式输出变量a3的值。,【题目258】定义一个Dog类,包含体重和年龄两个数据成员及相应的成员函数。声

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论