当前位置:文档之家› 第14章 输入与输出流类库

第14章 输入与输出流类库

第14章 输入与输出流类库
第14章 输入与输出流类库

第14章输入与输出流类库

C++的I/O流类,是目前最常用的I/O系统。本章介绍C++输入与输出流类库。通过本章的学习,读者可以了解怎样使用C++面向对象的输入/输出流,能够格式化输入和输出,了解I/O流类的层次结构,了解怎样输入/输出用户自定义类型的对象,能够建立用户自定义的流操作符,能够确定输入/输出操作的成功与失败,能够把输出流连到输入流上。

14.1 I/O流类的结构(略)

14.2 文件流类

C++语言把每个文件都看成一个有序的字节流。每个文件或者以文件结束符结束,或者在特定的字节号处结束(该字节号通常记录在由系统维护和管理的数据结构中)。当打开一个文件时,该文件就和某个流关联起来。系统自动生成cin、cout、cerr、clog对象,流使用这些对象所关联的特定文件或输入/输出设备和程序之间建立通信通道。

要在C++中进行文件处理,就要包含头文件头文件包括流类 ifstream(从文件输入)、ofstream(向文件输出)和fstream(从文件输入/输出)的定义。生成这些流类的对象即可打开文件。这些流类分别从istream、ostream 和iostream类派生。其层次结构如图14.2。

ios

istream ostream

ifstream ofstream

iostream

fstream

图14.2 文件流类的继承关系

在C++中,要定义一个文件流类对象,必须规定文件名和打开方式。

类ofstream用于执行文件输出,该类有几个构造函数,其中最有用的是:

ofstream::ofstream(char* pFileName, //指向要打开的文件名字符串

int nMode = ios::out, //打开方式

int nProt = filebuf::openprot); //文件保护方式

nMode参数是打开方式,它的含义见表14.1

nProt是文件保护方式,它的选择项见表14.2。

由于C++把文件看作是无结构的字节流,所以为了在文件中记录特定结构的内容,必须给文件加上记录结构。下面的程序演示了班级学生成绩表,学号作为记录关键字,文件按学号顺序建立和维护。假定用户按学号顺序键入记录,程序将把键入的记录保存并写入文件。程序示例如下。

例14.4 文件流操作实例

//演示文件流操作

#include "stdafx.h"

#include

#include

#include

int main()

