所使用的开发工具及环境:PC机一套 Visual Studio 2010
实验要求:
1.硬件基本配置:Intel PentiumIII以上级别的CPU,大于64MB的内存。
2.软件要求:Window 2000操作系统,Visual Studio 6.0或更高版本开发环 境。
3.实验学时:2学时
4.实现实验内容中的题目。
5.写实验报告
实验目的:
1、深入理解C++的输入输出的含义与其实现方法。
2、掌握标准输入输出流的应用。
3、掌握对文件的输入输出操作。
实验内容:
(1) 输入三角形的三边a,b,c,计算三角形的面积的公式是
, //20分,
形成三角形的条件是:a+b>c,b+c>a,a+c>b
编写程序,输入a,b,c,检查a,b,c是否满足以上条件,如不满足,由cerr输出有关出错信息。
#include
#include
using namespace std;
int main(){
double a,b,c,s,area;
cin>>a>>b>>c;
if(a+b<=c)
cerr<<"a+b<=c,error!"<
(2)(读写文本文件)建立两个磁盘文件f1.dat和f2.dat,编程序实现以下工作://30分
①从键盘输入20个整数,分别存放在两个磁盘文件中(每个文件中放10个整数);
②从f1.dat读入10个数,然后存放到f2.dat文件原有数据的后面;
③从f2.dat中读入20个整数,将它们按从小到大的顺序存放到f2.dat(不保留原来的数据)。
#include
#include
#include
using namespace std;
int a[100]={0};
const int Count=20;
void createDat(char *s){
fstream f1,f2;
f1.open("f1.dat",ios::out);
f2.open("f2.dat",ios::out);
}
void writeDat(int i){
fstream f1;
f1.open("f1.dat",ios::app);
fstream f2;
f2.open("f2.dat",ios::app);
if(i%2==0)
f1<>a[i++];
}
i--;
while(!f2.eof()){
f2>>a[i++];
}
}
int main(){
createDat("f1.dat");
createDat("f2.dat");
int i,j;
for(j=0;j!=Count;j++){
cin>>i;
writeDat(i);
}
readDat();
sort(a,a+Count);
for(i=0;i
(3)(读写二进制文件)编程序实现以下功能: (50分)
a)按职工号由小到大的顺序将5个员工的数据(包括号码、姓名、年龄、工资)输出到磁盘文件中保存。
b)从键盘输入两个员工的数据(职工号大于已有的职工号),增加到文件的末尾。
c)输出文件中全部职工的数据。
d)从键盘输入一个号码,从文件中查找有无此职工号,如有则显示此职工是第几个职工,以及此职工的全部数据。如没有,就输出“无此人”。可以反复多次查询,如果输入查找的职工号为0,就结束查询。
参考如下类结构:
class staff
{
public:void input();
void display();
private:
int id;//职工号
char name[20];
int age;
double pay;//工资
};
class FileHandle
{
public:FileHandle(char *pn);
void writeBinaryFile();
//在此函数中输入5个职工信息,再把5人信息写到二进制文件staff.dat中
void writeBinaryFile(staff *pstaff,n);
//在此函数中直接写pstaff所指数组中的n个职工信息到二进制文件staff.dat中,其中n个职工信息在主函数中通过键盘输入
void readBinaryFile(staff *pstaff,int &n);
//从staff.dat文件中读员工信息出来存入pstaff所指数组中,所读到的职工数存入n中
private:
char *filename;
};
int searchStaff(satff *pstaff,int n,int id);//实现在pstaff所指数组n个元素中查找员工号为id的员工。找到返回其在数组中的下标,未找到返回-1
#include //通用输入流和其他输入流的基类
#include //输入输出文件流类
#include //标准库头文件
using namespace std;
//录入员工信息
class staff
{
public:
staff(){}
//构造函数
staff(int num, char n[20], int ages, double wages)
{
id = num;
strcpy_s(name,n);
age = ages;
pay = wages;
}
//输入员工信息
void input()
{
cout << " 职工号 : ";
cin >> id;
cout << " 姓名 : ";
cin >> name;
cout << " 年龄 : ";
cin >> age;
cout << " 工资 : ";
cin >> pay;
}
//输出员工信息
void display()
{cout << " 职工号 : " << id << " 姓名 : " << name << " 年龄 : " << age << " 工资 : " << pay << endl;}
int getid()
{
return id;
}
private:
int id; //职工号
char name[20]; //姓名
int age; //年龄
double pay; //工资
};
class FileHandle
{
public:
FileHandle(char *pn):filename(pn){}
//在此函数中输入5个职工信息,再把5人信息写到二进制文件staff.dat中
void writeBinaryFile(staff *pstaff, int n)
{
ofstream iofile(filename, ios::in|ios::out|ios::binary);
if(!iofile)
{
cerr << "open error!" << endl; //打开错误
abort(); //异常退出
}
for(int i = 0; i < n; i++)
{
iofile.write((char *)&pstaff[i],sizeof(pstaff[i])); //写入文件
}
iofile.close();
}
//在此函数中直接写pstaff所指数组中的n个职工信息到二进制文件
//staff.dat中,其中n个职工信息在主函数中通过键盘输入
void writeBinaryFile(staff *pstaff)
{
ofstream iofile(filename, ios::out|ios::app);
if(!iofile)
{
cerr << "open error!" << endl;
abort(); //异常退出
}
iofile.seekp(0, ios::end);
//定位 直接跳到当前流的结尾,略过流内的所有数据。
iofile.write((char *)&pstaff, sizeof(staff));
iofile.close();
}
//从staff.dat文件中读员工信息出来存入pstaff所指数组中,所读到的职工数存入n中
void readBinaryFile(staff *pstaff, int n)
{
ifstream ifile(filename, ios::in|ios::out|ios::binary);
//创建输入文件,以输入文件打开,并以二进制方式输入
if(!ifile)
{
cerr << "open error!" << endl;
abort();
}
for(int i=0;i> num;
while(num){
file.searchStaff(num);
cout << " enter number you want search,enter 0 to stop. ";
cin >> num;
}
return 0;
}
结果与分析 ( 收获、问题 )
1、深入理解C++的输入输出的含义与其实现方法。
2、掌握标准输入输出流的应用。
3、掌握对文件的输入输出操作。