文档库 最新最全的文档下载
当前位置:文档库 › c++输入输出流实验报告要点

c++输入输出流实验报告要点

c++输入输出流实验报告要点
c++输入输出流实验报告要点

实验四输入输出流

实验课程名:面向对象程序设计(C++)

专业班级:学号:姓名:

实验时间:实验地点:指导教师:

一、实验目的和要求

(1) 理解类和对象的概念,掌握声明类和定义对象的方法。

(2) 掌握构造函数和析构函数的实现方法。

(3) 初步掌握使用类和对象编制C++程序。

(4) 掌握对象数组、对象指针和string类的使用方法。

(5) 掌握使用对象、对象指针和对象引用作为函数参数的方法。

(6) 掌握类对象作为成员的使用方法。

(7) 掌握静态数据成员和静态成员函数的使用方法。

(8) 理解友元的概念和掌握友元的使用方法。

二、实验内容

1.定义描述职工工资的类Laborage,数据成员为职工号(No)、姓名(Name[8])、应发工资(Ssalary)、社保金(Security)、实发工资(Fsalary)。定义公有成员函数Input(),在Input()函数内输入职工号、姓名、应发工资、社保金,实发工资由公式:Fsalary=Ssalary-Security计算。定义输出职工工资的成员函数Show()。在显示函数Show()中,职工号、姓名的输出域宽为8、左对齐,其余数据的输出域宽为10、右对齐、保留小数点后两位,输出格式均用预定义格式控制函数设置。在主函数中用Laborage类定义职工对象数组a[3]。用Input()输入职工工资,用Show()显示每个职工的工资。(提示:用getline输入姓名后,必须用回车结束姓名输入)

实验数据:

1001 Zhou Zhi 3000 200

1002 Chen Hua 4000 400

1003 Wang Fan 5000 500

实验代码:

#include

#include

#include

using namespace std;

class Laborage

{

public:

Laborage(){}

void input();

void display();

private:

int num;

char name[10];

float Ssalary;

float Security;

float Fsalary;

};

void Laborage::input()

{

cin>> num;

cin.get(name,10,'\n');

cin>> Ssalary;

cin>> Security;

Fsalary = Ssalary - Security;

}

void Laborage::display()

{

cout<< resetiosflags(ios::right)<

cout<< setw(8)<< setiosflags(ios::left) <

cout<< setw(10)<< setiosflags(ios::right)<< setiosflags(ios::fixed) << setprecision(2) <

cout<< setw(10)<< setiosflags(ios::right)<< setiosflags(ios::fixed) << setprecision(2) <

cout<< setw(10)<< setiosflags(ios::right)<< setiosflags(ios::fixed) << setprecision(2) <

cout<

}

int main(void)

{

Laborage lab[3];

int i;

for(i=0;i<3;i++)

{

cout<<"请输入第"<

lab[i].input();

}

for(i=0;i<3;i++)

{

lab[i].display();

}

return 0;

}

实验结果:

代码分析:

1)在输入时调用getline()以换行符作为输入姓名时的结束标志,已达到输入空格的目的

2)输出时采用resetiosflags(ios::right)实现结束向左对齐,用setw(8)实现输出域宽为8,使用一系列的格式控制字符来实现输出格式的控制。

2. 重载运算符“<<”和“>>”,使其能够输入一件商品的信息和输出这件商品的信息。商品的信息由编号、商品名和价格。假如商品类Merchandise的框架如下:class merchandise{

public:

Merchandiss();

~Merchandiss();

friend istream& operator>>(istream& in,Merchandiss& s);

friend ostream&operator<<(ostream& out,Merchandiss& s);

private:

int no;

char *name;

double price;

};

要求实现该类,并编写以下的main函数对该类进行操作。

int main()

{ Merchandise mer;

cin>>mer;

cout<

return 0;

}

实验代码:

#include

using namespace std;

class merchandise{

public:

merchandise(){no=0;name[0]='\0';price=1;}

~merchandise(){}

friend istream& operator>>(istream& in,merchandise& s); friend ostream&operator<<(ostream& out,merchandise& s); private:

int no;

char name[100];

double price;

};

istream& operator>>(istream& in,merchandise& s)