{

int regNumber;

char name[30];

float grade;

//使用ofstream类的构造函数打开文件

ofstream outGradeFile("C:\\grade.dat",ios::out);

//也可以先创建输出流类对象,再用open操作打开文件

//ofstream outGradeFile;

//outGradeFile.open("C:\\grade.dat",ios::out);

if(!outGradeFile){

cerr<<"文件不能被打开!"<

exit(1);//函数原形定义在stdlib.h中}

cout<<"请输入学号,姓名,和成绩,\n"

<<"按输入文件结束符结束。\n? ";

while(cin>>regNumber>>name>>grade){

outGradeFile<

<<" "<

cout<<"? ";

}

outGradeFile.close();

ifstream inGradeFile("C:\\grade.dat",ios::in); //也可以先创建输入流类对象,再用open操作打开文件//ifstream inGradeFile;

//inGradeFile.open("C:\\grade.dat",ios::in);

cout<<"? ";

while(inGradeFile>>regNumber>>name>>grade){ cout<

<<" "<

cout<<"? ";

}

inGradeFile.close();

return 0; //ofstream的析构函数将关闭文件

}

程序运行结果如下:

请输入学号,姓名,和成绩,

按输入文件结束符结束。

?123 aaa 78

?234 bbb 89

?345 ccc 69

?^Z

?123 aaa 78

?234 bbb 89

?345 ccc 69

上例中,对于文件名要说明其路径,斜杠要双写,因为编译器理解下的斜杠是字符转换符。这和包含头文件时的路径不一样,因为包含头文件是由编译预器处理的。

文件打开时,对于使用ofstream类构造对象时,其打开方式默认为ios::out|ios::trunc,即该文件每次打开,如果原先存在,则都会先被清空内容,否则就新建。

如果要打开二进制文件,写方式,输出到文件尾,可以如下操作:

ofstream bfile(“binfile”,ios::binary|ios::ate);

也可以生成oftream对象而不打开特定文件,而在后面再将文件与对象相连接。可以如下操作:

ofstream outFile;

outFile.open(“abc.dat”,ios::out);

如果需要打开一个输入文件,从文件中读取数据可以如下操作:

ifstream myinf(“C:\\grade.dat”,ios::nocreate);

if(myinf.fail())

{

cerr<<”打开文件出错!\n”;

return;

}

myinf>>regNumber>>name>>grade;

对于打开文件是否操作成功,可以使用重载的ios运算符成员函数!操作符确定打开是否成功,如果打开操作的流将failbit或badbit置位,则条件(!outGradeFile)返回非0值(true);也可以通过判断fail()成员函数来确定打开文件是否出错。

如果打开文件同时用于输入和输出,则可以如下操作:

fstream myinout(“abc.dat”,ios::in|ios::out);

用fstream打开的文件,打开方式不能默认。

14.3 串流类(不讲)

ostrstream、istrstream、strstream是串流类,在strstrea.h中定义。其中,strstream类是从ostrstream和istrstream类多重继承而来的子类。要定义一个串流类对象,须提供字符数组和数组大小。

类istrstream用于串流输入,该类有几个构造函数,其中最有用的是:

istrstream::istrstream(const char* pch);

istrstream::istrstream(const char* pch,int nLength);

第一个参数指出字符串数组,第二个参数说明数组大小。当size为0时,表示把istrstream类对象连接到由pch指向的以空字符结束的字符串。

类ostrstream用于执行串流输出,该类也有几个构造函数,其中最有用的是:

ostrstream::ostrstream(char* pch,int nLength,int nMode=ios::out);

第一个参数指出字符串数组,第二个参数说明数组大小,第三个参数指出打开方式。

下面的实例演示了如何使用串流输入输出功能。

例14.5 串流输入输出功能实例

//演示串流输入输出功能

#include

#include

#include

char* parseString(char* pch)

{

int number;

float balance;

//计算需要构造的串流类的长度

//strlen返回字符串长度,其定义包含在string.h中

int nLength=strlen("帐号:")

+strlen(" 收支:")

+strlen(pch);

istrstream inp(pch,0); //ios::in方式,读到null结束

inp>>number>>balance; //从串流中读入一个整数和浮点数

char *pBuffer=new char[nLength];

ostrstream outp(pBuffer,nLength);//ios::out方式,字串长度为计算出的nLength,

//刚好满足输出到pBuffer中的长度要求

outp<<"帐号:"<

<<" 收支:"<

//注意该处如果写入超出pBuffer空间长度的字符,

//超出部分将不会被写入

return pBuffer;

}

int main()

{

char *pch="1001 125.45";

char *pBuf=parseString(pch);

cout<

delete []pBuf;

return 0;

}

演示结果如下:

帐号:1001 收支:125.45

在函数parseString()中,先定义了一个输入串流对象inp,将输入设备pch中的字符输入到了一个整数和一个浮点数中,然后,定义了一个输出串流对象outp,将提示信息和这两个变量输出到outp连接的输出设备(实际为一字符串空间)pbuffer中。

注意语句:

outp<<"帐号:"<

<<" 收支:"<

它同时也将提示信息“帐号:”、“收支:”也写入到了输出设备pbuffer中。

14.4 格式控制(浏览)

C++提供了大量用于执行格式化输入/输出的流格式控制以及流对象成员函数。比如:设置域宽、设置精度、设置和清除格式化标志、设置域填充符、刷新流、在输出流中插入换行符并刷新该流、在输出流中插入空字符、跳过输入流中的空白字符等等。

控制符是在头文件iomanip.h中定义的对象,可以将它们直接插入流中,来控制流输入/输出的格式。使用成员函数控制,则需要在格式化输出之前调用相关格式设置成员函数。

14.4.1整数流的基数控制

整数通常被解释为十进制(基数为10)整数。可以通过在流中插入控制符而改变流中整数的基数。插入控制符hex可设置成十六进制基数;插入控制符oct可设置成八进制基数、插入控制符dec可恢复十进制基数。同样可以使用成员函数flags来设置整数流的基数。下面的程序演示了这些控制符和成员函数的用法。

例14.6 整数流格式控制实例

//演示整数流格式控制

#include

#include

int main()

{

int n;

cout<<"输入一个十进制整数:";

cin>>n;

cout<

<

<

<

cout.flags(10);

cout<<"恢复十进制为:"

<

return 0;

}

演示结果如下:

输入一个十进制整数:15

15的十六进制为: f

15的八进制为: 17

恢复十进制为:15

14.4.2设置浮点数精度

控制浮点流的精度,可以使用控制符setprecision或成员函数precision来格式化小数点后面的位数。

语句:

cout<

和语句:

cout.precision(4);

cout<

起到了同样的效果,都将浮点型数据fValue按精确到小数点后面4位数输出。

14.4.3 设置域宽

成员函数ios::width设置当前的域宽(即输入输出的字符数)并返回以前设置的域宽。如果显示数据所需的宽度比设置的域宽小,空位用填充字符填充。如果显示数据所需的宽度比设置的域宽大,显示数据并不会被截断,而是输出所有位,但可能会出现乱码。

控制符setw也可以用来设置域宽。

它们的用法如下:

cout.width(8);

cout<<10;

上面的语句将在输出10之前输出6个空格(默认填充符)。

cout<

这条语句可以起到同样的效果。

需要注意的是setw(n)或width(n)在下一个域输出后,域宽回到原先的默认值。setw()的默认域宽为0,意思是按输出对象的表示宽度输出。

下面的语句中,20将紧挨着10输出。

cout<

14.4.4 设置填充符

可以使用成员函数fill或控制符setfill来改变所要填充的字符。

cout.fill(‘*’);

cout<

输出结果为:

******10

由于输出域宽为8,所以在10前面填充了6个*。

下面的语句将起到同样的效果。

cout<

14.4.5 用户自定义流格式控制符

C++提供了非常多的流格式控制符和成员函数来格式化流输入/输出。上面仅介绍了常用的几种控制和成员函数的使用方法。在这里,再简单介绍一种用户自定义流控制符的方法。先看下面的程序示例:

例14.7 用户自定义流格式控制符实例

//演示用户自定义流格式控制符

#include

//警告符,输出时会发出系统警告声音

ostream& bell(ostream& output){ return output << '\a';}

//回车符

ostream& ret(ostream& output){ return output << '\r';}

//水平制表符,是光标移到下一个制表位

ostream& tab(ostream& output){ return output << '\t';}

//换行符

ostream& endLine(ostream& output)

{

return output<<'\n'<

}

int main()

{

cout<<"测试制表符:"<

<<'a'<

<<"测试回车符和警告符:"

<

cout<

cout<

return 0;

}

演示结果如下:

测试制表符:

a b c

测试回车符和警告符:

-----..

在上面的例子中,演示了如何建立和使用新的流控制符bell、ret、tab和endLine。需要注意的是,程序用endLine插入输出了换行符,然后输出7个省略号.......,输出系统警告声,再插入ret回车,再输出5个破仄号-----,结果省略号被破仄号覆盖了前面部分。

14.5 流类成员函数的使用

在C++中,经常使用cin、cout来做输入/输出。比较常用的I/O流的成员函数有get、getline、put、eof等。

Get函数原型有很多个,比较常用的函数原型有:

char istream::get();

istream& istream::get(char* pch, int nCount,char delim=’\n”);

istream& get( char& rch );

不带参数的get函数从指定的输入流中读取一个字符(包括空白字符),并返回该字符,当遇到输入流中的文件结束符时,返回EOF。

带一个字符型参数的get成员函数自动读取一个字符(包括空白字符)到字符型参数中。当遇到文件结束符时,返回0,否则返回对istream对象的引用。

带三个参数的get成员函数的参数分别是接收字符的字符数组、字符数组的大小和分隔符(默认值为’\n’)。该函数或者在读取比指定的最大字符数少一个字符后结束,或者在遇到分隔符时结束。

下面的程序循环读入字符,直到用户键入一个Y字符,或遇到文件结束符(在UNIX 与Macintosh上,文件结束符为-d,在PC与VAX上文件结束符为-z ):

例14.8 I/O流成员函数的使用实例

//演示I/O流的get、put、eof成员函数的使用

#include

#include

int main()

{

char ch;

while(!cin.eof())

{

ch=cin.get();

ch=toupper(ch);

if(ch=='Y')

{

cout.put(ch);

break;

}

cout<

}

return 0;

}

上例中使用了toupper函数将键入字符全部转换成大写字母后赋值给ch,使用该函数应包含头文件ctype.h。

使用带三个参数的get函数,会比较安全。例如下面这种代码:

istream fin(“abc.dat”);

char buf[80];

fin>>buf;

应改成:

istream fin(“abc.dat”;

char buf[80];

fin.get(buffer,80);

getline成员函数原型为:

getline(char* pch, int nCount,char delim=’\n”);

getline函数与带三个参数的get函数类似,它读取一行信息到字符数组中,然后插入一个空字符。所不同的是,getline要去除输入流中的分隔符(即读取字符并删除它),但是不把它存放在字符数组中,而三个参数的get函数不把分隔符放在数组中,却仍然将它保留在输入流中。下面的程序演示了两者之间的区别:

例14.9演示get、getline的区别实例

//演示get、getline的区别

#include

#include

int main()

{

char str[128];

char lineStr[128];

cout<<"使用get函数,请用键盘输入下面这行字符后按回车:"

<<"\nThis is A Line"<

cin.get(str,sizeof(str),'A');

cout<<"First line:"<

cin.get(str,sizeof(str));

cout<<"Second line:"<

cout<<"使用getline函数,请用键盘输入下面这行字符后按回车:"

<<"\nThis is A Line"<

cin.getline(lineStr,sizeof(lineStr),'A');

cout<<"First line:"<

cin.getline(lineStr,sizeof(lineStr));

cout<<"Second line:"<

return 0;

}

演示结果如下:

使用get函数,请用键盘输入下面这行字符后按回车:

This is A Line

This is A Line

First line:This is

Second line:A Line

使用getline函数,请用键盘输入下面这行字符后按回车:

This is A Line

This is A Line

First line:

This is

Second line: Line

可以看到使用get函数,A被保留在输入流中,成为了第二行的第一个字母,使用

getline函数,A被删除掉了。需要注意的是,使用getline时,输出的第一行字符掉到了下一行,原因在于前面第二次使用get输入时,默认分隔符为换行符,所以第一次使用getline时,实际上首先输入的是仍然保留在输入流中的换行符。

14.6 数据文件的I/O操作

在C++中,对于文件的输入/输出,可以使用流类 ifstream(从文件输入)、ofstream (向文件输出)和fstream(从文件输入/输出。

get()和put()只能进行单个字符的读写。Read()和write()则能够实现成组读写。

●write函数

原型:istream& write(const unsigned char * ch_buffer,int number_bytes);

功能:缓冲ch_buffer中写number_bytes个字节到输出流文件中。

●read函数

原型:istream& read(unsigned char * ch_buffer,int number_bytes);

功能:从输入流文件中读number_bytes个字节到缓冲ch_buffer中。

程序举例:

#include

#include

#include

struct st{

char num[10];

char name[30];

char addr[40];

};

int main()

{

static struct st obj;

//使用ofstream类的构造函数打开文件

ofstream outGradeFile;

outGradeFile.open("C:\\grade2.dat",ios::out);

if(!outGradeFile){

cerr<<"文件不能被打开!"<

exit(1);//函数原形定义在stdlib.h中

}

cout<<"? ";

while(cin>>obj.num>>https://www.doczj.com/doc/596358967.html,>>obj.addr){

outGradeFile.write((char *)&obj,sizeof(struct st));

cout<<"? ";

}

outGradeFile.close();

ifstream inGradeFile;

inGradeFile.open("C:\\grade2.dat",ios::in);

cout<<"? ";

// inGradeFile.seekg(0,ios::beg);

while(!inGradeFile.eof()){

inGradeFile.read((char *)&obj,sizeof(struct st));

cout<

cout<<"? ";

}

inGradeFile.close();

return 0; //ofstream的析构函数将关闭文件

}程序运行结果如下:

? 111 aaa vvvvvvvvvvvv

? 222 bbb ddddddddddd

? 333 ccc mmmmmmmmmmmmmmm

? ^Z

? 111aaavvvvvvvvvvvv

? 222bbbddddddddddd

? 333cccmmmmmmmmmmmmmmm

? 333cccmmmmmmmmmmmmmmm

注意:输出多了一行,为什么?

●文件指针

文件指针分:读指针和写指针。

●读指针:

用于读过程中定位文件中的对象。在ifstream,可以用成员函数seekg()来定位读指针。

seekg函数:

原型:ifstream& seekg(streamoff file_offset, seek_dir org);

功能:将读指针定位在从seek_dir org开始且偏移量为file_offset处。

streamoff类型在iostream.h中定义;seek_dir org的取值为:

ios::beg 文件开始处

ios::end 文件结束处

ios::cur 当前位置

写指针:

用于写过程中定位文件中的对象。在ofstream,可以用成员函数seekp()来定位写指针。

seekp函数:

原型:ofstream& seekp(streamoff file_offset, seek_dir org);

功能:将写指针定位在从seek_dir org开始且偏移量为file_offset处。

streamoff类型在iostream.h中定义;seek_dir org的取值为:

ios::beg 文件开始处

ios::end 文件结束处

ios::cur 当前位置

程序举例:

#include "stdafx.h"

#include

#include

#include

struct st{

char num[10];

char name[30];

char addr[40];

};

int main()

{

static struct st obj;

ifstream inGradeFile;

inGradeFile.open("C:\\grade2.dat",ios::in);

cout<<"? ";

inGradeFile.seekg(1*sizeof(struct st),ios::beg);

while(!inGradeFile.eof()){

inGradeFile.read((char *)&obj,sizeof(struct st));

cout<

cout<<"? ";

}

inGradeFile.close();

return 0; //ofstream的析构函数将关闭文件

}

用inGradeFile.seekg(0*sizeof(struct st),ios::beg);的运行结果:

? 111aaacccccccccccccccccccc

? 222bbbgggggggggggggggggggg

? 333ccckkkkkkkkkkkkkkkkk

用inGradeFile.seekg(1*sizeof(struct st),ios::beg);的运行结果:? 222bbbgggggggggggggggggggg

? 333ccckkkkkkkkkkkkkkkkk

程序举例:

#include "stdafx.h"

#include

#include

#include

struct st{

char num[10];

char name[30];

char addr[40];

};

int main()

{

static struct st obj;

//使用ofstream类的构造函数打开文件

ofstream outGradeFile;

outGradeFile.open("C:\\grade2.dat",ios::out|ios::app);

if(!outGradeFile){

cerr<<"文件不能被打开!"<

exit(1);//函数原形定义在stdlib.h中

}

cout<<"? ";

outGradeFile.seekp(2*sizeof(struct st),ios::beg);

while(cin>>obj.num>>https://www.doczj.com/doc/596358967.html,>>obj.addr){

outGradeFile.write((char *)&obj,sizeof(struct st));

cout<<"? ";

}

outGradeFile.close();

ifstream inGradeFile;

inGradeFile.open("C:\\grade2.dat",ios::in);

cout<<"? ";

inGradeFile.seekg(0*sizeof(struct st),ios::beg);

while(!inGradeFile.eof()){

inGradeFile.read((char *)&obj,sizeof(struct st));

cout<

cout<<"? ";

}

inGradeFile.close();

return 0; //ofstream的析构函数将关闭文件

}

另外,用tellg和tellp函数可以得到当前读指针和写指针的位置。(参看相关资料)。

Java 输入输出流及文件读写详解

I/O类体系 在JDK API中,基础的IO类都位于java.io包,而新实现的IO类则位于一系列以java.nio开头的包名中,这里首先介绍java.io包中类的体系结构。 按照前面的说明,流是有方向的,则整个流的结构按照流的方向可以划分为两类: 1、输入流: 该类流将外部数据源的数据转换为流,程序通过读取该类流中的数据,完成对于外部数据源中数据的读入。 2、输出流: 该类流完成将流中的数据转换到对应的数据源中,程序通过向该类流中写入数据,完成将数据写入到对应的外部数据源中。 而在实际实现时,由于JDK API历史的原因,在java.io包中又实现了两类流:字节流(byte stream)和字符流(char stream)。这两种流实现的是流中数据序列的单位,在字节流中,数据序列以byte为单位,也就是流中的数据按照一个byte一个byte的顺序实现成流,对于该类流操作的基本单位是一个byte,而对于字节流,数据序列以char为单位,也就是流中的数据按照一个char一个插入的顺序实现成流,对于该类流操作的基本单位是一个char。 另外字节流是从JDK1.0开始加入到API中的,而字符流则是从JDK1.1开始才加入到API中的,对于现在使用的JDK版本来说,这两类流都包含在API的内部。在实际使用时,字符流的效率要比字节流高一些。 在实际使用时,字符流中的类基本上和字节流中的类对应,所以在开始学习IO类时,可以从最基础的字节流开始学习。 在SUN设计JDK的IO类时,按照以上的分类,为每个系列的类设计了一个父类,而实现具体操作的类都作为该系列类的子类,则IO类设计时的四个体系中每个体系中对应的父类分别是: 字节输入流InputStream 该类是IO编程中所有字节输入流的父类,熟悉该类的使用将对使用字节输入流产生很大的帮助,下面做一下详细的介绍。 按照前面介绍的流的概念,字节输入流完成的是按照字节形式构造读取数据的输入流的结构,每个该类的对象就是一个实际的输入流,在构造时由API完成将外部数据源转换为流对象的操作,这种转换对程序员来说是透明的。在程序使用时,程序员只需要读取该流对象,就可以完成对于外部数据的读取了。

Microsoft Word - 输入输出流类库编程练习题 - 首都

注意:每道题的难度等级不同,*越多,难度等级越高。可以根据自己的能力,选做恰当难度的题。 8.1改写第五章编程练习5.4题的程序,使该程序在程序结束之前,先判断字典内容是否发 生了变化(单词的添加、修改、删除)。如果字典内容已经被修改,则提示是否保存修改后的新字典;若选择保存,则将字典的全部内容写入一个纯文本文件,该文件可以命名为dictionary.txt。每次程序重新运行时,先尝试打开dictionary.txt。如果该文件存在,则打开文件,并从该文本文件中输入产生一个字典。 难度等级:** 8.2编写一个用于统计英文纯文本文件的各项信息:文件内容的总字符数(包括标点符号), 单词个数,文本行数。 要求: 1.提示用户输入一个扩展名为.txt的纯文本文件名,如果指定文件存在,则打开该文 件,否则显示错误提示信息。 2.统计文件内容的上述信息,并显示所统计的信息。信息的显示格式自行确定,例如 可以按如下格式显示: 文件名:Information.txt 字符数:4854 单词数:853 文本行数:56 3.每个文件的信息显示后,提示用户是否继续统计其他文本文件,如果继续,则重复 1和2中的操作。 提示: 1.判断文本行的依据可以是每行的结尾应为‘\n’。 难度等级:*

8.3编写一个程序用于某大学的某信息专业学生的基础课成绩的录入、显示和相应数据文件 的读写。 要求: 1.成绩的按如下顺序录入: ⑴在学生成绩录入之前,先通过输入确定基础课程的门数和课程名称。例如: 基础课程1:高等数学 基础课程2:大学物理 基础课程3:大学英语 基础课程4:C语言程序设计 基础课程5:数据结构 … ⑵每个学生的成绩录入的内容包括学生的姓名、学号、性别和各门课程的成绩。成 绩按照A,B,C,D四个等级划分。录入格式可以参照如下: 姓名:李建国 学号:200410001 性别:男 高等数学:C 大学物理:B 大学英语:C C语言程序设计:B 数据结构:A … 2.保存学生成绩数据的文件的种类和结构、内容如下 ⑴课程信息索引文件courses.inx用于保存所有课程的索引信息,每门课程的索 引信息由课程索引序号和课程名组成。例如: 课程序号课程名 1高等数学 2大学物理 3大学英语 4C语言程序设计 5数据结构 … 注意,课程门数不得少于5门。 ⑵学生信息文件student.inx用于保存所有学生的索引信息,每个学生的索引信息 由学号和学生基本信息(姓名、性别)组成。例如: 学生学号学生基本信息 200410001李建国,男 … ⑶分课程成绩数据索引文件XXX.inx用于保存一门课程的所有学生成绩的索引信 息,每个学生的成绩索引信息由学号和成绩等级组成。每门课程有一个成绩数据 索引文件,文件名XXX由课程名确定。例如: 文件名:“高等数学.inx” 学生学号成绩等级 200410001C

第10章-输入输出流

1.下列流类中可以用于处理文件的是()。Empty! (D) (a) ios (b) iostream (c) strstream (d) fstream 2.在下列选项中()是istream类的对象。Empty! (B) (a) cerr (b) cin (c) clog (d) cout 3.read函数的功能是从输入流中读取()。Empty! (D) (a) 一个字符(b) 当前字符(c) 一行字符(d) 指定若干个字节 4.下列选项中,用于清除基数格式位设置以十六进制输出的语句是()。Empty! (B) (a) cout << setf( ios::dec, ios::basefield ) ; (b) cout << setf( ios::hex, ios::basefield ) ; (c) cout << setf( ios::oct, ios::basefield ) ; (d) cin >> setf( ios::hex, ios::basefield ) ; 5.下列格式控制符,既可以用于输入,又可以用于输出的是()。Empty! (A) (a) setbase (b) setfill (c) setprecision (d) setw 6.下列串流类,在strstream.h中定义的是()。Empty! (B) (a) istringstream (b) istrstream (c) ostringstream (d) stringstream 7.包含类fstream定义的头文件是()。Empty! (A) (a) fstream.h (b) ofstream.h (c) ifstream.h (d) iostream.h 8.要求打开文件 D:\file.dat,并能够写入数据,正确的语句是()。Empty! (D) (a) ifstream infile( "D:\\file.dat", ios::in ) ; (b) ifstream infile( "D:\\file.dat", ios::out ) ; (c) ofstream outfile( "D:\\file.dat", ios::in ) ;

第9章输入输出流与文件操作

什么是流?流有什么用?面向对象语言为什么需要流?哪些场合需要流? 答:流是指一组有顺序、有起点和终点地字节集合,是对数据传输地总称或抽象(也就是数据在两个对象之间地传输称为流).个人收集整理勿做商业用途 流地作用就是使数据传输操作独立于相关设备. 在面向对象地程序设计中,数据地传输和流动具有广泛性,可以在内存与外部设备之间传输,还可以从内存到内存,甚至可以从一台计算机通过网络流向另一台计算机等,故面向对象语言采用流机制.个人收集整理勿做商业用途 在标准输入输出、在文件地读写等操作中都需要流. 提供了哪些流类?各种流类之间地关系是怎样地?什么场合需要使用什么流类? 答:中按照流地方向性,流分为输入流和输出流两大类.按照流中元素地基本类型,流分为字节流和字符流两大类.字节流类按照流地方向分为字节输入流类和字节输出流类,字符流类方向性分为字符输入流类和字符输出流类.以及文件操作类,随机存取文件类.个人收集整理勿做商业用途 其中类是所有字节输入流地根类,类是所有字节输出流地根类;类是所有字符输入流地根类,类是所有字符输出流地根类.个人收集整理勿做商业用途 操作系统中文件和目录概念是怎么样地?提供了哪些对文件和目录操作地类?程序中对文件和目录能够进行哪些操作?如何操作?个人收集整理勿做商业用途 答:文件是信息地一种组织形式,是存储在外部存储介质上地具有标识名地一组相关地信息集合.目录是文件系统组织和管理文件地基本单位,保存它所管理地每个文件地基本属性信息(称为文件目录项或文件控制块).个人收集整理勿做商业用途 直接对文件地顺序存取和随机存取操作,提供了类记载文件属性信息,对文件读写操作时以流地形式.类以随机存取方式进行文件读写操作.但在对文件操作过程中还需要使用文件过滤器接口和文件对话框类.在操作系统中,目录也是以文件地形式保存地,称为目录文件.故一个对象也可以表示一个目录.个人收集整理勿做商业用途 可以对文件进行读、写、删除、创建等操作,对目录可以读取、创建、删除等操作.应用程序通过调用操作系统提供地系统调用能够对文件及目录进行各种操作.个人收集整理勿做商业用途 再打开、保存、复制文件时,需要读写文件中地数据内容,这些操作由流实现,不同类型地文件需要使用不同地流泪.个人收集整理勿做商业用途 流与文件操作有什么关系?实际应用中将流类与文件操作结合起来能够实现哪些复杂问题?如何实现?个人收集整理勿做商业用途 答:对文件地操作时通过流这个工具进行地.再打开、保存、复制文件时,需要读写文件中地数据内容,这些操作由流实现,不同类型地文件需要使用不同地流泪.个人收集整理勿做商业用途 什么是输入输出?什么是标准输入输出?怎样实现标准输入输出功能? 答:数据由外部设备流向内存,这个过程称为输入;数据有内存流向外部设备,这个过程称为输出. 在计算机系统中,标准输入是从键盘等外部输入设备中获得数据,标准输出是向显示器或打印机等外部输出设备发送数据.个人收集整理勿做商业用途 在类中声明了个常量、和用于实现标准输入输出功能.个人收集整理勿做商业用途除了标准输入输出及文件操作之外,还有那些应用中需要使用流? 答:在面向对象地程序设计中,数据地传输和流动具有广泛性,不仅可以在内存与外部设备之间传输,还可以从内存流向内存,甚至可以从一台计算机通过网络流向另一台计算机,因此各种不同地数据源地传输都需要采取不同地流机制来实现.个人收集整理勿做商业用途

实验十一 流类库与输入/输出

实验十一流类库与输入/输出(2学时) 一、实验目的 1.熟悉流类库中常用的类及其成员函数的用法。 2.学习标准输入输出及格式控制。 3.学习对文件的应用方法(二进制文件、文本文件)。 二、实验任务 1.观察以下程序的输出,注意对输出格式的控制方法; //labll—1.cpp #include Using namespace std; #define D(a)<<#a<

第9章流类库与输入输出

第9章流类库与输入输出 9.1 本章提要 (1)C++语言提供一个用于输入/输出(I/O)操作的类族,这些操作是以对数据敏感 的方式实现的。类族提供了对预定义类型进行输入/输出操作的能力,程序员也 可以利用这个类族进行自定义类型的输入/输出操作。 (2)标准输出操作方法 ①将插入符作用在流对象cout上,可输出显示整型数、浮点数,字符和字符串。 ②使用成员函数put( )可输出一个字符 ③使用成员函数write( )可输出一个字符串 (3)标准输入操作方法 ①将提取符作用在流对象cin上,可输入整型数、浮点数、字符和字符串。 ②使用成员函数get( )可输入一个字符,使用成员函数getline( )可输入—行字符。 ③使用成员函数read( )可读取一个字符串。 (4)格式化输入输出的两种方式 ①使用标志字和成员函数 ②使用操作子 (5)磁盘文件的输入和输出,包括: ①磁盘文件的打开和关闭操作 ②文本文件的读写操作 ③二进制文件的读写操作 ④随机访问数据文件 9.2 程序举例 下面是一个展示用不同方法(使用重载运算符和成员函数)对标准的输入输出流对象(cin和cout)进行操作的例子。 例9-1 用不同方法操作流对象 //ch9_1.cpp 标准设备的输入输出 #include void main() { char buffer1[80],buffer2[80],buffer3[80];

cout<<"Please enter a sentence:"<>buffer1; cout< void main() { //设置整数流的格式和基数 int x=123; cout<<"dec: "<

文件流是以外存文件为输入输出对象的数据流

文件流是以外存文件为输入输出对象的数据流,字符串流不是以外存文件为输入输出的对象,而以内存中用户定义的字符数组(字符串)为输入输出的对象,即将数据输出到内存中的字符数组,或者从字符数组(字符串)将数据读入。字符串流也称为内存流。 字符串流也有相应的缓冲区,开始时流缓冲区是空的。如果向字符数组存入数据,随着向流插入数据,流缓冲区中的数据不断增加,待缓冲区满了(或遇换行符),一起存入字符数组。如果是从字符数组读数据,先将字符数组中的数据送到流缓冲区,然后从缓冲区中提取数据赋给有关变量。 在字符数组中可以存放字符,也可以存放整数、浮点数以及其他类型的数据。在向字符数组存入数据之前,要先将数据从二进制形式转换为ASCII代码,然后存放在缓冲区,再从缓冲区送到字符数组。从字符数组读数据时,先将字符数组中的数据送到缓冲区,在赋给变量前要先将ASCII代码转换为二进制形式。总之,流缓冲区中的数据格式与字符数组相同。这种情况与以标准设备(键盘和显示器)为对象的输入输出是类似的,键盘和显示器都是按字符形式输入输出的设备,内存中的数据在输出到显示器之前,先要转换为ASCII码形式,并送到输出缓冲区中。从键盘输入的数据以ASCII码形式输入到输入缓冲区,在赋给变量前转换为相应变量类型的二进制形式,然后赋给变量。对于字符串流的输入输出的情况,如不清楚,可以从对标准设备的输入输出中得到启发。 文件流类有ifstream,ofstream和fstream,而字符串流类有istrstream,ostrstream和strstream。文件流类和字符串流类都是ostream,istream和iostream类的派生类,因此对它们的操作方法是基本相同的。向内存中的一个字符数组写数据就如同向文件写数据一样,但有3点不同: 1. 输出时数据不是流向外存文件,而是流向内存中的一个存储空间。输入时从内存中的存储空间读取数据。在严格的意义上 说,这不属于输入输出,称为读写比较合适。因为输入输出一般指的是在计算机内存与计算机外的文件(外部设备也视为文件)之间的数据传送。但由于C++的字符串流采用了C++的流输入输出机制,因此往往也用输入和输出来表述读写操作。 2. 字符串流对象关联的不是文件,而是内存中的一个字符数组,因此不需要打开和关闭文件。 3. 每个文件的最后都有一个文件结束符,表示文件的结束。而字符串流所关联的字符数组中没有相应的结束标志,用户要指定 一个特殊字符作为结束符,在向字符数组写入全部数据后要写入此字符。 字符串流类没有open成员函数,因此要在建立字符串流对象时通过给定参数来确立字符串流与字符数组的关联。即通过调用构造函数来解决此问题。建立字符串流对象的方法与含义如下。 建立输出字符串流对象 ostrstream类提供的构造函数的原型为: ostrstream::ostrstream(char *buffer,int n,int mode=ios::out); buffer是指向字符数组首元素的指针,n为指定的流缓冲区的大小(一般选与字符数组的大小相同,也可以不同),第3个参数是可选的,默认为ios::out方式。可以用以下语句建立输出字符串流对象并与字符数组建立关联: ostrstream strout(ch1,20); 作用是建立输出字符串流对象strout,并使strout与字符数组ch1关联(通过字符串流将数据输出到字符数组ch1),流缓冲区大小为20。 建立输入字符串流对象 istrstream类提供了两个带参的构造函数,原型为: istrstream::istrstream(char *buffer); istrstream::istrstream(char *buffer,int n); buffer是指向字符数组首元素的指针,用它来初始化流对象(使流对象与字符数组建立关联)。可以用以下语句建立输入字符串流对象: istrstream strin(ch2); 作用是建立输入字符串流对象strin,将字符数组ch2中的全部数据作为输入字符串流的内容。 istrstream strin(ch2,20); 流缓冲区大小为20,因此只将字符数组ch2中的,20个字符作为输入字符串流的内容。 建立输入输出字符串流对象 strstream类提供的构造函数的原型为: strstream::strstream(char *buffer,int n,int mode); 可以用以下语句建立输入输出字符串流对象:

发学生第7次JAVA测试题第10章输入输出流内容20101211

第10章异常测试题2010-12-11 一、选择题 1.假设文件中的信息为abcd,下面代码执行的结果是什么: public static void main(String[]args)throws IOException{ FileInputStream fis=new FileInputStream("a.txt"); int data=fis.read(); System.out.println(data); fis.close();//a的ASCII码为97,A的为65 } A.97 B.a C.-1 D.编译出错 E.运行出错 2.假设文件中的信息为abcd,下面代码执行的结果是什么: public static void main(String[]args)throws Exception{ FileInputStream fis=new FileInputStream("a.txt"); int data=fis.readInt(); System.out.println(data); fis.close(); } A.97 B.a C.-1 D.编译出错 E.运行出错 3.下面程序执行的结果是什么: public static void main(String[]args)throws IOException{ //TODO Auto-generated method stub FileOutputStream fos=new FileOutputStream("a.txt"); fos.write Int(97); fos.close(); } A.文件中写入97 B.文件中写入a C.文件中写入-1 D.编译出错 E.运行出错 4.下面程序执行的结果是什么: public static void main(String[]args)throws IOException{ FileOutputStream fos=new FileOutputStream("a.txt"); fos.write(97); } A.文件中写入97 B.文件中写入a C.文件中写入-1 D.编译出错 E.运行出错 5.下面程序执行的结果是什么: public static void main(String[]args)throws IOException{ BufferedOutputStream fos=new BufferedOutputStream("a.txt"); fos.write(97);

实验五 输入输出流

实验五输入输出流 一、实验目的 1.掌握文件的使用 2.掌握字节I/O流、字符类I/O流、缓冲流、数据流等常用流的使用。 3.熟悉对象流、RandomAccessFile类的使用。 二、实验内容 1.利用各种常用IO流的处理方法,编写Java应用程序。 三、实验步骤与要求 第1题文件加密 编写一个Java应用程序,将已存在的扩展名为.txt的文本文件加密后存入另一个文本文件中。 package four; import java.io.*; public class file { public static void main(String args[]) { File readFile =new File("Student.txt"), writeFile =new File("Hello.txt"); String s="欢迎来到北京 welcome"; char b[]=s.toCharArray(); try{ FileWriter out=new FileWriter(readFile,true); out.write(b); out.close(); FileWriter tofile=new FileWriter ("hello.txt"); for(int i=0;i

tofile.write(secret); tofile.close(); FileReader inOne=new FileReader("Hello.txt"); int t=0; System.out.println("存入后:"); while((t=inOne.read(b,0,2))!=-1) { String str=new String(b,0,2); System.out.println(str); } inOne.close(); } catch (IOException e){ System.out.println(e); } } } 第2题读写基本类型数据 编写一个Java应用程序,将若干基本数据写入到一个文件,然后再按顺序读出。

第十四章:数据流图

数据流图 您现在的位置:希赛网 > 云阅读 > 软件设计师考试试题分类精解(2018版) > 试题1(2017年下半年试题1) 第14 章:数据流图作者:希赛软考学院来源:希赛软考学院 2017年11月21日 试题1(2017年下半年试题1) 阅读下列说明和图,回答问题1 至问题4 ,将解答填入答题纸的对应栏内。 【说明】 某公司拟开发一个共享单车系统,采用北斗定位系统进行单车定位,提供针对用户的APP以及微信小程序、基于Web 的管理与监控系统。该共享单车系统的主要功能如下。 1)用户注册登录。用户在APP端输入手机号并获取验证码后进行注册,将用户信息进行存储。用户登录后显示用户所在位置周围的单车。 2)使用单车。 ①扫码/手动开锁。通过扫描二维码或手动输入编码获取开锁密码,系统发送开锁指令进行开锁,系统修改单车状态,新建单车行程。 ②骑行单车。单车定时上传位置,更新行程。 ③锁车结账。用户停止使用或手动锁车并结束行程后,系统根据己设置好的计费规则及使用时间自动结算,更新本次骑行的费用并显示给用户,用户确认支付后,记录行程的支付状态。系统还将重置单车的开锁密码和单车状态。 3)辅助管理。 ①查询。用户可以查看行程列表和行程详细信息。 ②报修。用户上报所在位置或单车位置以及单车故障信息并进行记录。 4)管理与监控。 ①单车管理及计费规则设置。商家对单车基础信息、状态等进行管理,对计费规则进行设置并存储。 ②单车监控。对单车、故障、行程等进行查询统计。

③用户管理。管理用户信用与状态信息,对用户进行查询统计。 现采用结构化方法对共享单车系统进行分析与设计,获得如图1-1 所示的上下文数据流图和图1-2 所示的0 层数据流图。

第12章流类库和输入输出概论

第12章流类库和输入输出 【内容提要】 流的概念及流类库 输入输出的格式控制 输入与输出运算符的重载 文件操作 【重点与难点】 12.1 流的概念及流类库 12.1.1 流的概念 C++中的流是指数据从一个对象传递到另一个对象的操作。从流中读取数据称为提取操作,向流内添加数据称为插入操作。流在使用前要建立,使用后要删除。如果数据的传递是在设备之间进行,这种流就称为I/O流。C++专门内置了一些供用户使用的类,在这些类中封装了可以实现输入输出操作的函数,这些类统称为I/O流类。 C++流预定义了4个标准流类对象,它们可以直接用来输入输出。这些标准流类对象都包含在头文件iostream.h中。 istream cin; //与标准输入设备相关联的标准输入流。 ostream cout; //与标准输出设备相关联的标准输出流。 ostream cerr; //与标准错误输出设备相关联的非缓冲方式的标准输出流。ostream clog; //与标准错误输出设备相关联的缓冲方式的标准输出流。12.1.2 流类库 C++的流类库有两个平行的基类streambuf和ios,其它的流类都是从这两个基类直接或间接派生的。使用这些流类库时,必须包含相应的头文件。 ios类及其派生类为用户提供了使用流类的接口。以下给出ios类及其派生类的层次结构图。 ios istream ifstream istream_withassign iostream istrstream fstream ostream strstream ofstream sdiostream ostream_withassign ostrstream 图12.1 ios类的层次关系 12.2 输入输出的格式控制 C++仍可使用C中的printf()和scanf()进行格式化控制,同时又提供了两种格式化控制的方法,一是使用ios类中的有关格式控制的成员函数,二是使用执行格式化输入/输出的格式控制符。 12.2.1 用ios类的成员函数进行格式控制 使用这种方式进行格式控制主要是通过设置及清除格式状态标志、设置域宽、设置填充字符和设置输出精度的操作来完成的。 设置及清除格式状态标志 格式状态标志说明 ios::skipws跳过输入中的空白,用于输入 ios::left左对齐输出,用于输出

实验六 输入输出流与文件

实验六输入输出流与文件 一、实验目的 1.理解数据流的概念 2.理解Java流的层次结构 3.理解文件的概念 二、实验要求 1.掌握字节流的基本使用方法 2.掌握字符流的基本使用方法 3.能够创建、读写、更新文件 三、实验内容 (一)运行以下程序 1.使用标准数据流的应用程序 标准数据流指在字符方式下(如DOS 提示符)程序与系统进行输入输出的方式,键盘和显示器屏幕是标准输入输出设备,数据输入的起点为键盘,数据输出的终点是屏幕,输出的数据可以在屏幕上显示出来。 1.程序功能:将键盘上输入的字符在屏幕上显示出来 2.编写KY10_1.java 程序文件,源代码如下。 class KY10_1{ public static void main(String[] args) throws java.io.IOException { byte buffer[]=new byte[10]; System.out.println("从键盘输入不超过10 个字符,按回车键结束输入:"); int count =System.in.read(buffer);//读取输入的字符并存放在缓冲区buffer 中 System.out.println("保存在缓冲区buffer 中元素的个数为:"+count); System.out.println("buffer 中各元素的值为:"); for (int i=0;i

第10章 输入输出流

第10章输入/输出流 10.1 选择题 1.下列类中( ac)不是输入输出流类iostream的派生类。 (a)fstream (b)ofstream (c)strstream (d)ostrstream 2.在下列选项中( d )是ostream类的对象。 (a)cin (b)cerr (c)clog (d)cout 3.read函数的功能是从输入流中读取( c )。 (a)一个字符 (b)当前字符 (c)一行字符 (d)指定若 干个字符 4.下列选项中,用于清除基数格式位设置以十六进制输出的语句是( b )。 (a) cout<>setf( ios::hex,ios::basefield); 5.下列格式控制符,在iostream.h中定义的是( a,d ),在iomanip.h 中定义的是( )。 (a)endl (b)setfill (c)setw (d)oct 6.下列串流类,在strstream.h中定义的是( b,d ),在sstream.h 中定义的是( )。 (a)istringstream (b)istrstream (c)ostringstream (d)ostrstream 7.包含类fstream定义的头文件是( a )。 (a)fstream.h (b)ofstream.h (c)ifstream.h (d)iostream.h 8.以写的方式打开文件” D:\file.dat”,错误的语句是(c )。 (a) ifstream infile( “D:\file.dat”, ios::in ); (b) ifstream infile( “D:\\file.dat”, ios::in); (c) ofstream infile( “D:\file.dat”, ios::out); (d) fstream infile( “D:\\file.dat”, ios::in|ios::out ); 9.假定已定义浮点型变量data,以二进制方式把data的值写入输出文 件流对象outfile中去,正确的语句是( c )。 (a) outfile.write(( float* ) &data , sizeof( float )); (b) outfile.write(( float* ) &data , data ); (c) outfile.write(( char* ) &data , sizeof( float )); (d) outfile.write(( char* ) &data , data ); 10.2 阅读下列程序,写出执行结果 1.#include < iostream.h >

第9章 输入输出流与文件操作

第9章输入/输出流与文件操作 9.1 什么是流?流有什么用?面向对象语言为什么需要流?哪些场合需要流? 答:流是指一组有顺序、有起点和终点的字节集合,是对数据传输的总称或抽象(也就是数据在两个对象之间的传输称为流)。 流的作用就是使数据传输操作独立于相关设备。 在面向对象的程序设计中,数据的传输和流动具有广泛性,可以在内存与外部设备之间传输,还可以从内存到内存,甚至可以从一台计算机通过网络流向另一台计算机等,故面向对象语言采用流机制。 在标准输入/输出、在文件的读/写等操作中都需要流。 9.2 Java提供了哪些流类?各种流类之间的关系是怎样的?什么场合需要使用什么流类? 答:Java中按照流的方向性,流分为输入流和输出流两大类。按照流中元素的基本类型,流分为字节流和字符流两大类。字节流类按照流的方向分为字节输入流类和字节输出流类,字符流类方向性分为字符输入流类和字符输出流类。以及文件操作类File,随机存取文件类RandomAccessFile. 其中InputStream类是所有字节输入流的根类,OutputStream类是所有字节输出流的根类;Reader类是所有字符输入流的根类,Writer类是所有字符输出流的根类。 9.3 操作系统中文件和目录概念是怎么样的?Java提供了哪些对文件和目录操作的类?程序中对文件和目录能够进行哪些操作?如何操作? 答:文件是信息的一种组织形式,是存储在外部存储介质上的具有标识名的一组相关的信息集合。目录是文件系统组织和管理文件的基本单位,保存它所管理的每个文件的基本属性信息(称为文件目录项或文件控制块)。 Java直接对文件的顺序存取和随机存取操作,提供了File类记载文件属性信息,对文件读/写操作时以流的形式。RandomAccessFile类以随机存取方式进行文件读/写操作。但在对文件操作过程中还需要使用文件过滤器接口和文件对话框类。在操作系统中,目录也是以文件的形式保存的,称为目录文件。故一个File对象也可以表示一个目录。可以对文件进行读、写、删除、创建等操作,对目录可以读取、创建、删除等操作。应用程序通过调用操作系统提供的系统调用能够对文件及目录进行各种操作。 再打开、保存、复制文件时,需要读/写文件中的数据内容,这些操作由流实现,不同类型的文件需要使用不同的流泪。 9.4 流与文件操作有什么关系?实际应用中将流类与文件操作结合起来能够实现哪些复杂问题?如何实现? 答:对文件的操作时通过流这个工具进行的。再打开、保存、复制文件时,需要读/写文件中的数据内容,这些操作由流实现,不同类型的文件需要使用不同的流泪。 9.5 什么是输入/输出?什么是标准输入/输出?Java怎样实现标准输入/输出功能?答:数据由外部设备流向内存,这个过程称为输入;数据有内存流向外部设备,这个过程称为输出。 在计算机系统中,标准输入是从键盘等外部输入设备中获得数据,标准输出是向显示器或打印机等外部输出设备发送数据。 Java在https://www.doczj.com/doc/596358967.html,ng.System类中声明了3个常量in、out和err用于实现标准输入/输出功能。 9.6 除了标准输入/输出及文件操作之外,还有那些应用中需要使用流?

第十四章:数据流图

窗体顶端 数据流图 第14 章:数据流图 阅读下列说明和图,回答问题1 至问题4 ,将解答填入答题纸的对应栏内。 【说明】 某公司拟开发一个共享单车系统,采用北斗定位系统进行单车定位,提供针对用户的APP 以及微信小程序、基于Web 的管理与监控系统。该共享单车系统的主要功能如下。 1)用户注册登录。用户在APP端输入手机号并获取验证码后进行注册,将用户信息进行存储。用户登录后显示用户所在位置周围的单车。 2)使用单车。 ①扫码/手动开锁。通过扫描二维码或手动输入编码获取开锁密码,系统发送开锁指令进行开锁,系统修改单车状态,新建单车行程。 ②骑行单车。单车定时上传位置,更新行程。 ③锁车结账。用户停止使用或手动锁车并结束行程后,系统根据己设置好的计费规则及使用时间自动结算,更新本次骑行的费用并显示给用户,用户确认支付后,记录行程的支付状态。系统还将重置单车的开锁密码和单车状态。 3)辅助管理。 ①查询。用户可以查看行程列表和行程详细信息。 ②报修。用户上报所在位置或单车位置以及单车故障信息并进行记录。 4)管理与监控。 ①单车管理及计费规则设置。商家对单车基础信息、状态等进行管理,对计费规则进行设置并存储。 ②单车监控。对单车、故障、行程等进行查询统计。 ③用户管理。管理用户信用与状态信息,对用户进行查询统计。 现采用结构化方法对共享单车系统进行分析与设计,获得如图1-1 所示的上下文数据流图和图1-2 所示的0 层数据流图。

