华工C++课件与学习资料全Word文件下载.docx
《华工C++课件与学习资料全Word文件下载.docx》由会员分享,可在线阅读,更多相关《华工C++课件与学习资料全Word文件下载.docx(18页珍藏版)》请在冰点文库上搜索。
![华工C++课件与学习资料全Word文件下载.docx](https://file1.bingdoc.com/fileroot1/2023-4/29/dc1198fc-cc5a-459a-90e0-dee41ee1e5b4/dc1198fc-cc5a-459a-90e0-dee41ee1e5b41.gif)
out);
(C)ofstreamoutfile("
(D)fstreaminfile("
in|ios:
10.能实现删除文件功能的语句是(A)。
(A)ofstreamfs("
date.dat"
trunc);
(B)ifstreamfs("
(C)ofstreamfs("
(D)ifstreamfs("
11.设已定义浮点型变量data,以二进制代码方式把data的值写入输出文件流对象outfile中,正确的语句是(C)。
(A)outfile.write((double*)&
data,sizeof(double));
(B)outfile.write((double*)&
data,data);
(C)outfile.write((char*)&
(D)outfile.write((char*)&
12.二进制数据文件流fdat读指针移到文件头的语句是(A)。
(A)fdat.seekg(0,ios:
beg);
(B)fdat.tellg(0,ios:
beg);
(C)fdat.seekp(0,ios:
(D)fdat.tellp(0,ios:
11.2阅读下列程序,写出运行结果
1.
#include<
iostream>
usingnamespacestd;
intmain()
{
doublex=123.456;
cout.width(10);
cout.setf(ios:
cout<
x<
endl;
left);
cout.width(15);
right,ios:
showpos);
-x<
scientific);
}
【解答】
123.456
+123.456
-123.456
+1.234560e+002
2.
doublex=123.45678;
cout.width(10);
cout<
("
#"
);
cout.precision(5);
cout.setf(ios:
#123.457
123.46
+123.46
+1.23457e+002
3.
#include<
iomanip>
doublex=123.456789;
setiosflags(ios:
fixed|ios:
showpos)<
setw(12)<
right);
setprecision(3)<
resetiosflags(ios:
setprecision(5)<
+123.456789
-123.457
1.23457e+002
4.写出文件D:
\f1.txt中的容和屏幕显示的结果。
fstream>
inti;
ofstreamftxt1;
ftxt1.open("
\\f1.txt"
for(i=1;
i<
10;
i++)
ftxt1<
i<
'
'
;
ftxt1.close();
ifstreamftxt2;
ftxt2.open("
while(!
ftxt2.eof())
{
ftxt2>
i>
i;
}
\f1.txt:
123456789
屏幕显示:
2
4
6
8
9
5.以下程序使用了习题11.2第4小题中生成的文件D:
\f1.txt。
写出程序运行后屏幕显示的结果。
ifstreamf1("
d:
fstreamf2;
f2.open("
\\f2.dat"
out|ios:
binary);
while(!
f1.eof())
f1>
i=i*5;
f2.write((char*)&
i,sizeof(int));
f1.close();
f2.close();
do
f2.read((char*)&
"
"
}while(i<
30);
51015202530
11.3思考题
1.在VisualC++中,流类库的作用是什么?
有人说,cin是键盘,cout是显示器,这种说确吗?
为什么?
在VisualC++中,流类库是一个程序包,作用是实现对象之间的数据交互。
“cin是键盘,cout是显示器”的说法不正确。
cin和cout分别是istream和ostream的预定义对象,默认连接标准设备键盘、显示器,解释从键盘接受的信息,传送到存;
把存的信息解释传送到显示器。
所以称为标准流对象。
程序可以对cin、cout重定向,连接到用户指定的设备,例如指定的磁盘文件。
2.什么叫文件?
C++读/写文件需要通过什么对象?
有些什么基本操作步骤?
任何一个应用程序运行,都要利用存储器存放数据。
这些数据在程序运行结束之后就会消失。
为了永久的保存大量数据,计算机用外存储器(如磁盘和磁带)保存数据。
各种计算机应用系统通常把一些相关信息组织起来保存在外存储器中,并用一个名字(称为文件名)加以标识,称为文件。
C++读/写文件需要用到文件流对象。
文件操作的三个主要步骤是:
打开文件、读/写文件、关闭文件流。
打开文件包括建立文件流对象,与外部文件关联,指定文件的打开方式。
读/写文件是按文件信息规格、数据形式与存交互数据的过程。
关闭文件包括把缓冲区数据完整地写入文件,添加文件结束表示符,切断流对象和外部文件的连接。
3.一个已经建立的文本文件可以用二进制代码方式打开操作吗?
一个二进制数据文件可以用文本方式打开吗?
写一个程序试一试。
一个已经建立的文本文件可以用二进制方式打开操作。
但必须以字符类型数据读取数据然后转换成需要的类型数据才有意义。
通常一个二进制文件用文本方式打开是没有意义的,除非这个二进制文件全部是用字符类型数据建立的。
因为文本文件是以可读形式ASC码存放数据的,二进制文件直接用计算机表示数据的二进制形式存放数据,它们之间解释方式不同。
程序略。
11.4编程题
1.以表格形式输出当x=1°
,2°
,…,10°
时sinx、cosx和tanx的值。
要求:
输出时,数据的宽度为10,左对齐,保留小数点后5位。
cmath>
{
intx;
doublea;
cout<
xsin(x)cos(x)tg(x)"
<
endl;
//输出表头
for(x=1;
x<
=10;
x++)
{
a=x*3.14159265/180;
//角度转换为弧度
setw(3)<
setiosflags(ios:
fixed);
setprecision(5);
x;
setw(10)<
sin(a);
cos(a);
setw(10)<
sin(a)/cos(a)<
2.建立一个文本文件,从键盘输入一篇短文存放在文件中。
短文由若干行构成,每行不超过80个字符。
charfilename[20];
fstreamoutfile;
Pleaseinputthenameoffile:
\n"
cin>
filename;
outfile.open(filename,ios:
if(!
outfile)
cerr<
Filecouldnotbeopen."
abort();
outfile<
Thisisafileofstudents\n"
Inputthenumber,name,andscore.\n"
EnterCtrl-Ztoendinput?
outfile.close();
3.读出由习题11.4第2小题建立的文本文件,显示在屏幕上并统计该文件的行数。
fstreaminfile;
infile.open(filename,ios:
infile)
cerr<
chartextline[80];
inti=0;
while(!
infile.eof())
infile.getline(textline,sizeof(textline));
textline<
++i;
infile.close();
cout<
i="
i<
4.读出一个作业cpp文件,删除全部注释容,即以“/*……*/”相括的文本和以“//”开始到行末的文本,生成一个新的cpp文件。
略。
5.建立某单位职工通讯录的二进制数据文件,文件中的每个记录包括:
职工编号、、、邮政编码和住址。
structtxrec
charno[6];
charname[20];
chartel[9];
charpostc[7];
charaddr[30];
};
intn,i;
txrecgzrec;
请输入通讯录文件名:
;
outfile)
文件不能打开!
endl;
请输入职工人数:
n;
=n;
请输入第"
个职工的编号:
cin>
gzrec.no;
个职工的:
gzrec.name;
gzrec.tel;
个职工的邮政编码:
gzrec.postc;
个职工的通信地址:
gzrec.addr;
outfile.write((char*)&
gzrec,sizeof(txrec));
outfile.close();
6.从键盘输入职工的编号,在由习题11.4第5小题所建立的通讯录文件中查找该职工资料。
查找成功后,显示职工的、、邮政编码和住址。
charname[20];
chartel[9];
charpostc[7];
charaddr[30];
structtxrecgzrec;
inti;
charfilename[20],num[6];
infile)
infile.seekg(0,ios:
end);
longposend=infile.tellp();
infile.seekg(0,ios:
请输入职工编号:
num;
do
infile.read((char*)&
gzrec,sizeof(txrec));
}while(strcmp(gzrec.no,num)!
=0&
&
long(infile.tellp())!
=posend);
if(strcmp(gzrec.no,num)==0)
该职工的记录找到了!
编号:
gzrec.no<
gzrec.name<
gzrec.tel<
邮政编码:
gzrec.postc<
通信地址:
gzrec.addr<
else
该职工的记录找不到!
7.设有两个按升序排列的二进制数据文件f和g,将它们合并生成一个新的升序二进制数据文件h。
intdata1,data2;
fstreaminfile1,infile2,outfile;
infile1.open("
\\vc\\f.dat"
binary);
if(!
infile1)
infile1.seekg(0,ios:
end);
longposend1=infile1.tellp();
infile2.open("
\\vc\\g.dat"
infile2)
infile2.seekg(0,ios:
longposend2=infile2.tellp();
outfile.open("
\\vc\\h.dat"
infile1.seekg(0,ios:
while(long(infile1.tellp())!
=posend1&
long(infile2.tellp())!
=posend2)
infile1.read((char*)&
data1,sizeof(int));
infile2.read((char*)&
data2,sizeof(int));
if(data1<
data2)
outfile.write((char*)&
infile2.seekg(-int(sizeof(int)),ios:
cur);
else
infile1.seekg(-int(sizeof(int)),ios:
=posend1)
while(long(infile2.tellp())!
文件合并已完成!
infile1.close();
infile2.close();
outfile.close();
8.编写一个函数,使用数据文件测试在第10章习题10.4第3小题完成的T_Counter类体系。
准备一个文件inputdat用于输入数据,把程序运行结果显示在屏幕上并写入文件outputdat中。