谭浩强版c++实例 第七章 输入输出流


//7.1求一元二次方程ax^2+bx+c=0的解;

#include <iostream>

#include <cmath>

using namespace std;

int main()

{

float a,b,c,disc;

cout<<"please input a,b,c:";

cin>>a>>b>>c;

if(a==0&&b!=0)

{

cerr<<"a is equal to zero,error!"<<endl;

        cout<<"x="<<-(c/b)<<endl;

}

else 

if((disc=b*b-4*a*c)<0)

cerr<<"disc=b*b-4*a*c<0"<<endl;

else 

{

cout<<"x1="<<(-b+sqrt(disc))/(2*a)<<endl;

cout<<"x2="<<(-b-sqrt(disc))/(2*a)<<endl;

}

return 0;

}

//7.2用控制符控制输出格式

#include <iostream>

#include <iomanip>  //这句必须有

using namespace std;

int main()

{

int a;

cout<<"input a:"<<endl;

cin>>a;

cout<<"dec:"<<dec<<a<<endl;   //十进制

cout<<"hex:"<<hex<<a<<endl;    //十六进制

cout<<"oct:"<<setbase(8)<<a<<endl;//setbase(8) equal oct  八进制

char *pt="China";

cout<<setw(10)<<pt<<endl;

cout<<setfill('*')<<setw(10)<<pt<<endl;

    double pi=22.0/7.0;

cout<<setiosflags(ios::scientific)<<setprecision(8);//第一个是浮点数以科学计数法显示;第二个是输出8为小数

cout<<"pi="<<pi<<endl;

cout<<"pi="<<setprecision(4)<<pi<<endl;

cout<<"pi="<<setiosflags(ios::fixed)<<pi<<endl;

return 0;

}

//7.3用流控制成员函数输出数据

#include <iostream>

using namespace std;

int main()

{

int a=21;

cout.setf(ios::showbase);

cout<<"dec:"<<a<<endl;

cout.unsetf(ios::dec);

cout.setf(ios::hex);

cout<<"hex:"<<a<<endl;

cout.unsetf(ios::hex);

 

cout.setf(ios::oct);

cout<<"oct:"<<a<<endl;

cout.unsetf(ios::oct);

 

char *pt="China";

 

cout.width(10);

cout<<pt<<endl;

 

cout.width(10);

cout.fill('*');

cout<<pt<<endl;

 

double pi=22.0/7.0;

 

cout.setf(ios::scientific);

cout<<"pi=";

cout.width(14);

cout<<pi<<endl;

cout.unsetf(ios::scientific);

 

cout.setf(ios::fixed);

cout.width(12);

cout.setf(ios::showpos);

cout.setf(ios::internal);

cout.precision(6);

cout<<pi<<endl;

return 0;

}

//7.4有一个字符串“BASIC”;要求把他们按照相反的顺序输出

//用流成员函数put输出字符

#include <iostream>

using namespace std;

/*int main()  cout.put函数

{

char *a="BASIC";

for(int i=4;i>=0;i--)

cout.put(*(a+i));

cout.put('\n');

return 0;

}*/   

 int main()//putchar函数输出

 {

 char *a="BASIC";

 for(int i=4;i>=0;i--)

 putchar(*(a+i));

 putchar('\n');

 return 0;

 }

 //7.5通过测试cin的真值;判断流对象是否处在正常状态

#include <iostream>

using namespace std;

int main()

{

float grade;

cout<<"enter grade:";

while(cin>>grade)

{

if(grade>=85) cout<<grade<<"GOOD!"<<endl;

if(grade<60) cout<<grade<<"fail!"<<endl;

cout<<"enter grade:";

}

cout<<"The end."<<endl;

return 0;

}

//7.6get函数读入字符

#include <iostream>

using namespace std;

/*int main() cin.get()不带参数

{

int c;

cout<<"enter a sentence:"<<endl;

while((c=cin.get())!=EOF)

cout.put(c);

return 0;

}*/

 

 

//cin.get(ch)带一个参数

/* int main()

{

char c;

cout<<"enter s sentence:"<<endl;

while(cin.get(c))

cout.put(c);

cout<<"end"<<endl;

return 0;

} */

 

 

//带三个参数的cin.get()函数 cin.get(字符数组/字符指针,字符个数,终止字符)

int main()

{

char ch[20];

cout<<"enter a  sentance:"<<endl;

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

cout<<ch<<endl;

return 0;

}

//7.7cin.getline函数读入一行字符

#include <iostream>

using namespace std;

int main()

{

char ch[20];

cout<<"enter a sentence:"<<endl;

cin>>ch;

cout<<"The string read with cin is:"<<ch<<endl;

cin.getline(ch,20,'/');

cout<<"The second part is :"<<ch<<endl;

cin.getline(ch,20);

cout<<"The third part is :"<<ch<<endl;

return 0;

}

