07_IO

本章主要讲解文件操作(C++ 基本输入输出、C 语言格式化输出 、C 语言文件读写)
展开查看详情

1.第七讲 文件操作 —— C++ 基本 输入输出 —— C 语言格式化 输出 —— C 语言文件读写

2.2 C++ 基本输入输出

3.3 I / O 基本概念 C++ 本身没有输入输出语句。 C++ 中的输入输出是通过相应的 I/O 流类库 实现的 数据流 提取(读):从流对象中获取数据,运算符 为 " >> " 插入(写):向流对象中添加数据,运算符 为 " << " 将数据从一个对象到另一个对象的流动抽象为 “流” 提取和插入运算符是所有标准 C++ 数据类型预先设计的 插入运算符与 操纵符 一起使用,可以控制输出格式

4.4 输入输出操作 cin : 标准输入(键盘等) cout : 标准输出(屏幕、打印机等) cerr : 标准错误输出,没有缓冲,立即被输出 clog : 与 cerr 类似,但有缓冲,缓冲区满时被输出 头文件 iostream 中预定义的四个输入输出对象 操纵符 用于控制数据的输出格式 两种途径: iomanip 头文件 和 ios_base 类

5.5 操纵符 操纵符 含义 endl 插入换行符,并刷新流 setw(n) cout.width(n) 设置域宽 setfill( 字符 ) cout.fill( 字符 ) 设置填充 left / right 对齐方式(左对齐 / 右对齐 ) ,缺省右对齐 fixed 使用定点方式输出 scientific 使用指数形式 setprecision (n) 设置输出的有效数字个数;若在 fixed 或 scientific 后使用,则设置小数位数 showpoint 显示小数点及尾随零,即使没有小数部分 需加入头文件 iomanip