{

cout<<"请输入商品信息(编号、名称、价格):";

in>>s.no;

in.getline(https://www.wendangku.net/doc/7c5208343.html,,100,'\n');

in>>s.price;

return in;

}

ostream& operator<<(ostream& out,merchandise& s)

{

cout<<"商品信息显示如下:"<

out<

return out;

}

int main()

{

merchandise mer;

cin>>mer;

cout<

return 0;

}

实验结果:

实验分析:

先定义一个商品的类,构造函数定义为无参函数在函数体中将name置为空,其他为0.在重载>>时使用getline函数,输入name以’\n’作为结束标记重载<<时直接输出。在主函数中调用这些函数实现输入输出的功能。

3.将一个源文件复制为两个不同名目的文件,源文件与目的文件均用构造函数打开,使用成员函数get与put复制第一个目的文件,使用getline与插入运算符复制第二个目的文件。(提示:用get函数将输入文件流对象的指针指向文件尾后,无法将该指针移到文件首位置。所以只能定义两个输入文件流对象打开同一源文件,用于两种方式的文件

复制。)

实验数据:

源文件:e:\ex\a.txt,文件内容为souce file 目的文件1:e:\ex\b.txt

目的文件2:e:\ex\c.txt

实验代码:

#include

#include

#include

using namespace std;

void createfile()

{

ofstream outfile("a.txt");

if(!outfile)

{

cerr<<"open a.txt error!"<

exit(1);

}

char str[100];

cin.getline(str,100,'\n');

outfile<

outfile.close();

}

void copyfile_b()

{

ofstream outfile("b.txt");

if(!outfile)

{

cerr<<"open b.txt error!"<

exit(1);

}

ifstream infile("a.txt");

if(!infile)

{

cerr<<"open a.txt error!"<

exit(1);

}

char ch;

while(infile.get(ch))

{

outfile<

}

infile.close();

}

void copyfile_c()

{

ofstream outfile("c.txt");

if(!outfile)

{

cerr<<"open c.txt error!"<

exit(1);

}

ifstream infile("a.txt");

if(!infile)

{

cerr<<"open a.txt error!"<

exit(1);

}

char ch;

while(infile.get(ch))

{

outfile<

}

outfile.close();

infile.close();

}

void display(char *filename)

{

ifstream infile(filename);

if(!infile)

{

cerr<<"open the file error!"<

exit(1);

}

char ch;

while(infile.get(ch))

{

cout.put(ch);

}

cout<

infile.close();

}

int main()

{

createfile();

copyfile_c();

cout<<"a文?件t中D的ì?内¨2容¨Y为a:êo";

display("a.txt");

cout<<"b文?件t中D的ì?内¨2容¨Y为a:êo";

display("b.txt");

cout<<"c文?件t中D的ì?内¨2容¨Y为a:êo";

display("c.txt");

return 0;

}

实验结果:

定义几个函数分别实现:创建文件、复制文件、读取文件中的内容到显示器在主函数中调用创建函数,创建一个文件a,调用复制文件的函数将a中的

内容复制到文件b,c中在调用读取文件的函数将a、b、c中的内容输出到显示器中。

4. 将存放在源文件(e:\ex\array1.txt)中学生成绩读入二维整型数组a[3][5]中,数组a的第0列存放学号,第4列存放平均成绩。计算出每个学生的平均成绩,用擂台法对数组a 按平均成绩升序排序后,存放在目的文件(e:\ex\array2.txt)中。学生的学号与成绩如实验数据所示。编写程序实现上述要求。

实验数据:

源文件:e:\ex\array1.txt,内容如下:

1001 90 85 80 0

1002 80 70 60 0

1003 85 80 75 0

目的文件:e:\ex\array2.txt

实验代码:

#include

#include

using namespace std;

void createfile()

{

ofstream outfile("array1.txt");

int a[3][4];

int i,j;

for(i=0;i<3;i++)

{

cout<<"请?输o?入¨?第ì¨2"<

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

void sort()//排?序¨°并?é创???建?§文?件tarray2 {

ifstream infile("array1.txt");

int a[3][5];

int i,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;

}

}

}

}

ofstream outfile("array2.txt");

if(!outfile)

{

cerr<<"open file error!";

exit(1);

}

for(i=0;i<3;i++)

{

for(j=0;j<5;j++)

{

outfile<

outfile<<' ';

}

outfile<<'\n';

}

}

void display_file(char *filename)

{

ifstream infile(filename);

if(!infile)

{

cerr<<"open file error!"<

exit(1);

}

int a[3][5];

int i,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");

return 0;

}

实验结果:

实验分析:

定义三个函数分别实现:创建文件,排序,输出文件。排序采用冒泡排序将平均成绩排序,若前面的大于后面的,将各个对应项交换,达到排序的目的。在主函数中调用这三个函数,实现程序的功能

5. 编写一个程序,将两个文本文件连接成一个文件,然后将此文件中所有小写字母转换成大写字母,并打印出来。

实验代码:

#include

#include

#include

using namespace std;

void createfile(char *filename)

{

ofstream outfile(filename);

if(!outfile)

{

cerr<<"open file error!"<

exit(1);

}

char str[80];

cin.getline(str,80);

int i=0;

while(str[i])

{

outfile<

i++;

}

outfile.close();

}

void change()

{

ifstream infile("c.txt");

if(!infile)

{

cerr<<"open file error!"<

exit(1);

}

ofstream outfile("d.txt");

if(!outfile)

{

cerr<<"open file error!"<

exit(1);

}

char str;

while(infile.get(str))

{

if(str>=97&&str<=122)

str=str-32;

outfile.put(str);

cout<

}

cout<

infile.close();

outfile.close();

}

void copyfile()

{

char ch;

ifstream infile("d.txt");//读¨¢取¨?磁??盘¨?的ì?文?本à?文?件t ofstream outfile("c.txt");//创???建?§文?本à?文?件t

while(infile.get(ch))//读¨¢取¨?文?本à?中D的ì?内¨2容¨Y

{

cout << ch;//输o?出?文?本à?内¨2容¨Y到ì?内¨2存??

outfile<

}

infile.close(); //关?闭à?文?件t流¢??

outfile.close();

cout<

}

int main()

