C++实验四.docx
《C++实验四.docx》由会员分享,可在线阅读,更多相关《C++实验四.docx(16页珍藏版)》请在冰豆网上搜索。
C++实验四
实验四C++的流类库与输入输出
实验课程名:
面向对象的程序设计
专业班级:
学号:
姓名:
实验时间:
实验地点:
指导教师:
一、实验目的和要求
(1)掌握C++格式化的输入输出方法。
(2)掌握重载运算符“<<”和“>>”的方法。
(3)掌握磁盘文件的输入输出方法。
。
2、实验内容。
1.下面给出的shiyan4-1.cpp程序用于打印九九乘法表,但程序中存在错误。
请上机调试,使得此程序运行后,能够输出如下所示的九九乘法表。
*123456789
11
224
3369
4481216
5510152025
661218243036
77142128354249
8816243240485664
991827364554637281
//shiyan4-1.cpp
#include
#include
usingnamespacestd;
intmain()
{
inti,j;
cout<<”*”;
for(i=1;i<=9;i++)
cout<
cout<for(i=1;i<=9;i++)
{cout<
for(j=1;j<=i;j++)
{cout<
}
return0;
}
更正后:
#include
#include
usingnamespacestd;
intmain()
{
inti,j;
cout<<"*";
for(i=1;i<=9;i++)
cout<
cout<for(i=1;i<=9;i++)
{cout<
for(j=1;j<=i;j++)
{cout<
cout<}
return0;
}
运行结果:
2.下面的程序用于统计文件xyz.txt中的字符个数,请填空完成程序。
//shiyan4-2.cpp
#include
#include
usingnamespacestd;
intmain()
{charch;
inti=0;
ifstreamfile;
(“xyz.txt”,ios:
:
in);
if(
!
file)
{
cout<<”xyz.txtcannotopen”<abort();
}
while(!
())
{
(ch);
i++;
}
cout<<”文件字符个数:
”<
();
return0;
}
3.重载运算符“<<”和“>>”,使其能够输入一件商品的信息和输出这件商品的信息。
商品的信息由编号、商品名和价格。
假如商品类Merchandise的框架如下:
classmerchandise{
public:
Merchandiss();
~Merchandiss();
friendistream&operator>>(istream&in,Merchandiss&s);
friendostream&operator<<(ostream&out,Merchandiss&s);
private:
intno;
char*name;
doubleprice;
};
要求实现该类,并编写以下的main函数对该类进行操作。
intmain()
{Merchandisemer;
cin>>mer;
cout<return0;
}
程序代码:
#include
#include
usingnamespacestd;
classMerchandise{
public:
Merchandise(intn=0,charna='a',doublep=0.0)
{
no=n;
name=na;
price=p;
}
~Merchandise(){}
friendostream&operator<<(ostream&out,Merchandise&s)
{
cout<<"编号:
"<cout<<"名称:
"<cout<<"价格:
"<returnout;
}
friendistream&operator>>(istream&in,Merchandise&s)
{
cout<<"编号:
";
cin>>s.no;
cout<<"名称:
";
cin>>s.name;
cout<<"价格:
";
cin>>s.price;
returnin;
}
private:
intno;
charname;
doubleprice;
};
intmain()
{
Merchandisemer;
cout<<"输入商品信息:
"<cin>>mer;
cout<<"输出商品信息:
"<cout<return0;
}
运行结果:
4.编写一个程序,将两个文本文件连接成一个文件,然后将此文件中所有小写字母转换成大写字母,并打印出来。
程序代码:
#include
#include
#include
usingnamespacestd;
intmain()
{ofstreamfout1("f1.txt",ios:
:
out);
if(!
fout1)
{cout<<"f1.txtcanntopen.\n";
exit
(1);
}
fout1<<"Thisisa";
ofstreamfout2("f2.txt",ios:
:
out);
if(!
fout2)
{cout<<"f2.txtcanntopen.\n";
exit
(1);
}
fout2<<"program";
fout1.close();
fout2.close();
ifstreamfin2("f2.txt",ios:
:
in);
ofstreamfout3("f1.txt",ios:
:
app);
stringstr;
while(fin2>>str)
{fout3<}
fin2.close();
fout3.close();
ifstreamfin1("f1.txt",ios:
:
in);
if(!
fin1)
{cout<<"f1.txtcanntopen.\n";
exit
(1);
}
charch;
while(!
fin1.eof())
{
fin1.get(ch);
if(ch>='a'&&ch<='z')
{ch=ch-32;
}
cout<}
cout<fin1.close();
return0;
}
运行结果:
5.将一个源文件复制为两个不同名目的文件,源文件与目的文件均用构造函数打开,使用成员函数get与put复制第一个目的文件,使用getline与插入运算符复制第二个目的文件。
(提示:
用get函数将输入文件流对象的指针指向文件尾后,无法将该指针移到文件首位置。
所以只能定义两个输入文件流对象打开同一源文件,用于两种方式的文件复制。
)
实验数据:
源文件:
e:
\ex\a.txt,文件内容为soucefile
目的文件1:
e:
\ex\b.txt
目的文件2:
e:
\ex\c.txt
程序代码:
#include
#include
#include
usingnamespacestd;
void
createfile()
{
ofstreamoutfile("a.txt");
if(!
outfile)
{
cerr<<"opena.txterror!
"<exit
(1);
}
charstr[100];
cin.getline(str,100,'\n');
outfile<out();
}
void
copyfile_b()
{
ofstreamoutfile("b.txt");
if(!
outfile)
{
cerr<<"openb.txterror!
"<exit
(1);
}
ifstreaminfile("a.txt");
if(!
infile)
{
cerr<<"opena.txterror!
"<exit
(1);
}
charch;
while
(in(ch))
{
outfile<}
out();
in();
}
void
copyfile_c()
{
ofstreamoutfile("c.txt");
if
(!
outfile)
{
cerr<<"openc.txterror!
"<exit
(1);
}
ifstreaminfile("a.txt");
if(!
infile)
{
cerr<<"opena.txterror!
"<exit
(1);
}
charch;
while
(in(ch))
{
outfile<}
out();
in();
}
voiddisplay(char*)
{
ifstreamin);
if(!
infile)
{
cerr<<"openthe!
"<exit
(1);
}
charch;
while
(in(ch))
{
cout.put(ch);
}
cout<in();
}
int
main()
{
createfile();
copyfile_b();
copyfile_c();
cout<<"a文件t中D的内容为:
";
display("a.txt");
cout<<"b文件t中D的内容为:
";
display("b.txt");
cout<<"c文件t中D的内容为:
";
display("c.txt");
return0;
}
运行结果:
6.将存放在源文件(e:
\ex\array1.txt)中学生成绩读入二维整型数组a[3][5]中,数组a的第0列存放学号,第4列存放平均成绩。
计算出每个学生的平均成绩,用擂台法对数组a按平均成绩升序排序后,存放在目的文件(e:
\ex\array2.txt)中。
学生的学号与成绩如实验数据所示。
编写程序实现上述要求。
实验数据:
源文件:
e:
\ex\array1.txt,内容如下:
10019085800
10028070600
10038580750
目的文件:
e:
\ex\array2.txt
程序代码:
#include
#include
usingnamespacestd;
void
createfile()
{
ofstreamoutfile("array1.txt");
inta[3][4];
inti,j;
for
(i=0;i<3;i++)
{
cout<<"请输入第"<
";
for
(j=0;j<4;j++)
{
cin>>a[i][j];
}
}
for
(i=0;i<3;i++)
{
for
(j=0;j<4;j++)
{
outfile<outfile<<'';
}
outfile<<'\n';
}
}//tarray1
voidsort()//排序并创建文件tarray2
{
ifstreaminfile("array1.txt");
inta[3][5];
inti,j,t;
double
s=0;
for
(i=0;i<3;i++)
{
for
(j=0;j<4;j++)
{
infile>>a[i][j];
s=s+a[i][j];
}
s=(s-a[i][0])/3;
a[i][4]=s;
s=0;
}
for
(j=0;j<2;j++)
{
for
(i=0;i<2-j;i++)
{
if
(a[i][4]>a[i+1][4])
{
for
(t=0;t<5;t++)
{
s=a[i][t];
a[i][t]=a[i+1][t];
a[i+1][t]=s;
}
}
}
}
ofstreamoutfile("array2.txt");
if
(!
outfile)
{
cerr<<"open!
";
exit
(1);
}
for
(i=0;i<3;i++)
{
for
(j=0;j<5;j++)
{
outfile<outfile<<'';
}
outfile<<'\n';
}
}
voiddisplay_*)
{
ifstreamin);
if(!
infile)
{
cerr<<"open!
"<exit
(1);
}
inta[3][5];
inti,j;
for
(i=0;i<3;i++)
{
for
(j=0;j<5;j++)
{
infile>>a[i][j];
cout<}
cout<}
cout<}
int
main()
{
createfile();
sort();
display_file("array2.txt");
return0;
}
运行结果:
3、结论
通过本次实验,我掌握C++格式化的输入输出方法,还掌握重载运算符“<<”和“>>”的方法,掌握磁盘文件的输入输出方法。