落实程序设计实习PPT课件_第1页
落实程序设计实习PPT课件_第2页
落实程序设计实习PPT课件_第3页
落实程序设计实习PPT课件_第4页
落实程序设计实习PPT课件_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

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

文档简介

.,1,程序设计实习,输入输出流和文件操作,.,2,输入输出流,流的概念模型C+中与流操作相关的类及其继承关系输入输出流对象:cin,cout,cerr,clog输出流输入流无格式输入输出流操纵算子流格式状态,.,3,输入和输出,计算机、程序,输入,输出,键盘,鼠标,文件,传感器(触摸屏、麦克风),显示器,音箱,文件,打印机,扫描仪,控制器,.,4,物理信号,文件,一种物理信号:持续保存程序的数据、状态内存:程序退出后就丢失了文件:程序退出后还存在根据物理信号的载体(文件的保存介质),常见的文件形式有磁带文件光盘文件磁盘文件U盘文件,计算机、程序,文件,文件,物理信号,驱动器,驱动器,信号读设备,信号写设备,.,5,为什么要文件?,程序退出后,保存数据和状态;下次再执行时,可以恢复程序的运行状态玩家玩游戏累了,休息去明天重新打开计算机,从当前的进度接着玩把一个程序的数据和状态传送给其他的程序出版公司将歌曲制作成MP3文件听众用播放器播放歌曲一个程序的数据太多、状态太复杂而不能保存在内存中时,让程序能够工作北大图书馆有大量的藏书、读者把藏书的目录、读者的借阅记录保存在磁盘上读者甲来借阅图书A时,将甲的信息、A的信息读到内存中处理,.,6,流的概念模型,流-设备驱动器与计算机程序之间的接口,可以看作一个无限长的二进制数字序列通过读写指针进行流的读和写(以字节为单位),将流上的数据读进变量x,将y的值写入流,y,x,.,7,流的概念模型,输出流可以看作一端无限,另一端通过写指针不停地向后写入新内容的单向流,,写指针,.,8,流的概念模型,输入流可以看作一端无限,另一端通过读指针不停地从流中读取新内容的单向流,读出的内容从流中删去。,读指针,.,9,有格式读写和无格式读写字符方式/二进制方式读写,有格式读写,以某种数据类型为单位读写例如:读一个整数,写一个浮点数等;无格式读写,以字节为单位读写,不区分其中的内容例如:读20个字节,写50个字节等;,.,10,缓冲区刷新,向输出流中写数据时,通常是先向缓冲区中写,当缓冲区写满时,才真正向输出流写;也可以通过函数在程序中主动将缓冲区内容写入输出流。,.,11,C+中与流操作相关的类及其继承关系,ios,istream,ostream,ifstream,iostream,ofstream,fstream,.,12,标准流对象,输入流对象:cin与标准输入设备相连输出流对象:cout与标准输出设备相连cerr与标准错误输出设备相连非缓冲输出clog与标准错误输出设备相连缓冲输出,.,13,输出流,流插入运算符cout“Goodmorning!n”;不刷新缓冲区cout“Good”;不刷新缓冲区cout“morning!”;不刷新缓冲区coutendl;刷新缓冲区cout运算符的定义:istream返回的是输入流的引用(引用本身是地址),在读取不成功时,该地址被置成0.,.,16,输入流,成员函数cin.get()读入一个字符(包括空白字符),返回该字符;cin.get(char*buffer,intsize,chardelim=n)或者读size1个字符入buffer,或者遇到n;在buffer最后加0,分隔符留在输入流.cin.getline(char*buffer,intsize,chardelim=n)或者读size1个字符入buffer,或者遇到n;在buffer最后加0,分隔符从流去掉.cin.eof()返回输入是否结束标志.,.,17,输入流,其它函数cin.peek();返回下一个字符,但不从流中去掉.putback(charch);将字符ch放回输入流ignore(intnCount=1,intdelim=EOF);从流中删掉最多nCount个字符,遇到EOF时结束。,.,18,无格式输入输出,用read,write进行指定字节数的输入输出constintSIZE=80;charbufferSIZE;cin.read(buffer,20);cout.write(buffer,cin.gcount();/gcount返回上次读入的字节数coutendl;输入:Usingtheread,writeandgcountmemberfunctions输出:Usingtheread,write,.,19,流操纵算子,整数流的基数:流操纵算子dec,oct,hex,setbase浮点数的精度(precision,setprecision)设置域宽(setw,width)用户自定义的流操纵算子使用流操纵算子需要#include,.,20,流操纵算子,整数流的基数:流操纵算子dec,oct,hexintn=10;coutnendl;couthexn“n”decn“n”octnsetprecision(5);/可以连续输出它们的功能相同。指定输出浮点数的有效位数,.,22,浮点数输出最多6位有效数字,#include#includeusingnamespacestd;intmain()doublex=1234567.89,y=12.34567;intn=1234567;intm=12;coutsetprecision(6)xendlyendlnendlm;,控制浮点数精度的流操纵算子,输出:1.23457e+00612.3457123456712,.,23,以小数点位置固定的方式输出,#include#includeusingnamespacestd;intmain()doublex=1234567.89,y=12.34567;intn=1234567;intm=12;coutsetiosflags(ios:fixed)setprecision(6)xendlyendlnendlm;,控制浮点数精度的流操纵算子,输出:1234567.89000012.345670123456712,.,24,取消以小数点位置固定的方式输出,#include#includeusingnamespacestd;intmain()doublex=1234567.89;coutsetiosflags(ios:fixed)setprecision(6)xendlresetiosflags(ios:fixed)setw(5);或者cin.width(5);coutstring)90cout.width(w+);coutstringstring;567890coutstring;coutstringstring;5678coutstring;coutstringendl;,.,29,用户自定义流操纵算子,ostream输出:aabb为什么可以?,.,30,用户自定义流操纵算子,因为iostream里对进行了重载(成员函数)ostream,.,31,文件操作,数据的层次文件和流建立顺序文件文件的读写指针有格式读写无格式读写,.,32,数据的层次,位bit字节byte域/记录例如:学生记录intID;charname10;intage;intrank10;我们将所有记录顺序地写入一个文件,称为顺序文件。,.,33,文件和流,可以将顺序文件看作一个有限字符构成的顺序字符流,然后象对cin,cout一样的读写。回顾一下输入输出流类的结构层次:,ios,istream,ostream,ifstream,iostream,ofstream,fstream,.,34,建立顺序文件,#include/包含头文件ofstreamoutFile(“clients.dat”,ios:out|ios:binary);/打开文件ofstream是fstream中定义的类outFile是我们定义的ofstream类的对象“clients.dat”是将要建立的文件的文件名ios:out是打开并建立文件的选项ios:out输出到文件,删除原有内容ios:app输出到文件,保留原有内容,总是在尾部添加ios:ate输出到文件,保留原有内容,可以在文件任意位置添加ios:binary以二进制文件格式打开文件,.,35,建立顺序文件,也可以先创建ofstream对象,再用open函数打开ofstreamfout;fout.open(test.out,ios:out|ios:binary);判断打开是否成功:if(!fout)cerr“Fileopenerror!”aNumbersi)i+;qsort(aNumbers,i,sizeof(int),MyCompare);for(intj=0;ji;j+)destFileaNumbersjs.szNames.nScore)if(stricmp(s.szName,“exit”)=0)/名字为exit则结束break;OutFile.write(char*),.,44,输入:Tom60Jack80Jane40exit0则形成的students.dat为72字节,用记事本打开,呈现:Tom烫烫烫烫烫烫烫烫Jack烫烫烫烫烫烫烫蘌Jane烫烫烫烫烫烫烫?,.,45,二进制文件读写,/下面的程序将students.dat文件的内容读出并显示#include#includeusingnamespacestd;classCStudentpublic:charszName20;intnScore;,.,46,intmain()CStudents;ifstreamInFile(“c:tmpstudents.dat”,ios:in);if(!InFile)couterrorendl;return0;while(InFile.read(char*),输出:Tom60Jack80Jane40,.,47,二进制文件读写,/下面的程序将students.dat文件的Jane的名字改成Mike#include#includeusingnamespacestd;classCStudentpublic:charszName20;intnScore;,.,48,输出:Tom60Jack80Mike40,intmain()CStudents;fstreamiofile(c:tmpstudents.dat,ios:in|ios:out);if(!iofile)coutdebug-programarguments,.,51,命令行参数,intmain(intargc,char*argv)coutargcendl;for(inti=0;iargc;i+)coutargviendl;return0;第一个参数为命令本身,第二个以后为参数,.,52,命令行参数,若上面程序可执行文件名为sampl.exe,则在命令行输入:smaplefile1a.txts输出结果为4tmp.exe-vtest.txt2,.,53,例子:mycopy程序,文件拷贝,/*用法示例:mycopysrc.datdest.dat即将src.dat拷贝到dest.dat如果dest.dat原来就有,则原来的文件会被覆盖*/#include#includeusingnamespacestd;intmain(intargc,char*argv)if(argc!=3)coutFilenamemissing!endl;return0;ifstreaminFile(argv1,ios:binary|ios:in);/打开文件用于读if(!inFile)coutSourcefileopenerror.endl;return0;ofstreamoutFile(argv2,ios:binary|ios:out);/打开文件用于写if(!outFile)coutNewfileopenerror.endl;inFile.close();/打开的文件一定要关闭return0;charc;while(inFile.get(c)/每次读取一个字符outFile.put(c);/每次写入一个字符outFile.close();inFile.close();return0;,.,54,ifstreaminFile(argv1,ios:binary|ios:in);/打开文件用于读if(!inFile)coutSourcefileopenerror.endl;return0;ofstreamoutFile(argv2,ios:binary|ios:out);/打开文件用于写if(!outFile)coutNewfileopenerror.endl;inFile.close();/打开的文件一定要关闭return0;charc;

温馨提示

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

评论

0/150

提交评论