{

cout<<"请?输o?入¨?a文?件t中D的ì?数oy据Y:êo";

createfile("a.txt");

cout<<"请?输o?入¨?b文?件t中D的ì?数oy据Y";

createfile("b.txt");

system("copy a.txt+b.txt c.txt");

change();

copyfile();

return 0;

}

实验结果:

实验分析:

定义三个函数:create,change,copy。分别实现创建文件,改变大小写,拷贝,程序中先建立文件a,b,在用库函数system将两个文件链接成一个文件c,在调用change函数,将文件c中的字母改为大写,并保存到d文件中,最后调用copy函数将d中的内容拷贝到c中并覆盖。从而使c中的字母都为大写。

6. 产生一个二进制数据文件,将n~m之间的所有素数写入文件data.dat中。从数据文件中读取二进制数据,并在显示器上以每行5个数的形式显示。

实验数据:

n=100

m=400

实验代码:

#include

#include

#include

using namespace std;

int judge(int a)//求a是否是素数如果是则输出

{

int temp = sqrt(a*1.0);

int i;

for(i=2;i

{

if(a%i==0)

return 0;

}

cout<

return 1;

}

void createfile()/创建文件a将素数存入

{

ofstream outfile("1.dat");

if(!outfile)

{

cerr<<"open file error!"<

exit(1);

}

int i;

int c = 0;

for(i=201;i<=400;i++)

{

if(judge(i))//若i是素数,则将i存入文件中

{

outfile<

c++;

if(c%5==0)

{

cout<

outfile<

}

}

}

cout<

outfile.close();

}

int main()

{

createfile();

return 0;

}

实验结果:

代码分析:定义两个函数judge、create。分别实现判断素数,及创建文件的功能。Create中调用judge函数,判断judge为1时该数是素数,将次数存入文件,同时定义一个计数的变量,当变量为5的倍数时换行,从而保证文件中是5个数一行。在主函数中调用函数。

7.编写一个程序,可以读入一个C++语言的源文件,每一行加上行号后保存到另一个后缀为.prn的同名文件中,同时输出到屏幕上。

实验代码:

#include

#include

#include

using namespace std;

void keep()

{

string s,name,name1;

cout<<"请输入c++源文件的名称(不含有后缀名)";

cin>>name;

name1=name+".prn";

name+=".cpp";

ifstream read(name.c_str());

fstream write;

write.open(name1.c_str(),ios::trunk|ios::out);

int i=0;

if(!read)

{

cout<<"Cannot open input file\n";

}

if(!write)

{

cout<<"Cannot open output file\n";

}

while (getline(read,s))

cout<

write<<++i<

read.close();

write.close();

cout<<"目标文件生成成功(和源文件同目录)"<

int main()

{

keep();

return 0;

}

C++输入输出流指令

补充知识1:C++中的标准输入/输出流指令 一.C++的输出 格式:cout<<表达式【<<表达式】 功能:将指定的数据流输出到屏幕 例:cout<<"Hello! \n " ; 注释1:可以输出任何类型的数据,且无须指定数据的类型 int a=5 ; float b=3.45 ; char c=’A’ ; printf ( "%d %f %c ",a,b,c) ; cout<>变量【>>变量】 功能:从键盘取得输入的数据流 例:int a; float b; scanf ( "%d %f",&a,&b) ; cin >> a>> b ; cin>>a,b ;× 可以从键盘输入: 20 31.45 各数据项间以空格分开 三.C++输入输出语句的特点 ●简洁:不需要指定数据的类型; ●需要头文件iostream.h,在程序的首行用# include命令将该文件“包含”进源程 序。

例1.4:改写例1.3(P5)的程序 # include "iostream.h" // 文件包含命令 int max(int x, int y) // 定义max( )子函数,求两个数中的较大值{ int z; if (x>y) z=x; else z=y; return z; } void main( ) { int max(int x, int y); // 此语句可省略 int a,b,c; cin>>a>>b; // 从键盘输入两个数据送到变量a和b中 c=max(a,b); // 调用max( )函数比较a和b,并把结果赋给c cout<<"max="<

第十章 输入输出系统习题

第十章输入输出系统习题 一、单项选择题: 1、“总线忙”信号是由__ __建立的。 A.获得总线控制权的设备B.发出“总线请求”的设备 C.总线控制器D.CPU 2、在不同速度的设备之间传送数据__ __。 A.必须采用同步控制方式B.必须采用异步控制方式 C.可以选用同步方式,也可选用异步方式D.必须采用应答方式 3、挂接在总线上的多个部件___ _。 A.只能分时向总线发送数据,并只能分时从总线接收数据 B.只能分时向总线发送数据,但可同时从总线接收数据 C.可同时向总线发送数据,并同时从总线接收数据 D.可同时向总线发送数据,但只能分时从总线接收数据 4、总线从设备是____。 A.掌握总线控制权的设备 B.申请作为从设备的设备 C.被主设备访问的设备D.总线裁决部件 5、假设某系统总线在一个总线周期中传输4个字节信息,一个总线周期占用2个时钟周期,总线时钟频率为10MHz,则总线带宽是__ __。 A.10 MB/s B.20 MB/s C.40 MB/s D.80 MB/s 6、波特率表示传输线路上____。 A.信号的传输速率B.有效数据的传输速率 C.校验信号的传输速率D.干扰信号的传输速率 7、中断系统中的断点是指____。 A.子程序入口地址B.中断服务子程序入口地址 C.中断服务程序入口地址表D.中断返回地址 8、显示器的主要参数之一是分辨率,其含义是____。 A.显示屏幕的水平和垂直扫描频率 B.显示屏幕上光栅的列数和行数 C.可显示不同颜色的总线 D.同一个画面允许显示不同颜色的最大数目 9、下列选项中,能引起外部中断的事件是____。 A.键盘输入B.除数为0 C.浮点运算下溢D.访存缺页 10.CPU响应中断时,最先完成的两个步骤是_ __和保护现场信息。 A.开中断 B.恢复现场 C.关中断 D.不可屏蔽中断 11、在独立编址方式下,存储单元和I/O设备是靠来区分的。 A.不同的地址代码B.不同的地址总线 C.不同的指令和不同的控制信号D.上述都不同 12、计算机系统的输入/输出接口通常是__ __。 A.CPU与存储器之间的交界面B.存储器与打印机之间的交界面 C.主机与外围设备之间的交界面D.CPU与系统总线之间的交界面 13.根据连线的数量,总线可分为串行总线和_____ ___总线

第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 ) ;

C++输入输出流实验报告

深圳大学实验报告 实验课程名称:程序设计实验与课程设计 实验项目名称:实验10 C++流输入与流输出 学院:计软专业:计科 报告人:学号:班级: 3 同组人:无 指导教师:朱安民 实验时间:2014年6月16日提交时间:2014年6月16 声明: 本次实验内容由报告人和同组人独立完成,所有涉及到他人的工作均已说明。报告人和同组人均同意教师及学校为教学活动而引用本实验的内容,且无需事先征得同意和特别说明。 教务处制

一、实验目的 1.掌握标准输入输出(iostream库中标准对象cin、cout)的使用 2.掌握IO流类成员函数输入输出(cin.get, cin.getline, cin.read; cout.put, cout.write)的使用 3.掌握输出格式(标准控制符、IO流类成员函数、iomanip头文件中的控制符)控制方法 4.掌握磁盘文件的输入输出方法 二、实验说明和实验环境 1.在奥特曼类的基础上,编写一个程序,重载运算符“》”和“《”,使得用户可以直接(格式化)输出奥特曼的状态。在主程序中输入若干个(3个)奥特曼的状态,并分别将它们保存到文件RecordU.txt中。然后读取并显示文件中的内容。 2.奥特曼和怪物都具有属性:等级, 生命, 攻击, 经验, 金钱,都具有方法:初始化initial和显示状态display 在奥特曼的初始化中,需要接受外来等级参数,生命, 攻击的数值初始化为等级的10倍,金钱为等级的100倍,经验恒为0 在怪兽的初始化中,需要接受外来等级参数,生命, 攻击的数值初始化为等级的8倍,经验为等级的80倍,金钱为等级的800倍 对怪兽和奥特曼的状态输出采用运算符《重载的方法,并结合display方法使用,注意本题目要求怪兽和奥特曼的状态输出必须使用重载运算符《,不能直接使用display方法。 注意:为了实现运算符《重载,需要包含头文件 经常天降怪石会砸中奥特曼或怪兽,如果被幸运石砸中,就会处于“鸿运当头”状态,被砸对象除等级外其它属性全部翻倍;如果被厄运石砸中,就会陷入“倒霉透顶”状态,被砸对象除等级外其它属性全部减半。把“鸿运当头”封装成操作,并用重载运算符++来实现;“倒霉透顶”封装成操作,并用重载运算符--来实现。两个重载都需要用友元方法。 3.奥特曼和怪物经过一番战斗斗,需要中场休息,休息时把各自的属性值存放到一个文件中,休息结束时需要从文件中读取之前的状态继续战斗。 奥特曼和怪物都具有属性:等级, 生命, 攻击, 经验, 金钱,都具有方法:初始化initial和显示状态display 奥特曼和怪兽的属性值均来自于文件(文件的第一行是奥特曼的数据,初始状态为:等级是8,生命, 攻击的数值初始化为等级的10倍,金钱为等级的100倍,经验恒为0,文件的第二行是怪兽的数据,初始状态为等级是4,生命, 攻击的数值初始化为等级的8倍,经验为等级的80倍,金钱为等级的800倍)对怪兽和奥特曼的状态输出采用运算符《重载的方法,并结合display方法使用,注意本题目要求怪兽和奥特曼的状态输出必须使用重载运算符《,不能直接使用display方法。 把信息直接从文件读出来并赋值给奥特曼和怪兽,需要重载》运算符作为友元; 把奥特曼和怪兽的值写入文件,要求重载《运算符作为友元

CC++输入输出流总结

C/C++输入输出流总结 C++ I/O C++支持两种I/O,第一种是从C语言继承来的,一种是由C++定义的面向对象I/O系统。 1、int getchar(void);返回一个整数值,也可以指定这个值为char变量,因为这个字符包含于低位字节中(高位字节通常为0),如果有错,getchar()返回EOF。但是他有一个潜在的问题,正常情况下,getchar()缓存输入,直到键入了回车键(这个大家应该深有体会,就是getchar()貌似只认识回车键,原来是这个原因)这称为行缓冲输入,在键入的字符实际传送给程序之前必须敲入一个回车键。 2、int putchar(int c); 虽然putchar()带一个整数参数,通常可以用一个字符的变元调用它,但是只有其低位字节被实际输出到屏幕上,putchar()函数放回被写入的字符,若操作失败,返回EOF(宏EOF 被定义于stdio.h中,通常其值为-1)。 3、int getch(void); int getche(void); 两个最常用的交互式函数,对于大多数编译器,这些函数的原型都可在头文件conio.h中找到,对于某些编译器中这些函数前面有一下划线。如_getch()和_getche();这就是为什么在VS2008中经常提示要在前面加一个'_'. 4、char* gets(char* str); 读取从键盘上输入的字符串并把它存放在由其他变元所指的地址中,它从键盘读入字符,直到遇到回车键为止。回车键不输入串的一部分,相反,将空结束符放在串尾来代替,并且由gets()返回。但是使用gets()是要小心,因为它不对正在接受输入的字符数组执行边界检查。因此,用户可以键入比数组能够容纳的更多的字符。尽管对于你使用的范例程序和简单使用工具是很好的,在商用代码中一般不是用它。它的的替代物是fgets();稍后描述。5、int puts(const char* str); 将它的字符串变元写到屏幕上,后跟一新行。它的调用比printf();开销小,因为puts()只能输入字符串,不能输出数字或进行格式转换,因而puts()用的空间少且速度比printf()快。因此函数puts()经常用于代码优化,操作失败,函数puts()返回EOF,否则返回非负值。 6、int printf(const char* control_string,...);

输入输出流

第十章 输入/输出流
程序在运行时通常要和外部进行交互, 即从外部读取数据或向外部设备发送数据, 这就 是所谓的输入/输出(Input/Output)。 数据可以来自或者发往文件、 内存、 另一个程序或网络。 数据也可有不同的格式,例如可以是各种编码(ASCII 码或 Unicode 码等)的字符串、图像、 声音或对象等等。 Java 语言使用抽象概念——流来描述程序与数据发送或接收者之间的数据 通道。使用输入/输出流,程序员可以方便灵活和安全地实现输入输出功能。
§10.1 输入/输出基本概念
10.1.1 外部设备与文件
我们可以从不同角度对外部设备进行分类。 按照外部设备的工作特性, 我们可将外部设 备分为两类:存储设备和输入/输出设备。 存储设备用于存储信息,包括硬盘、软盘、磁带、光盘等。程序可将数据写入到这些设 备上,也可从这些设备读出数据,数据通常组织为文件形式。这类设备上存储的数据在物理 上往往是按字符块组织的,因而又将它们称为块设备。 输入/输出设备又可分为输入设备和输出设备。 输入设备是计算机用于接受外界信息的 设备,诸如键盘、鼠标、扫描仪等均为输入设备;输出设备是将计算机处理完毕的数据送往 外界的设备,诸如显示器、打印机、绘图仪等均为输出设备。由于这两类设备上的数据往往 是以字符为单位组织的,所以又称它们为字符设备。 计算机程序要与外界进行交互就必须使用相应的机制与输入/输出设备打交道。 程序的 输入是指从输入设备接收数据,程序的输出是指将数据传递给外部设备。 早期的高级程序设计语言对特定的外部设备提供特定的输入/输出操作, 这导致设计出 来的程序代码可移植性很差。后来引入了文件(file)的概念,在程序中不仅可以声明文件 并将文件作为输入/输出的对象, 而且还可以在文件与某个外部设备之间建立关联, 将文件 作为输入设备与输出设备的抽象描述。 目前文件已成为高级程序设计语言输入/输出机制的 基本概念。 一个文件必须有一个由用户命名的唯一名字。 文件可用于存储程序和数据, 还可用于提 高程序的设备无关性, 所谓设备无关性不仅指程序要独立于同类设备的具体台号, 而且还要 独立于设备的类型。 当我们的程序向屏幕或打印机输出时, 不必考虑使用的是哪一种型号的 显示器或打印机。 在操作系统中, 输入/输出设备被视作一种特殊的文件, 这类文件的名字是由操作系统 预先规定好的。例如在 MS-DOS 中显示器被命名为 CON 的文件(控制台终端 console 的缩 写) 、打印机被命名为 PRN 的文件(printer 的缩写) 。这样,程序的输入/输出操作采用了 与文件统一的方式,而不用理会实际的物理设备是什么。
10.1.2 文件的基本概念
Java 语言将文件看作是字节的序列, 即由一个个字节的数据顺序组成。 例如我们要将一 个班全体学生的基本资料存放在一个文件中, 文件中的数据并不是由学生记录组成的, 而是 由一个个字节组成的。 如何将文件中的这些字节组织为记录是由程序完成的, 文件本身并没 有划定任何边界。因而这种文件又称为流式文件(stream file) 。 (1)文本文件与二进制文件 根据文件中数据的组织形式, 可将文件分为文本文件和二进制文件两类。 文本文件存放 的是 ASCII 码(或其他编码的)字符,使用 Windows 操作系统的记事本打开可正确查看其
-1-

C语言标准输入输出详解

C CC C输入输出函数 输入输出函数输入输出函数 输入输出函数 本节主要介绍Turbo C2.0标准输入输出函数和文件的输入输出函数。通过本 节的学习可以使读者掌握Turbo C2.0的屏幕输出、键盘输入输出以及磁盘文件的 读写函数, 并能开始进行一些简单的程序的编写。 控制流程语句主要包括: 条件语句、循环语句和开关语句。 1.1 标准输入输出函数 1.1.1 格式化输入输出函数 Turbo C2.0 标准库提供了两个控制台格式化输入、输出函数printf( ) 和 scanf(), 这两个函数可以在标准输入输出设备上以各种不同的格式读写数据。 printf()函数用来向标准输出设备(屏幕)写数据; scanf() 函数用来从标准输入

设备(键盘)上读数据。下面详细介绍这两个函数的用法。 一、printf()函数 printf()函数是格式化输出函数, 一般用于向标准输出设备按 规定格式输出信息。在编写程序时经常会用到此函数。printf()函数的调用格式为: printf("<格式化字符串>", <参量表>); 其中格式化字符串包括两部分内容: 一部分是正常字符, 这些 字符将按原 样输出; 另一部分是格式化规定字符, 以"%"开始, 后跟一个或几个 规定字符, 用来确定输出内容格式。 参量表是需要输出的一系列参数, 其个数必须与格式化字符串 所说明的输出 参数个数一样多, 各参数之间用","分开, 且顺序一一对应, 否则 将会出现意想 不到的错误。 1. 格式化规定符 Turbo C2.0提供的格式化规定符如下: ━━━━━━━━━━━━━━━━━━━━━━━━━━ 符号作用 ────────────────────────── %d 十进制有符号整数 %u 十进制无符号整数

C++文件的输入输出

C++中的文件输入/输出(1) 原作:Ilia Yordanov, loobian@https://www.wendangku.net/doc/7c5208343.html, 简介 本教程将以C++最基本的文件I/O(输出/输出)开始。此后,我将从更深入的方面,为你展示一些技巧,并分析给出一些有用的函数。 你需要对C++有一个较好的理解,否则这个教程于你而言将是陌生而毫无用处。 你的第一个程序 首先我将给出一段代码,接着再逐行进行解释。我们的第一个程序将建立一个文件,并写入一些字符: #include void main() // 程序从这里开始运行 { ofstream SaveFile(“cpp-home.txt”); SaveFile << “Hello World, from https://www.wendangku.net/doc/7c5208343.html, and Loobian!”; SaveFile.close(); } 仅仅如此吗?没错!这个程序将在当前运行目录下建立一个名为 cpp-home.txt的文件,并向它写入“Hello World, from https://www.wendangku.net/doc/7c5208343.html, and Loobian!”。 下面给出各行的含义: #include ——你需要包含此文件以使用C++的文件输入/输出函数。注意:一旦包含了这个文件,你不再需要(为了使用cout/cin)包含iostream.h,因为fstream.h已经自动包含了它。 在这个头文件中声明了若干个类,包括ifstream,ofstream及fstream,它们都继承自istream和ostream类。 ofstream SaveFile(“cpp-home.txt”); 1)ofstream即“output file stream(输出文件流)”。它将建立一个句柄(handle),以便我们以后能以一个文件流的形式写入文件。 2)SaveFile ——这是文件句柄的名字,当然,你还可以换用任何一个你想要的名称。

发学生第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);

