内容发布更新时间 : 2024/11/17 0:06:59星期一 下面是文章的全部内容请认真阅读。
String() //定义缺省的构造函数 {Sp=0;Length=0;}
String(const char *s) //定义初始化构造函数 { Length=strlen(s);
Sp=new char[Length +1]; strcpy(Sp,s); }
~String() //定义析构函数 { if (Sp) delete [] Sp;}
void Show() //定义显示字符串函数 { cout< friend String operator +=(String &s) //定义字符串拼接友员函数 }; String operator +=(String &s) //定义字符串拼接函数 { String t; t.Length=Length+s.Length; t.Sp=new char[t.Length+1]; strcpy(t.Sp,Sp); strcat(t.Sp,s.Sp); return t; } void main (void) { String s1(\ s1.Show(); s2.Show(); s2+=s1; s2.Show(); } 程序运行结果: software hardware softwarehardware 实验十四 1.实验要求: 通过本次实验 (1)理解流、流类、流类体系的概念; (2)学会用预定义格式控制函数设置输出格式(数制、宽度、小数点等); (3)掌握文本文件的使用方法; (4)初步掌握二进制文件的使用方法。 2.实验要求 (1)编写实验程序; (2)在VC++运行环境中,输入源程序; (3)编译运行源程序; (4)输入实验数据,写出运行结果。 3.实验内容 (1)定义描述职工工资的类Laborage,数据成员为职工号(No)、姓名(Name[8])、应发工资(Ssalary)、社保金(Security)、实发工资(Fsalary)。 定义公有成员函数Input(),在Input()函数内输入职工号、姓名(用getline函数)、应发工资、社保金,实发工资由公式: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 (2)将一个源文件复制为两个不同名目的文件,源文件与目的文件均用构造函数打开,使用成员函数get与put复制第一个目的文件,使用getline与插入运算符复制第二个目的文件。(提示:用get函数将输入文件流对象的指针指向文件尾后,无法将该指针移到文件首位置。所以只能定义两个输入文件流对象打开同一源文件,用于两种方式的文件复制。) 实验数据: 源文件:e:\\ex\\a.txt,文件内容为souce file 目的文件1:e:\\ex\\b.txt 目的文件2:e:\\ex\\c.txt (3)将存放在源文件(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 (4)产生一个二进制数据文件,将n~m之间的所有素数写入文件data.dat中。从数据文件中读取二进制数据,并在显示器上以每行5个数的形式显示。 实验数据: n=100 m=400 4.解答参考 (1) # include { private: int No; char Name[8]; float Ssalary,Security,Fsalary; public: void Input(void) { cin>>No; cin.getline(Name,10); cin>>Ssalary>>Security; Fsalary=Ssalary-Security; } void Show() { cout< < < < < void main(void) { int i,no; Laborage e[5]; cout<<\请输入工号、姓名、应发工资、社保金 \\n\ for (i=0;i<3;i++) { e[i].Input(); } cout<<\工号 姓名 应发工资 社保金 实发工资 for (i=0;i<3;i++) e[i].Show(); } 程序运行结果: 请输入工号、姓名、应发工资、社保金 1001 Zhou Zhi 3000 200 1002 Chen Hua 4000 400 1003 Wang Fan 5000 500 \\n\ 工号 姓名 应发工资 社保金 实发工资 1001 Zhou Zh 3000.00 200.00 2800.00 1002 Chen Hu 4000.00 400.00 3600.00 1003 Wang Fa 5000.00 500.00 4500.00 (2) # include { char fname1[256],fname2[256],fname3[256]; char buff[300]; cout<<\输入源文件名:\ cin>>fname1; cout<<\输入目的文件名1:\ cin>>fname2; cout<<\输入目的文件名2:\ cin>>fname3; ifstream infile; infile.open(fname1); ofstream outfile; outfile.open(fname2); if (!infile) { cout<<\不能打开输入文件:\ exit(1); } if (!outfile) { cout<<\不能打开目的文件:\ exit(1); } infile.unsetf(ios::skipws); //设置为不要跳过文件中的空格。 char ch; while (infile.get(ch)) //从源文件中提取一个字符到变量ch中; outfile.put(ch); //将ch中的字符写入目的文件中。 infile.close(); //关闭源文件 outfile.close(); //关闭目的文件 fstream infile1,outfile1; infile1.open(fname1,ios::in | ios::nocreate); outfile1.open(fname3,ios::out | ios::noreplace); if (!infile1) { cout<<\源文件不存在,不能打开源文件!\ exit(1); } if (!outfile1) { cout<<\目标文件已存在,不能新建目标文件!\ exit(2); } while (infile1.getline(buff,300)) //从源文件中读一行字符到缓冲区; outfile1< 程序运行结果: 输入源文件名:e:\\vc\\a.txt 输入目的文件名1:e:\\vc\\b.txt 输入目的文件名2:e:\\vc\\c.txt (3) 保存到文件 # include char fname[256]; cout<<\输入文件名:\ cin>>fname; ofstream outfile; outfile.open(fname); if (!outfile) { cout<<\不能打开目的文件:\ exit(1); } cout<<\输入数组元素:\ for ( i=0 ;i<3;i++) for (j=0;j<3;j++) cin>>a[i][j]; for(i=0;i<3;i++) { for(j=0;j<3;j++) outfile< outfile.close(); } 从文件中读取 # include