//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.6用get函数读入字符
#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.7用cin.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.10用ignore函数的情况
#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);//nocreate在c++标准中没定义
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.15将7.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.16有5个学生的数据:要求①把它们存到磁盘文件中;②将磁盘文件中的第1,3,5个学生的
//数据读入程序;并且显示出来;③将第三个学生的数据修改后存放回磁盘文件中的原来位置;
//④从磁盘文件读入修改后的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;//ends是c++的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;
}