【问题1】(3分) 使用说明中的词语,给出图1-1 中的实体E1~E3 的名称。 【问题2】(5分) 使用说明中的词语,给出图1-2 中的数据存储D1~D5 的名称。 【问题3】(5分) 根据说明和图中术语及符号,补充图1-2 中缺失的数据流及其起点和终点. 【问题4】(2分) 根据说明中术语,说明"使用单车"可以分解为哪些子加工? 试题分析 问题1分析: 问题1要求找图1-1 所示的上下文数据流图中的实体名称: 结合题干,和数据流名称找出对应的实体名称。 E1与共享单车系统,有着个人信息,等数据流名称,其中明显有一个用户位置,和确认支付的数据流,从第2点使用单车,锁车结帐一条中,明显提到用户的操作。 E2的实体名称,是由其与共享单车系统有数据流名称为计价规则,由第4点管理与监控,题干直接说明“商家对单车基础信息、状态等进行管理,对计费规则进行设置并存”。 E3的实体名称,从第2点使用单车上,能查找出所有的数据流名称。

c++流类库与输入输出习题答案

1.概念填空题 1.1头文件iostream中定义了4个标准流对象cin,cout,cerr,clog。其中标准输入流对象为cin,与键盘连用,用于输入;cout为标准输出流对象,与显示器连用,用于输出。 1.2用标准输入流对象cin与提取操作符>>连用进行输入时,将空格与回车当作分隔符,使用get()成员函数进行输入时可以指定输入分隔符。 1.3每一个输入输出流对象都维护一个流格式状态字,用它表示流对象当前的格式状态并控制流的格式。C++提供了使用格式控制函数与操作子函数来控制流的格式的方法。 1.4 C++根据文件内容的数据格式可分为两类:文本文件和二进制文件。前者存取的最小信息单位为字节,后者记录。 1.5文件输入是指从文件向内存读入数据;文件输出则指从内存向文件输出数据。文件的输入输出首先要打开文件;然后进行读写;最后关闭文件。 1.6文本文件是存储ASCII码字符的文件,文本文件的输入可用cin从输入文件流中提取字符实现。文本文件的输出可用cout将字符插入到输出文件流来实现。程序在处理文本文件时需要(需要/不需要)对数据进行转换。 1.7二进制文件是指直接将计算机内的数据不经转换直接保存在文件中。二进制文件的输入输出分别采用read()、write() 成员函数。这两个成员函数的参数都是2个,分别表示读写缓冲区和字节数。 1.8设定、返回文件读指针位置的函数分别为seekg,tellg;设定、返回文件写指针位置的函数分别为seekp,tellp。 2 简答题 2.1 为什么cin输入时,空格和回车无法读入?这时可改用哪些流成员函数? 2.2 文件的使用有它的固定格式,试做简单介绍。 2.3 在ios类中定义的文件打开方式中,公有枚举类型open_mode的各成员代表什么文件打开方式? 2.4 简述文本文件和二进制文件在存储格式、读写方式等方面的不同,各自的优点和缺点。 2.5 文本文件可以按行也可以按字符进行复制,在使用中为保证能完整复制要注意哪些问题? 2.6 文件的随机访问为什么总是用二进制文件,而不用文本文件? 2.7 怎样使用istream和ostream的成员函数来实现随机访问文件? 3.选择题 3.1要进行文件的输出,除了包含头文件iostream外,还要包含头文件(C )。 A.ifstream B.fstream C.ostream D.cstdio 3.2执行以下程序: char *str; cin>>str; cout<

相关主题
文本预览
相关文档 最新文档