面向对象程序设计(4.2.2)--流类库与输入输出实验案例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

位 。输出要求左侧有一栏表示十位,顶部有一栏表示各位,中间的部分为十位和个位组合
后的数字的平方根。提示:使用 setw 和 setprecision 函数。
(4) 从键盘接收两个输入,分别是一个月的天数和该月的第一天是星期几(1-7),按照
一定的格式打印对应的月历。
5-3: 文 本 文 件 的 读 取 与 写 入
}
student starr[3] = {{101, "Wang Zheng", 92}, {102, "Li Heng", 85}, {103, "Liu Min", 97}}; //写入前 for(int i = 0; i < 3; i ++)
cout << starr[i];
//将结构数组当成数据块写入文件 fwrite(starr, sizeof(student), 3, fp); rewind(fp); //恢复读写指针的位置
5-2: 输 入 输 出 的 格 式 控 制
1. 实验目的: 学习 C++的输入输出流中控制格式的方法
2. 实验内容: (1) 在输入和输出之间进行不同进制的转换 (2) 利用设置输出宽度使输出按照一定标准对齐 (3) 设置浮点数的输出精度,使其输出按照一定标准对齐 3. 实验要求: (1) 测试不同进制的输入和输出:以十六进制的格式输入两个整数,再分别用十进制和 八进制的标准格式(以 0 起始)输出;再以八进制的格式输入两个整数,分别用十进制和 十六进制的标准格式(以 0x 起始)输出。 (2) 将表 5-2 中的数据,每个学生一行打印到屏幕上,要求每个学生的相邻信息在输出 时至少有两 个 字符的间隔,间隔用字符“.”填充,不同学生的同类信息要求对齐。提示:使 用 setw 和 setfill 函数,调用这两个函数需要包含 iomanip 头文件。
}
if((fpw = fopen("MyNotepad.exe", "wb+")) == NULL) {
cout << "Could not open the file." << endl; cout << "Exiting program." << endl; return 0; }
// 二进制文件读写操作,每次指定读写个字节 while(!feof(fpd)) { //使用 feof()判断文件尾
struct student { int stuID; char name[20]; float grade;
};
ostream& operator << (ostream& out, const student& s) { out << "Student ID: " << s.stuID << "\tName: " << << "\tGrade: " << s.grade << endl; return out;
(2) fread 和 fwrite 则是以数据块为单位读写文件的,适合以结构体或类对象为单位的文 件读写。在读写的时候,应当指明读写的大小。 (3) 上面四个函数,使用的细节都很多,具体请参见给出的参考程序。 6. 参考程序: (1) #include <iostream> using namespace std;
in.get(ch); ch --; if (in) out.put(ch); } cout << "解密完成!\n"; } in.close(); out.close(); return 0; } 7. 分析与思考: (1) 本实验的第一题中,用 fscanf/fprintf 函数和 fread/fwrite 函数有什么区别? 答:fscanf 和 fprintf 是以字符的方式写入或读取的,尤其在读取时,需要了解 dat 文件的格 式,此时读写的文件实质上是文本文件(可以查看生成的文件验证这一点)。fwrite 和 fread 是以结构体对象为单元读写的,读写的文件实质上是流文件。
方法 2. 实验内容: (1) 学习将结构体对象作为单元写入流文件和从流文件中读取的方法,比较 fread/fwrite 与 fscanf/fprintf 的区别,掌握流文件读写和文本文件读写的异同 (2) 以二进制可执行文件为例,学习以字节为单位读取二进制文件和写入二进制文件的 方法 3. 实验要求: (1) 建立一个存储学生信息的结构体,包含学号、姓名、分数等信息。 (1)、建立一个结构体对象,用 fprintf 函数写入文件 a.dat,再从文件中用 fscanf 读出,打 印到屏幕上。 (2)、将一个该结构体的数组中的各个对象用 fread 函数以数据块为单位写入到文件 b.dat 中,再用 fread 函数读出并打印到屏幕上。比较两种读写方法的不同。 (2) (使用 Windows 系统时选作本实验)用读写二进制文件的方式,将 Windows 操作系 统下“系统盘\Windows\”目录下的 notepad.exe(记事本程序)文件,以字节为单位依次读 出,再以字节为单位写入到新建的二进制文件 MyNotepad.exe 文件。在主函数中依次运行这 两个文件,会有什么效果? (3) 本题实现一种通用的文件加密和解密程序,无论对文本文件还是二进制文件均可使 用。加密时,将文件按二进制字节流的形式读取。读取每个字节后,将该字节加 1 存入新文 件。解密过程与之相反:读取每个字节后,将该字节减 1 存入新文件。
fclose(fp); // 关闭文件
//将结构数据当成数据块进行读写
if ((fp = fopen("b.dat", "wb+")) == NULL) { cout << "Could not open the file." << endl; cout << "Exiting program." << endl; return 0;
fclose(fp); // 关闭文件
return 0; } (2) 生成的 MyNotepad.exe 文件和原来的文件完全相同,并可以单独运行。本实验提供的 示例程序在关闭第一个弹出的 notepad.exe 文件后,继续运行生成的 MyNotepad.exe。 #include <iostream> using namespace std;
}
//用 fprintf()函数写结构数据到文件 fprintf(fp, "%d %s %f", st.stuID, , st.grade); rewind(fp); //恢复读写指针的位置
//用 fscanf()函数读文件中的数据赋值给结构并显示 student temp; fscanf(fp, "%d %s %f", &temp.stuID, , &temp.grade); cout << temp; cout << "-----------------------" << endl;
int main() {
FILE *fpd, *fpw; unsigned char dw; int i = 0;
if((fpd = fopen("C:\\Windows\\notepad.exe", "rb")) == NULL) { cout << "Could not open the file." << endl; cout << "Exiting program." << endl; return 0;
fread(&dw, 1, 1, fpd); fwrite(&dw, 1, 1, fpw); } // 关闭文件 fclose(fpd); fclose(fpw);
cout << "1 Run C:\\WINDOWS\\notepad.exe" << endl; system("C:\\WINDOWS\\notepad.exe"); cout << "-------------------" << endl; cout << "2 Run MyNotepad.exe!" << endl; system("MyNotepad.exe"); } (3) #include <iostream> #include <fstream> using namespace std;
} int sel; cout << "请选择操作(1-加密 2-解密): "; cin >> sel; if(sel == 1) {
while (in) { in.get(ch); ch ++; if (in) out.put(ch);
} cout << "加密完成!\n"; } if (sel == 2) { while (in) {
1. 实验目的: 了解文本文件读取和写入的方法
2. 实验内容: (1) 读取一个文本文件的内容,加以处理写入到另一个文本文件中,了解 C++读取文本 文件和修改文本文件的多种方法,理解文件输入输出流的概念。 3. 实验要求: (1) 写一个小程序完成以下内容:把一个文本文件(txt)转换成 html 文件,使得文本文 件在记事本中查看的效果和 html 文件在浏览器中查看的效果是相同的。一个网页的基本格 式是以“<html>”作为文件开头,“</html>”作为文件结尾,此外的每一行文本由“<p>”开 头,“</p>”结尾。按照给出的提示完成要求,txt 文件自己编写并存放在主程序代码文件的 同一个文件夹下。
表 5-2 学生数据
name
stuID
age
gender
Zhang Li
1151
24
girl
Chi Jun
1102
22
boy
Sun Yan
1089
21
boy
Tong Fan
hen 1092
21
girl
(3) 输出一个平方根表,其中包含 100 内的非负整数平方根,输出时精确到小数 点后 4
int main() {
char ch; char src[25],dst[25]; ifstream in; cout << "请输入源文件名:"; cin >> src; in.open(src, ios::binary); if (!in) {
cout << "Cannot open file."; return 1; } cout << "请输入目标文件名:"; cin >> dst; ofstream out; out.open(dst, ios::binary); if (!out) { cout << "Cannot open file."; return 1;
本题要求在一个程序实现文件的加密和解密,由用户来选择进行什么操作。下面是程序 执行样例:
请输入源文件名:black.bmp 请输入目标文件名:new.bmp 请选择操作(1-加密 2-解密): 1 加密完成!
请输入源文件名:new.bmp 请输入目标文件名:old.bmp 请选择操作(1-加密 2-解密): 2 解密完成! 4. 实验条件:本实验的第二题要求在 Windows 系统环境下编写和运行。 5. 实验分析: (1) fprintf 和 fscanf 是格式化的读写函数,以字符串为单位读取 /写入数据,在运用 fprintf 与 fscanf 时,在向文件输出数据及从文件读取数据时,分隔符应该相一致。
//按数据块从文件中读取数据赋值给结构数组 student temp_arr[3]; if (!feof(fp)) //使用 feof()判断文件尾
fread(temp_arr, sizeof(student), 3, fp); for(int i = 0; i < 3; i ++) //写入后
cout << temp_arr[i];
第 4 模块第 2 单元实验案例
以下实验案例取自于《面向对象程序设计经典实验案例集》,郑莉等编著,高等教育出 版社。案例编号与原书中编号一致
5-1: 流 文 件 ( 二 进 制 文 件 ) 的 读 取 与 写 入
1. 实验目的: 了解流文件(即二进制文件)读取和写入的方法,掌握将类或结构体对象存入文件的
}
int main() {
FILE *fp; //声明 FILE 结构指针变量 student st = {1001, "Zhang", 85.5}; cout << st;
if ((fp = fopen("a.dat", "wb+")) == NULL) { cout << "Could not open the file." << endl; cout << "Exiting program." << endl; return 0;
相关文档
最新文档