第10章 能量输入和能量输出

第十章能量输入和能量输出Energy in and energy out 10.1 可再生能源Renewable energy 学习目标:Learning Objectives: 什么是可再生能源和不可再生能源? 哪些能源是可再生的? 太阳在为我们提供能源中,所起到的作用是什么? 参考大纲:3.2.2A 全球都在鼓励利用可再生能源来满足日趋增长的能源需求。而不发达国家从经济角度考虑,发展使用可再生能源的速度较慢,因为他们通常拥有大量未开采的煤、石油和天然气。而使用这些能源来满足一个快速发展的经济体相对大量的能源需求,其成本更低,而且技术需求也更低。 大多数能源——可再生能源和不可再生能源,都可以追溯到太阳,那么,为什么使用一种能源优于使用另一种能源呢?因为依赖含碳的不可再生能源会产生一些严重的问题: ?不可再生能源最终将会耗竭。 ?直接使用不可再生能源会增加输入到地球及其大气的能量。 ?使用不可再生能源产生的副产品会进一步加速全球变暖。 不可再生能源Non-renewable resources 不可再生能源包括石油、天然气和煤,由腐烂的生物体形成。石油和天然气来自百万年前堆积在海底的浮游生物和细菌的分解,而煤来自陆地上植物(如树木)的分解。生物体和植物生长所需的能量来自于阳光:植物通过光合作用吸收阳光,而植物反过来为生物体提供食物。由于煤和石油需要经过数百万年的分解才能形成,因此,一旦被消耗,就很难再生。 使用不可再生能源时,存储在地球物质中的太阳能会被释放。这些存储的能量会增加从太阳自然获得的能量。燃料燃烧时产生的气体(如二氧化碳)释放到大气中,会导致所谓的温室效应(在第11章中讲述)。 链接Link 本章的后面部分将对不同形式的能源及其使用形式作进一步阐释。 核能和地热能Nuclear and geothermal energy 核能来自于铀,而铀是一种不可再生资源。快速“增殖”反应堆会产生钚,而钚自身可用作燃料,从而增加了从核反应中可获得的能量。然而,即使是核资源,最终也可能会耗竭,因此核能是不可再生能源。 地球内部每往地心前进36米,温度会升高1K左右。因此,即使是几公里深度,温度也可能会超过250℃。地热能可用于直接为家庭和企业供热,也可用于驱动电力生产中的涡轮机和发电机(如图1所示)。地热能资源非常丰富,因此可以将其归类为可再生能源。