//7.8逐个读入一行字符;将其中的非空格字符输出

#include <iostream>

using namespace std;

int main()

{

char c;

while(cin.eof()==0)//=while(!cin.eof())

if((c=cin.get())!=' ')

cout.put(c);

return 0;

}

//7.9peek函数和putback函数的用法

#include <iostream>

using namespace std;

int main()

{

char c[20];

int ch;

cout<<"please enter a sentence:"<<endl;

cin.getline(c,15,'/');

cout<<"The first part is:"<<c<<endl;

ch=cin.peek();//管看当前的字符

cout<<"The next character(ASCII) is:"<<ch<<endl;

cin.putback(c[0]);//将“I”插入到指针所指处

cin.getline(c,15,'/');

cout<<"The second part is:"<<c<<endl;

return 0;

}

//7.10ignore函数的情况

#include <iostream>

using namespace std;

//not ignore()

/*int main()

{

char ch[20];

cin.get(ch,20,'/');

cout<<"The first part is:"<<ch<<endl;

cin.get(ch,20,'/');

cout<<"The second part is:"<<ch<<endl;

return 0;

} */

int main()

{

char ch[20];

cin.get(ch,20,'/');

cout<<"The first part is:"<<ch<<endl;

cin.ignore();

cin.get(ch,20,'/');

cout<<"The second part is:"<<ch<<endl;

return 0;

}

//7.11有一个整型数组;含有10个元素;

//从键盘输入10个整数给数组;将此数组送到磁盘文件中存放

#include <iostream>

#include <fstream>

using namespace std;

int main()

{

int a[10];

ofstream outfile("f1.dat",ios::out);

if(!outfile)

{

cout<<"open error!"<<endl;

exit(1);

}

cout<<"enter 10 integer numbers:"<<endl;

for(int i=0;i<10;i++)

{

cin>>a[i];

outfile<<a[i]<<" ";

}

outfile.close();

return 0;

}

//7.12从例7.11建立的数据文件f1.dat中读入10个整数存放在

//数组中,找出并输出10个数中的最大者和它在数组中的序号

#include <iostream.h>

#include <fstream.h>

//using namespace std;

int main()

{

int a[10];

int max,i,order;

ifstream infile("f1.dat",ios::in|ios::nocreate);//nocreatec++标准中没定义

if(!infile)

{

cerr<<"open error!"<<endl;

//abort();

}

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

{

infile>>a[i];

cout<<a[i]<<" ";

}

cout<<endl;

max=a[0];

order=0;

for(i=1;i<10;i++)

if(a[i]>max)

{

max=a[i];

order=i;

}

cout<<"max="<<max<<endl;

cout<<"order="<<order<<endl;

infile.close();

return 0;

}

//7.13从键盘读入一行字符,把其中的字母字符依次存放在磁盘文件f2.dat中。再把它从磁盘文件读入程序,将其中的小写字母改写为大写

//字母,再存放入磁盘f3.dat中。

#include <iostream>

#include <fstream>

using namespace std;

void save_to_file()//从键盘读入一行字符;并将其中的字符存入磁盘文件

{

ofstream outfile("f2.dat");//定义输出文件流对象outfile,以输出方式打开磁盘文件f2.dat

if(outfile==0)

{

cerr<<"open f2.dat error!"<<endl;

exit(1);

}

char c[80];

cin.getline(c,80);//从键盘读入一行字符

for(int i=0;c[i]!=0;i++)//对字符逐个处理;直到遇到'/0'为止

if(c[i]>=65&&c[i]<=90||c[i]>=97&&c[i]<=122)//如果是字母字符

{

outfile.put(c[i]);//将字母字符存放入磁盘文件f2.dat

cout<<c[i];

}

cout<<endl;

outfile.close();//关闭f2.dat

}

 

void get_from_file()//从磁盘文件f2.dat中读入字母字符,将其中的小写字母改写为大写字母,再存放入f3.dat

{

char ch;

ifstream infile("f2.dat",ios::in);

if(!infile)

{

cerr<<"open f2.dat error!"<<endl;

exit(1);

}

ofstream outfile("f3.dat");

if(!outfile)

{

cerr<<"open f3.dat error!"<<endl;

exit(1);

}

while(infile.get(ch))

{

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

ch=ch-32;

outfile.put(ch);

cout<<ch;

}

cout<<endl;

infile.close();

outfile.close();

}

int main()

{

save_to_file();

get_from_file();

return 0;

}

//7.14将一批数据以二进制形式存放在磁盘文件中

#include <iostream>

#include <fstream>

using namespace std;

struct student

{

char name[20];

int num;

int age;

char sex;

};

int main()