6.6 操纵符(宽度) 设置宽度: setw( 宽度 ) 或 cout.width( 宽度 ) int A[3][3]={{11,12,13},{21,22,23},{31,32,33}}; for (int i=0; i<3; i++) { for (int j=0; j<3; j++) cout << setw(4) << A[i][j]; // 设置输出宽度 cout << "

7.7 操纵符(填充符) 设置填充符: setfill( 字符 ) 或 cout.fill( 字符 ) int A[3][3]={{11,12,13},{21,22,23},{31,32,33}}; // cout.fill (*); // 设置填充符 cout << setfill (*); // 设置填充符 for ( int i =0; i <3; i ++) { for ( int j=0; j<3; j++ ) cout << setw (4) << A[ i ][j]; // 设置输出宽度 cout << "

8.8 操纵符(对齐方式) 设置左对齐: left / right int A[3][3]={{11,12,13},{21,22,23},{31,32,33}}; cout << left; // 设置左对齐 for (int i=0; i<3; i++) { for (int j=0; j<3; j++) cout << setw(4) << A[i][j]; cout << "

9.9 操纵符(输出格式) 以定点格式显示数值: fixed cout << fixed; // 定点格式 for (int i=0; i<3; i++) cout << a[i]; 以科学计数法(指数形式)显示数值: scientific double a[3]={2.7182818, 31.416, 987000}; cout << scientific; // 以指数形式输出 for (int i=0; i<3; i++) cout << a[i]; ex07_fixed_scientific.cpp

10.10 操纵符(精度) 设置输出精度: setprecision double a[3]={2.7182818, 31.416, 987000}; for (int i=0; i<3; i++) cout << setprecision(3) << a[i]; 缺省精度为小数点后 6 位 ex07_setprecision.cpp

11.11 操纵符等价用法 left setiosflags(ios::left) right setiosflags(ios::right) fixed setiosflags(ios::fixed) scientific setiosflags(ios::scientific) 更多操作符参见头文件 iomanip

12.12 C 语言格式化 输出 —— printf 语句

13.13 C 语言输出 C 语言的输出函数: printf 格式控制字符串: 普通字符串 、 格式字符串 、 转义字符 printf ( “ 格式控制字符串 ” ,输出变量列表 ); 格式字符串 :以 % 开头,后面跟各种 格式说明符 int k=5; double a=3.14; printf( “k=%d, a=%f

14.14 格式字符串 % [flag][ 输出最小宽度 ][. 精度 ] 格式说明符 printf ("pi= % - 12 . 6 f

15.15 格式说明符与转义字符 常见的格式说明符 c 字符型 g 浮点数(自动) d 十进制整数 o 八进制 e 浮点数(科学计数法) s 字符串 f 浮点数(小数形式) x/X 十六进制 常见转义字符(输出 特殊 符号)  退后一格 水平制表符 换页 \ 反斜杠

16.16 C 语言文件读写 文件读写基本步骤 : 打开 文件、读取或写入、关闭 文件

17.17 文件读写 文件的分类 按存储介质: 普通文件:存储介质文件(磁盘、磁带等) 设备文件:非存储介质(键盘、显示器、打印机等) 按数据的组织形式: 文本文件 : ASCII 文件,每个字节存放一个字符的 ASCII 码 二进制文件 :数据按其在内存中的存储形式原样存放

18.18 C 语言文件读写 文件指针 FILE *pf; 文件打开 pf=fopen( 文件名,打开方式 ); 文件名:普通字符串 打开方式:读、写、文本文件、二进制文件 rt 、 wt 、 at 、 rb 、 wb 、 ab 、 rt+ 、 wt+ 、 at+ 、 rb+ 、 wb+ 、 ab+ (r 为读, w 为写, + 为读写, t 为文本, b 为二进制) 注:若文件打开成功,返回指向文件的指针; 若 打开失败,则返回一个空指针 (NULL)

19.19 fopen / fclose FILE *pf; pf=fopen( "out1.txt","wt" ); if (pf==NULL) { printf("ERROR: Can not open the file!

20.20 文本文件 写文本文件 fprintf(pf, " 格式控制字符串 " ,输出变量列表 ); 用法与 printf 类似 FILE *pf; pf=fopen( "out1.txt","wt" ); double pi=3.1415926; fprintf(pf,"pi=%-12.6f

21.21 二进制文件 写二进制文件 fwrite(buffer, size , count , pf); 读二进制文件 fread(buffer, size , count , pf); 将 count 个长度为 size 的连续数据写入到 pf 指向的文件中, buffer 是这些数据的首地址(可以是指针或数组名) 从 pf 指向的文件中读取 count 个长度为 size 的连续数据, buffer 是存放这些数据的首地址(可以是指针或数组名)

22.22 二进制文件 int A[3][3]={{11,12,13},{21,22,23},{31,32,33}}; FILE *pf; pf= fopen(" data 1. dat "," w b "); fwrite(A,sizeof(int),9,pf); fclose(pf); int B[3][3]; pf= fopen(" data 1. dat "," rb "); fread(B,sizeof(int),9,pf); fclose(pf); fwrite(A,sizeof(A),1,pf); ex07_fwrite_fread.cpp

23.23 上机作业(文件操作) 2) 从课程主页上下载 二进制 数据文件 data72.dat ,从文件中读取前 60 个元素( 双精度 ),构成一个 30X2 的矩阵 A 。然后将其按矩阵形式写入到一个 文本文件 out72.txt 中。 (程序命名为 hw07_02.cpp ) 1) 生成一个 6X6 的矩阵 A ,其元素为 [0,1] 之间的双精度数。 (a) 将其按矩阵形式写入到一个 文本文件 out71.txt 中; (b) 将其写入到一个 二进制文件 data71.dat 中; (c) 从二进制文件 data71.dat 中读取前 12 个数据( 双精度 ), 构成一个 2X6 的矩阵 B ,并将 B 按行输出。 (程序命名为 hw07_01.cpp )

24.24 上机作业(函数) 3) 编写两个函数,分别用循环和递归计算一个整数的所有数字之和。 并在主函数中分别调用这两个函数计算 2012112118 的所有数字之和 int sum_loop(long x); int sum_recursion(long x); 4) 编写函数,计算两个多项式 a(x) 和 b(x) 的乘积 c(x)=a(x)*b(x) (a) 多项式用其系数组成的数组来表示; (b) 函数原型见下面,其中 pa , pb 分别是指向数组 a 和 b 的指针, 这里 a 和 b 是两个数组,分别代表两个多项式 a(x) 和 b(x) ; pc 是指向数组 c 的指针,这里的 c 代表多项式 c(x) ; m 和 n 分别是数组 a 和 b 的长度 (c) 在主函数中,调用该函数计算下面两个多项式的乘积: a(x)=2x 3 -6x+1; b(x)=3x 2 +x-2; void ploy_prod(double *pa, double *pb, double *pc, int m, int n); 程序命名为 hw07_03.cpp 程序命名为 hw07_04.cpp