Java语言程序设计教程(第二版)翁 凯 肖少拥 王行言-第11章--Java的输入输出

第11章Java的输入输出 思考题与习题 一、概念思考题 1.简述流的概念与特点。 解答: Java的流是一个比文件所包含范围更广的概念。流是一个可被顺序访问的数据序列,是对计算机输入数据和输出数据的抽象,可以想象成数据像水一样流动,受到控制。 Java流的特点:数据可以是未加工的原始二进制数据,也可以经一定编码处理符合某种格式规定的特定数据,java中的数据流有字节流和字符流之分。 2.说明过滤流的概念及作用。 解答: 过滤流(包装流):使用节点流作为输入或输出。过滤流是使用一个已经存在的输入流或者输出流链接创建的。 过滤流的主要作用:在输入输出数据的同时能对所传输的数据做指定类型或格式的转换,即可实现对二进制字节数据的理解和编码转换。 3.说明stream家族与reader/writer家族之间的区别。 解答: stream家族操作的是字节数据,reader/writer家族操作的是字符数据。 4.描述java.io包中输入/输出流的类家族关系。 解答: 以字节为导向的stream 基类是InputStream和OutputSteam stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源。在Java的IO中,所有的stream(包括Input和Outputstream)都包括两种类型: a)InputStream: 1)ByteArrayImputStream:把内存中的一个缓冲区作为InputStream使用2)StringButffetInputStream:把一个String对象作为InputStream 3)FilenputStream:把一个文件作为InputStream,实现对文件的读取操作4)PipedmputStream:实现了pipe的概念,主要在线程中使用 b)OutStream 1)ByteArrayOutputStream:把信息存入内存中的一个缓冲区中 2)FileCutputStream:把信息存入文件中 3)PipedOutputStream:实现了pipe的概念,主要在线程中使用 以Unicode字符为导向的stream包括下面几种类型: a)InputStream 1)CharArtayReader:与ByteArrayInputStream对应