{

student stud[3]={"Li",1001,18,'f',"Fun",1002,19,'m',"Wang",1003,29,'f'};

ofstream outfile("stud.dat",ios::binary);

if(outfile==0)

{

cerr<<"open error!"<<endl;

abort();//退出程序

}

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

outfile.write((char*)&stud[i],sizeof(stud[i]));

outfile.close();

return 0;

}

//7.157.14中二进制形式存放在磁盘文件中的数据读入内存并显示在显示器上

#include <iostream>

#include <fstream>

#include <string>

using namespace std;

struct student

{

string name;

int num;

int age;

char sex;

};

int main()

{

int i;

student stud[3];

ifstream infile("stud.dat",ios::binary);

if(!infile)

{

cerr<<"open error!"<<endl;

abort();

}

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

// infile.read((char *)&stud[i],sizeof(stud[i]));

infile.read((char *)&stud[0],sizeof(stud));

infile.close();

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

{

cout<<"NO."<<i+1<<endl;

cout<<"name:"<<stud[i].name<<endl;

cout<<"num:"<<stud[i].num<<endl;

cout<<"age:"<<stud[i].age<<endl;

cout<<"sex:"<<stud[i].sex<<endl;

}

return 0;

}

//7.165个学生的数据:要求①把它们存到磁盘文件中;②将磁盘文件中的第135个学生的

//数据读入程序;并且显示出来;③将第三个学生的数据修改后存放回磁盘文件中的原来位置;

//④从磁盘文件读入修改后的5个学生数据并且显示出来

#include <iostream>

#include <fstream>

#include <string>

using namespace std;

struct student

{

int num;

char name[20];

float score;

};

int main()

{

int i;

student stud[5]={1001,"Zhao",80,1002,"Tian",81,1003,"Sun",82,

1004,"Li",83,1005,"Zhou",84};

fstream iofile("stud.dat",ios::in|ios::out|ios::binary);//fstream类定义输入输出二进制文件流对象iofile

if(!iofile)

{

cerr<<"open error!"<<endl;

abort();

}

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

iofile.write((char *)&stud[i],sizeof(stud[i]));//向磁盘文件输出5个学生的数据

student stud1[5];//用来存放磁盘文件读入的数据

for(i=0;i<5;i=i+2)

{

iofile.seekg(i*sizeof(stud[i]),ios::beg);//定位于第0 2 4学生数据开头

iofile.read((char *)&stud1[i/2],sizeof(stud1[0]));//先后读入3个学生的数据;存放在stud1[0],stud1[1],stud2[2]

cout<<stud1[i/2].num<<" "<<stud1[i/2].name<<" "<<stud1[i/2].score<<endl;

}

cout<<endl;

stud[2].num=1012;

strcpy(stud[2].name,"Wang");

stud[2].score=90;

iofile.seekp(2*sizeof(stud[0]),ios::beg);//定位于第三个学生数据的开头

iofile.write((char *)&stud[2],sizeof(stud[2]));//更新第三个学生的数据

iofile.seekg(0,ios::beg);//重新定位于文件开头

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

{

iofile.read((char *)&stud[i],sizeof(stud[i]));//读入5个学生的数据

cout<<stud[i].num<<" "<<stud[i].name<<" "<<stud[i].score<<endl;

}

iofile.close();

return 0;

}

//7.17将一组数据保存在字符数组中

#include <iostream>

#include <strstream>

using namespace std;

struct student

{

int num;

char name[20];

double score;

};

int main()

{

student stud[3]={1001,"Li",78.2,1002,"Wang",89,1004,"Fun",90};

char c[50];

ostrstream strout(c,30);//建立输出字符串流;与数组c建立关联;缓冲区长30

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

strout<<stud[i].num<<stud[i].name<<stud[i].score;

strout<<ends;//endsc++I/O操作符;插入一个'\0'

cout<<"array c:"<<c<<endl;

return 0;

}

/在一个字符数组c中存放了10个整数,以空格相间隔,要求将它们放到整数型数组中,再按大小排序,然后

//再存放回字符数组c

#include <iostream>

#include <strstream>

using namespace std;

int main()

{

char c[50]="12 34 65 -23 -31 33 61 99 321 32";

int a[10],i,j,t;

cout<<"array c:"<<c<<endl;

istrstream strin(c,sizeof(c));//建立输入串流对象strin并与字符数组c关联

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

strin>>a[i];//从字符数组c读入10个整数赋给整型数组a

cout<<"array a:";

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

cout<<a[i]<<" ";

cout<<endl;

for(i=0;i<9;i++)//起泡法对数组a排序

for(j=0;j<9-i;j++)

if(a[j]>a[j+1])

{

t=a[j];

a[j]=a[j+1];

a[j+1]=t;

}

ostrstream strout (c,sizeof(c)); //建立输出串流对象strout并与字符数组c关联

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

strout<<a[i]<<" ";    //10个整数存放在字符数组c

strout<<ends;    //加入'\0'

cout<<"array c:"<<c<<endl;

return 0;

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值