第9章输入输出流上机

(一)使用文件输入输出流的应用程序 1.程序功能:将保存在本地机当前文件夹中的KY10_ 2.HTML 文本文件的内容在屏幕上显 示出来,然后将其另存为KY10_2.txt 文件。 2.编写KY10_2.java 程序文件,源代码如下 import java.io.*; public class KY5_4 { public static void main(String[] args) throws IOException { FileReader in=new FileReader("KY5_1.HTML");//建立文件输入流 BufferedReader bin=new BufferedReader(in);//建立缓冲输入流 FileWriter out=new FileWriter(" KY5_1.txt",true);//建立文件输出流 String str; while ((str=bin.readLine())!=null) { //将缓冲区内容通过循环方式逐行赋值给字符串str System.out.println(str);//在屏幕上显示字符串str out.write(str+"\n");//将字符串str 通过输出流写入KY5_1.txt 中 } in.close(); out.close(); } } 3.编译、运行程序 (二)使用随机文件类的应用程序 使用文件输入类FileReader 只能将文件内容全部读入。如果要选择读入文件的内容,可使用随机文件类RandomAccessFile。 1.程序功能:建立数据流,通过指针有选择的读入文件内容。 编写KY10_3.java 程序文件,源代码如下。 import java.io.*; class KY10_3 { public static void main(String args[]) { String str[]={"First line\n","Second line\n","Last line\n"}; try { RandomAccessFile rf=new RandomAccessFile("KY5_5.txt", "rw"); System.out.println("\n 文件指针位置为:"+rf.getFilePointer()); System.out.println("文件的长度为:"+rf.length()); rf.seek(rf.length()); System.out.println("文件指针现在的位置为:"+rf.getFilePointer()); for (int i=0; i<3; i++) rf.writeChars(str[i]); // 字符串转为字节串添加到文件末尾87 rf.seek(0);

第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 >

C++标准输入输出流

C++标准输入输出流 C++标准输入输出流 在C++语言中,数据的输入和输出(简写为I/O)包括对标准输入 设备键盘和标准输 出设备显示器、对在外存磁盘上的文件和对内存中指定的字符串存储空间(当然可 用该空间存储任何信息)进行输入输出这三个方面。对标准输入设备和标准输出设 备的输入输出简称为标准I/O,对在外存磁盘上文件的输入输出简称为文件I/O,对 内存中指定的字符串存储空间的输入输出简称为串I/O。 C++语言系统为实现数据的输入和输出定义了一个庞大的类库,它 包括的类主要有ios,istream,ostream,iostream,ifstream,ofstream,fstream,istrstream,ostrs tream,strstream等,其中ios为根基类,其余都是它的直接或间接派生类。 ios为根基类,它直接派生四个类:输入流类istream、输出流类ostream、文件流 基类fstreambase和字符串流基类strstreambase,输入文件流类同时继承了输入流

类和文件流基类(当然对于根基类是间接继承),输出文件流类ofstream同时继承了输出流类和文件流基类,输入字符串流类istrstream 同时继承了输入流类和字符串流基类,输出字符串流类ostrstream同时继承了输出流类和字符串流基类,输入输出流类iostream同时继承了输入流类和输出流类,输入输出文件流类fstream同时继承了输入输出流类和文件流基类,输入输出字符串流类strstream同时继承了输入输出流类和字符串流基类。 “流”就是“流动”,是物质从一处向另一处流动的过程。C++流是指信息从外部输入设备(如键盘和磁盘)向计算机内部(即内存)输入和从内存向外部输出设备(如显示器和磁盘)输出的过程,这种输入输出过程被形象地比喻为“流”。为了实现信息的内外流动,C++系统定义了I/O 类库,其中的每一个类都称作相应的流或流类,用以完成某一方面的功能。根据一个流类定义的对象也时常被称为流。如根据文件流类fstream 定义的一个对象fio,可称作为fio流或fio文件流,用它可以同磁盘上一个文件相联系,实现对该文件的输入和输出,fio就等同于与之相联系的文件。 C++系统中的I/O类库,其所有类被包含在iostream.h,fstream.h和strstrea.h这三个系统头文件中,各头文件包含的类如下: iostream.h包含有:ios, iostream, istream, ostream, iostream_withassign, istream_withassign, ostream_withassign等。 fstream.h包含有:fstream, ifstream, ofstream和fstreambase,以及iostream.h

C++的输入和输出与标准输出流

* 掌握:输入输出的含意;文件流以及输入/输出的格式控制;标准输出在C++程序中的应用。 * 理解:C++类库中的常用流类。 * 了解:C++的I/O对C的发展。 重点、难点 ◆输入输出的含意;文件流以及输入/输出的格式控制;标准输出在C++程序中的应用。 一、C++ 输入输出的含义 以前所用到的输入和输出,都是以终端为对象的,即从键盘输入数据,运行结果输出到显示器屏幕上。从操作系统的角度看,每一个与主机相连的输入输出设备都被看作一个文件。程序的输入指的是从输入文件将数据传送给程序,程序的输出指的是从程序将数据传送给输出文件。C++的输入与输出包括以下3方面的内容: 1、对系统指定的标准设备的输入和输出。简称标准I/O。(设备) 2、以外存磁盘(或光盘)文件为对象进行输入和输出。简称文件I/0。(文件) 3、对内存中指定的空间进行输入和输出。简称串I/O。(内存) C++采取不同的方法来实现以上3种输人输出。为了实现数据的有效流动,C++系统提供了庞大的I/O类库,调用不同的类去实现不同的功能。 二、C++的I/O对C的发展—类型安全和可扩展性 C语言中I/O存在问题: 1、在C语言中,用prinff和scanf进行输入输出,往往不能保证所输入输出的数据是可靠的、安全的。学过C语言的读者可以分析下面的用法:想用格式符%d输出一个整数,但不小心错用了它输出单精度变量和字符串,会出现什么情况?假定所用的系统int型占两个字节。printf("%d",i);//i为整型变量,正确,输出i的值 printf("%d",f);//f为单精度变量,输出变量中前两个字节的内容 printf("%d","C++");//输出字符串"C++”的起始地址 编译系统认为以上语句都是合法的,而不对数据类型的合法性进行检查,显然所得到的结果不是人们所期望的。 2、在用scanf输入时,有时出现的问题是很隐蔽的。如

c++输入输出流实验报告

实验四输入输出流 实验课程名:面向对象程序设计(C++) 专业班级:学号:姓名: 实验时间:实验地点:指导教师: 一、实验目的和要求 (1) 理解类和对象的概念,掌握声明类和定义对象的方法。 (2) 掌握构造函数和析构函数的实现方法。 (3) 初步掌握使用类和对象编制C++程序。 (4) 掌握对象数组、对象指针和string类的使用方法。 (5) 掌握使用对象、对象指针和对象引用作为函数参数的方法。 (6) 掌握类对象作为成员的使用方法。 (7) 掌握静态数据成员和静态成员函数的使用方法。 (8) 理解友元的概念和掌握友元的使用方法。 二、实验内容 1.定义描述职工工资的类Laborage,数据成员为职工号(No)、姓名(Name[8])、应发工资(Ssalary)、社保金(Security)、实发工资(Fsalary)。定义公有成员函数Input(),在Input()函数内输入职工号、姓名、应发工资、社保金,实发工资由公式:Fsalary=Ssalary-Security计算。定义输出职工工资的成员函数Show()。在显示函数Show()中,职工号、姓名的输出域宽为8、左对齐,其余数据的输出域宽为10、右对齐、保留小数点后两位,输出格式均用预定义格式控制函数设置。在主函数中用Laborage类定义职工对象数组a[3]。用Input()输入职工工资,用Show()显示每个职工的工资。(提示:用getline输入姓名后,必须用回车结束姓名输入) 实验数据: 1001 Zhou Zhi 3000 200 1002 Chen Hua 4000 400 1003 Wang Fan 5000 500 实验代码: #include #include #include using namespace std; class Laborage { public: Laborage(){} void input();

相关文档