C语言讲义第12章.ppt
合集下载
c语言学习c语言课件第12章
C语言提供fgets()和fputs()函数来实现对文件以字 符为单位进行读写,由于这两个函数在使用中往往是 一次读写一行,所以也称行读写函数。
1. 读字符串函数fgets
C提供读字符串的函数原型在stdio.h头文件中,其函数形式为 :
char *fgets(char *str,int num,FILE *fp)
unsigned char *curp; /*文件读写位置*/
unsigned istemp;
/*临时文件,指示器*/
short token;
/*用于有效性的检查*/
} FILE;
在操作文件以前,应先定义文件类型的指针,定义 的一般格式:
FILE *指针变量标识符
例如:
FILE *fp1,*fp2;
例如:
ch=fgetc(fp);/*从fp指向的文件中读取一个字符送入ch 变量中*/
2. 写字符函数fputc
fputc()函数的原型为:
int fputc(int ch,FILE *fp)
功能:将字符ch的值写入所指定文件的当前位置处,并将文件 指针后移一位。fputc()函数的返回值是所写入字符的值,出 错时返回EOF。
2)标准输出文件——stdout:指向终端输出(一 般为显示器)。
3)标准错误文件——stderr:指向终端标准错误 输出(一般为显示器)。
12.2.2 文件的关闭──fclose()函数 1.用法: int fclose(FILE *文件指针); 2.功能:关闭“文件指针”所指向的文件。如果 正常关闭了文件,则函数返回值为0;否则,返回值 为非0。 例如,fclose(fp);/*关闭fp所指向的文件*/
文件命名规则,遵循操作系统的约定。 2.文件分类 可以从不同的角度对文件进行分类: (1)根据文件的内容,可分为程序文件和数据文 件,程序文件又可分为源文件、目标文件和可执行文件 。 (2)根据文件的组织形式,可分为顺序存取文件 和随机存取文件。
1. 读字符串函数fgets
C提供读字符串的函数原型在stdio.h头文件中,其函数形式为 :
char *fgets(char *str,int num,FILE *fp)
unsigned char *curp; /*文件读写位置*/
unsigned istemp;
/*临时文件,指示器*/
short token;
/*用于有效性的检查*/
} FILE;
在操作文件以前,应先定义文件类型的指针,定义 的一般格式:
FILE *指针变量标识符
例如:
FILE *fp1,*fp2;
例如:
ch=fgetc(fp);/*从fp指向的文件中读取一个字符送入ch 变量中*/
2. 写字符函数fputc
fputc()函数的原型为:
int fputc(int ch,FILE *fp)
功能:将字符ch的值写入所指定文件的当前位置处,并将文件 指针后移一位。fputc()函数的返回值是所写入字符的值,出 错时返回EOF。
2)标准输出文件——stdout:指向终端输出(一 般为显示器)。
3)标准错误文件——stderr:指向终端标准错误 输出(一般为显示器)。
12.2.2 文件的关闭──fclose()函数 1.用法: int fclose(FILE *文件指针); 2.功能:关闭“文件指针”所指向的文件。如果 正常关闭了文件,则函数返回值为0;否则,返回值 为非0。 例如,fclose(fp);/*关闭fp所指向的文件*/
文件命名规则,遵循操作系统的约定。 2.文件分类 可以从不同的角度对文件进行分类: (1)根据文件的内容,可分为程序文件和数据文 件,程序文件又可分为源文件、目标文件和可执行文件 。 (2)根据文件的组织形式,可分为顺序存取文件 和随机存取文件。
C语言课件第12章 位运算
1.
位运算规则: 位运算规则: A 0 0 1 1 B 0 1 0 1 A&B 0 0 0 1 A|B 0 1 1 1 A^B 0 1 1 0 ~a 1 1 0 0
例12.1 若 a=(15)10=(00001111)2, a=(15) b=(80)10=(01010000)10 则: a&b = 0000 0000, a|b = 0101 1111, a^b =01011111 , ~a = 1111 0000
/*设 a 为待处理的数据,转换成二进制为00001000, /*设 为待处理的数据,转换成二进制为00001000, b用来保存将a的高4位清0后的结果*/ 用来保存将a的高4位清0后的结果* main() { unsigned char a,b,c; a=8; b=a&0x0f; c=b|0xa0; /*c用于保存最终结果*/ b=a&0x0f; c=b|0xa0; /*c用于保存最终结果 用于保存最终结果* printf("%x" printf("%x",c); }
4)左移,右移运算实现将一个数的各个二进制位向左,向 4)左移,右移运算实现将一个数的各个二进制位向左,向 右移若干位. 左移:将一个数的各个二进制位左移若干位,高位左移 左移:将一个数的各个二进制位左移若干位, 后舍弃,低位补0 后舍弃,低位补0 . 若定义: 若定义: int a=8; 即a= 0000 1000 0010 0000 0000 右移:将一个数的各个二进制位右移若个位,低位右移 右移:将一个数的各个二进制位右移若个位, 后舍弃, 还是补1 后舍弃,高位补 0还是补1,要区别有符号数还是无符号 无符号数高位补0 有符号数高位补原符号位. 数:无符号数高位补0,有符号数高位补原符号位. 若定义 unsigned int a=8; 即 00001000, a=8; 00001000, 则语句 a=a>>2 ;将 a 的各二进制位右移 2 位,空出的 高位补 0.结果为: 0000 0010 , 则语句a=a<<2; 则语句a=a<<2;
数据结构C语言版严蔚敏清华大学出版社课件第十二章 .ppt
“批处理”,就是将这两个文件“合”为 一个新的主文件。具体操作相当于 “归并两个有序表”。
2020/1/21
16
但有两点不同:
(1)对于事务文件中的每个操作 首先要判别其“合法性”
(2)事务文件中可能存在多个操 作是对主文件中同一个记录 进行的
2020/1/21
17
批处理的时间分析:
假设主文件中含有n个记录,事 务文件中含有m个记录,则对事务文 件进行排序的时间复杂度为
插入:当查找不成功时,将记录插入 在相应的基桶或溢出桶内;
删除:对被删记录作特殊标记。
2020/1/21
48
4. 优点:记录随机存放,不需要进行排
序;插入、删除方便,存取速 度快;节省存储空间,不需要 索引区。
缺点:不能进行顺序存取;在经过多 次插入和删除操作之后,需进 行“重组文件”的操作。
2020/1/21
35
3.文件重组
在经过多次的插入和删除操作之 后,大量的记录进入文件的“溢出 区”,而“基本存储区”中出现很 多已被删去的记录空间,此时的文 件结构很不合理。因此,对ISAM文 件, 需要周期地进行重整。
2020/1/21
36
4.柱面索引的位置
ISAM文件占有多个柱面,其柱 面索引本身占有一个柱面,为使 “磁头”的平均移动距离最小,柱 面索引应设在数据文件所占全部柱 面的中间位置上。
… ...
索引集
B+树 顺序集
...
...
... 数据集
2020/1/21
控制区域
控制区间
39
2. 控制区间是用户进行一次存取的 逻辑单位,可看成是一个逻辑磁道。 但它的实际大小和物理磁道无关。
C语言第12章.ppt
20
三、字符变量
用于存放字符常量,即一个字符变量只能存放一个 字符。
在内存中占一个字节,取值范围-128~127。
例:char c1, c2 ;
例2.5, 例2.6
2.4 变量的初始化
即定义变量的同时赋于其相同类型的初值。 如:int a=2, b=4 ;
long x=110 ; double d=4.67 ;
xdouble ydouble x+y xint x+y (x+y)double zdouble (x+y)+z
结果类型
int
double long double double
29
例:long m ;
改为:m=(long)234*456/6 ;
m=234*456/6 ;
234L*456/6
m为-4061,而不是17784。
设a=2, b=3,求
a=5+(c=6)
a=5+6=11
a+=a=a+b
(1)a=a+b=2+3=5 (2)a=a+a=5+5=10
a%=b%=2
(1) b=b%2=3%2=1 (2) a=a%b=2%1=0
b+=b-=(b*b) (1) b=b-(b*b)=3-(3*3)=-6 (2) b=b+b=-6+(-6)=-12
22
2.5.1 算术运算符和算术表达式
一、基本算术运算符
+、-、*、/、%
优先级:*、/、%高于+、- 结合性:自左至右
注意%的使用:
(1)%两侧均为整型数据
(2)结果的符号由左边数据的符号决定。
如:5%(-3)=2 -5%3=-2
三、字符变量
用于存放字符常量,即一个字符变量只能存放一个 字符。
在内存中占一个字节,取值范围-128~127。
例:char c1, c2 ;
例2.5, 例2.6
2.4 变量的初始化
即定义变量的同时赋于其相同类型的初值。 如:int a=2, b=4 ;
long x=110 ; double d=4.67 ;
xdouble ydouble x+y xint x+y (x+y)double zdouble (x+y)+z
结果类型
int
double long double double
29
例:long m ;
改为:m=(long)234*456/6 ;
m=234*456/6 ;
234L*456/6
m为-4061,而不是17784。
设a=2, b=3,求
a=5+(c=6)
a=5+6=11
a+=a=a+b
(1)a=a+b=2+3=5 (2)a=a+a=5+5=10
a%=b%=2
(1) b=b%2=3%2=1 (2) a=a%b=2%1=0
b+=b-=(b*b) (1) b=b-(b*b)=3-(3*3)=-6 (2) b=b+b=-6+(-6)=-12
22
2.5.1 算术运算符和算术表达式
一、基本算术运算符
+、-、*、/、%
优先级:*、/、%高于+、- 结合性:自左至右
注意%的使用:
(1)%两侧均为整型数据
(2)结果的符号由左边数据的符号决定。
如:5%(-3)=2 -5%3=-2
C语言PPT教程第十二章
• “a”方式打开:只可写,追加方式写入(实际是从 文件结尾处打开),如果要打开的文件存在,则向 文件写入时会在已有文件内容后追加,文件不存在, 则按指定文件名新建一个文件
• “r+”方式打开:可读写
• “w+”方式打开:可读写
• “a+”方式打开:可读写,追加方式写入
15
打开文本文件
fopen在程序中的一般形式
言对于该文件的操作,全部通过操作该指针 来完成 • 文件指针声明方式为:
FILE *fp
此处必须大写
12
文件指针的名称,可随意
基本的文件函数
函数名 fopen( ) fclose( ) fputc( ) fgetc( ) fread() fwrite() fseek( ) fprintf( ) fscanf( ) feof( ) ferror( ) rewind( ) remove( ) fflush( )
回顾
• 上一节课主要讲解了以下内容
– 结构体 – 结构体数组 – typedef关键字 – 冒泡排序法 – 插入排序法
1
目标
• 解释流和文件 • 讨论文本流和二进制流 • 解释各种文件函数 • 解释文件指针 • 讨论当前活动指针
2
文件操作的必要性
• 程序或软件有时需要把处理的数据
– 永久保存 – 方便地移动和交换 – 只在必要时打开和调用
int fclose(FILE *fp); – fcloseall() 函数用于关闭所有打开的流
18
向文本文件中写入字符
• fputc() 用于将字符写入前面由 fopen() 打开的 文件
• fputc()函数的原型为: fputc(char ch, FILE *fp);
• “r+”方式打开:可读写
• “w+”方式打开:可读写
• “a+”方式打开:可读写,追加方式写入
15
打开文本文件
fopen在程序中的一般形式
言对于该文件的操作,全部通过操作该指针 来完成 • 文件指针声明方式为:
FILE *fp
此处必须大写
12
文件指针的名称,可随意
基本的文件函数
函数名 fopen( ) fclose( ) fputc( ) fgetc( ) fread() fwrite() fseek( ) fprintf( ) fscanf( ) feof( ) ferror( ) rewind( ) remove( ) fflush( )
回顾
• 上一节课主要讲解了以下内容
– 结构体 – 结构体数组 – typedef关键字 – 冒泡排序法 – 插入排序法
1
目标
• 解释流和文件 • 讨论文本流和二进制流 • 解释各种文件函数 • 解释文件指针 • 讨论当前活动指针
2
文件操作的必要性
• 程序或软件有时需要把处理的数据
– 永久保存 – 方便地移动和交换 – 只在必要时打开和调用
int fclose(FILE *fp); – fcloseall() 函数用于关闭所有打开的流
18
向文本文件中写入字符
• fputc() 用于将字符写入前面由 fopen() 打开的 文件
• fputc()函数的原型为: fputc(char ch, FILE *fp);
c第12章 上 机 实 验ppt课件
精品课件
2
实验一 C程序的运行环境
一、实验目的
1. 了解在计算机上如何录入、编辑、编译、连接和运行一个C程序。 2. 通过设计和调试简单的C程序,初步了解C程序的特点。 二、实验内容
1. 确保计算机操作系统中已安装了Turbo C。 2. 启动Turbo C。 (1) 将操作方式转入到MS-DOS方式。 (2) 假 设 Turbo C所在的目录为 C:\tc, 则 调用 Turbo C的 命 令 一般 为
(4) 2. 程序修改题
(5) 3. 程序编写题
(4) (1) 用选择法对10个整数作排序。10个整数用scanf函数
输入。
(5) (2) 编写连接两个字符串的程序。
精品课件
8
实验七 函 数
一、实验目的 1. 掌握定义函数的方法。 2. 掌握函数实参与形参的对应关系,以及“值传递”的方式。 3. 掌握函数的嵌套调用和递归调用的方法。 4. 掌握用“Project”菜单管理多个源程序文件的方法
C:\tc\tc,执行此命令后屏幕上将出现Turbo C的工作环境。 3. 熟悉Turbo C集成环境。
了解Turbo C界面的组成,各菜单命令、各功能键的作用。下面将详 细介绍各菜单命令及相应功能键的作用。
4. 编辑及运行一个简单的C源程序。 5. 重新开始编辑和运行另一个程序。 6. 人为地制造一些语法错误。 7. 独立完成教材第一章思考与练习中的第四大题。 8. 退出Turbo C环境。
不同类型数据间的混合运算规律。 4. 进一步掌握C语言简单程序设计的几个步骤。
二、实验内容 输入程序(教材p238),编译、运行、分析。
精品课件
4
实验三 顺序结构程序设计
一、实验目的 1. 掌握各种类型数据的输入输出方法,能正确运用各种格式字符。 2. 掌握C语言中顺序结构程序的设计方法,为以后作好准备。
kj第12章文件ppt课件全
以只写方式打开一个文本文件。若文件不存在,则建立该文件。 若文件已存在,则删除原文件内容,写入新内容。
以追加方式打开一个文本文件。只能向文件尾追加数据。文件必 须存在,否则打开失败。打开后,文件内部的位置指针指向文件 尾。
以只读方式打开一个二进制文件。文件必须存在,否则打开失败。 打开后,文件内部的位置指针指向文件首部的第一个字节。
以读/写方式打开或新建立一个二进制文件。若文件已存在,则新的写操作将覆盖 原来的数据。若文件不存在,则建立一个新文件。还可以在不关闭文件的情况下, 再读取文件内容。
以读和追加的方式打开一个二进制文件。允许读或追加。文件必须存在,否则打 开失败。打开后,文件内部的位置指针指向文件尾。可在文件尾追加数据,也可 将位置指针移到某个位置,读取数据。
第4页
12.1 文件概述
12.1.2 数据文件的存储形式
从文件的编码方式来看,文件可以分为ASCII码文件和 二进制文件两种。
ASCII码文件也称为文本文件,这种文件在磁盘中存储 时每个字符对应一个字节,存放的是该字符的ASCII码 值。
二进制文件是把内存中的数据按其在内存中的存储形式 原样输出到磁盘上存放。
图12.1中,00110001、00110010、00110011、 00110100分别是字符’1’、’2’、’3’、’4’的 ASCII码值的二进制形式。
第6页
存储内容用ASCII码形式输出时,其字节与字符一一对应,一 个字节代表一个字符,便于对字符进行逐个处理,也便于输出 字符,但一般占用的存储空间较多,而且要花费转换时间。
第15页
12.2 文件的打开与关闭
如果成功打开一个文件,则fopen() 函数将返回一个指向该文件的指针,否则 将返回空指针(NULL),由此可以判断 一个文件是否成功打开。
以追加方式打开一个文本文件。只能向文件尾追加数据。文件必 须存在,否则打开失败。打开后,文件内部的位置指针指向文件 尾。
以只读方式打开一个二进制文件。文件必须存在,否则打开失败。 打开后,文件内部的位置指针指向文件首部的第一个字节。
以读/写方式打开或新建立一个二进制文件。若文件已存在,则新的写操作将覆盖 原来的数据。若文件不存在,则建立一个新文件。还可以在不关闭文件的情况下, 再读取文件内容。
以读和追加的方式打开一个二进制文件。允许读或追加。文件必须存在,否则打 开失败。打开后,文件内部的位置指针指向文件尾。可在文件尾追加数据,也可 将位置指针移到某个位置,读取数据。
第4页
12.1 文件概述
12.1.2 数据文件的存储形式
从文件的编码方式来看,文件可以分为ASCII码文件和 二进制文件两种。
ASCII码文件也称为文本文件,这种文件在磁盘中存储 时每个字符对应一个字节,存放的是该字符的ASCII码 值。
二进制文件是把内存中的数据按其在内存中的存储形式 原样输出到磁盘上存放。
图12.1中,00110001、00110010、00110011、 00110100分别是字符’1’、’2’、’3’、’4’的 ASCII码值的二进制形式。
第6页
存储内容用ASCII码形式输出时,其字节与字符一一对应,一 个字节代表一个字符,便于对字符进行逐个处理,也便于输出 字符,但一般占用的存储空间较多,而且要花费转换时间。
第15页
12.2 文件的打开与关闭
如果成功打开一个文件,则fopen() 函数将返回一个指向该文件的指针,否则 将返回空指针(NULL),由此可以判断 一个文件是否成功打开。
C语言与程序设计ppt-第12章递归
第12章 递 归
华中科技大学计算机学院 卢萍
华中科技大学计算机学院C语言课
2021/4/25
程组
1
本章讲授内容
递归(recursion)是一项非常重要的编 程技巧,可以使程序变得简洁和清晰,是 许多复杂算法的基础。本章介绍 递归、递归函数的概念; 递归的执行过程; 典型问题的递归函数设计; 分治法与快速排序; 回溯法; 递归在动态规划等算法中的应用。
12
【例12.3】 设计一个求解汉诺塔问题的算法。
这是一个典型的用递归方法求解的问题。要移动n个 盘子,可先考虑如何移动n 1个盘子。分解为以下3 个步骤:
(1)把A上的n-1个盘子借助C移到B。 (2)把A上剩下的盘子(即最大的那个)移到C。 (3)把B上的n-1个盘子借助A移到C。 其中,第(1)步和第(3)步又可用同样的3步继
2021/4/25
华中科技大学计算机学院C语言课程组
2
12.1 递归概述
递归是一种函数在其定义中直接或间接调用 自己的编程技巧。递归策略只需少量代码就 可描述出解题过程所需要的多次重复计算, 十分简单且易于理解。
递归调用:函数直接调用自己或通过另一函 数间接调用自己的函数调用方式
递归函数:在函数定义中含有递归调用的函 数
续分解,依次分解下去,盘子数目n每次减少1,直 至n为1结束。这显然是一个递归过程,递归结束条 件是n为1。
2021/4/25
华中科技大学计算机学院C语言课程组
13
函数move(n,a,b,c)
为了更清楚地描述算法,可以定义一个函数 move(n,a,b,c)。该函数的功能是:将n个盘 子从木桩a上借助木桩b移动到木桩c上。算法 的第(1)步和第(3)步的实现都是递归调 用,分别为move(n-1,a,c,b)和move(n1,b,a,c)。
C语言PPT (12)
2012-5-6 C语言程序设计 16
• 如果有一个如下的结构体类型: struct student_type {char name[10]; int num; int age; char addr[30]; }stud[40]; • 结构体数组stud有40个元素,每一个元素用来存放一个学生的数据(包括姓 名、学号、年龄、地址)。假设学生的数据已放在磁盘文件中,可以用下面 的for语句和fread函数读入40个学生的数据。 for(i=0;i<40;i++) fread(&stud[i],sizeof(struct student_type),1,fp); • 同样,以下for 语句和fread函数可以将内存中的学生数据输出到磁盘文件 中去; for(i=0;i<40;i++) fwrite((&stud[i],sizeof(struct student_type),1,fp); 如果fread 或fwrite调用成功,则函数返回值为count的值,即输入或输 出数据项的完整个数。
2012-5-6 C语言程序设计 11
12.3 文件的读写
• 文件打开之后,就可以对它进行读写 操作了。文件读写包括文本文件的字 符或字符串读写、二进制文件的数据 块读写和文本文件的格式化读写等方 式,这些读写都是通过函数来实现的。
2012-5-6
C语言程序设计
12
12.3.1 读/写一个字符函数
2012-5-6
C语言程序设计
15
12.3.3 读/写一个数据块函数
用fgetc、fputc和fgets、fputs可以用来读写文件中的字符或 字符串。但是常常要求一次读入一组数据(例如,一个实数或一个结构 体变量的值),ANSI C标准提出设置两个函数(fread和fwrite), 用来读写一个数据块。这们的一般调用形式为: fread(buffer,size,count,fp); fwrite(buffer,size,count,fp); 其中: buffer:是数据块的指针。对于fread来说,它是读入数据存放的 起始地址。对于fwrite来说,是待输出数据的起始地址。 size:表示每个数据块的字节数。 count:用来指定每读、写一次,输入或输出数据块的个数(每个 数据块具有size字节)。 fp:文件指针。 如果文件以二进制形式打开,用fread和fwrite函数就可以读写任 何类型的信息,如: fread(f,4,2,fp); 其中f是一个数组名。一个实型变量占4个字节。这个函数从fp所指 向的文件读入2个4字节的数据,存储到数组f中。
• 如果有一个如下的结构体类型: struct student_type {char name[10]; int num; int age; char addr[30]; }stud[40]; • 结构体数组stud有40个元素,每一个元素用来存放一个学生的数据(包括姓 名、学号、年龄、地址)。假设学生的数据已放在磁盘文件中,可以用下面 的for语句和fread函数读入40个学生的数据。 for(i=0;i<40;i++) fread(&stud[i],sizeof(struct student_type),1,fp); • 同样,以下for 语句和fread函数可以将内存中的学生数据输出到磁盘文件 中去; for(i=0;i<40;i++) fwrite((&stud[i],sizeof(struct student_type),1,fp); 如果fread 或fwrite调用成功,则函数返回值为count的值,即输入或输 出数据项的完整个数。
2012-5-6 C语言程序设计 11
12.3 文件的读写
• 文件打开之后,就可以对它进行读写 操作了。文件读写包括文本文件的字 符或字符串读写、二进制文件的数据 块读写和文本文件的格式化读写等方 式,这些读写都是通过函数来实现的。
2012-5-6
C语言程序设计
12
12.3.1 读/写一个字符函数
2012-5-6
C语言程序设计
15
12.3.3 读/写一个数据块函数
用fgetc、fputc和fgets、fputs可以用来读写文件中的字符或 字符串。但是常常要求一次读入一组数据(例如,一个实数或一个结构 体变量的值),ANSI C标准提出设置两个函数(fread和fwrite), 用来读写一个数据块。这们的一般调用形式为: fread(buffer,size,count,fp); fwrite(buffer,size,count,fp); 其中: buffer:是数据块的指针。对于fread来说,它是读入数据存放的 起始地址。对于fwrite来说,是待输出数据的起始地址。 size:表示每个数据块的字节数。 count:用来指定每读、写一次,输入或输出数据块的个数(每个 数据块具有size字节)。 fp:文件指针。 如果文件以二进制形式打开,用fread和fwrite函数就可以读写任 何类型的信息,如: fread(f,4,2,fp); 其中f是一个数组名。一个实型变量占4个字节。这个函数从fp所指 向的文件读入2个4字节的数据,存储到数组f中。
C程序设计课件第12章
整理ppt
13
例
– 申请 float *p ; p = (float*)malloc( sizeof(float) ); struct date *pdate; pdate=(struct date*)malloc(sizeof(struct date));
– 释放 free(p); free(pdate);
首先,用什么数据结构存储:一张卡片是一 个结构体,所有卡片自然用结加一个人,应该在数组中加一个元素,会 产生数组不够大的可能。
– 若增加一张卡片在数组中间,应该把加入位置 以后的其它元素依次向后移动。
– 若在中间删除一张卡片,会在数组中间留下一 个“洞”,应该把“洞”以后的元素依次向前 移动
▪ 对一次申请的存储区进行多次释放(实际可能是 ptr无值或值为NULL)。
整理ppt
15
实用问题:
– 若指针变量指向的用malloc申请来的动态变量,是孤 立的不能与其它变量相联系,显然作用不大。
一章定义的日期类型,结果是6 */
整理ppt
10
malloc 函数: – 原型 void *malloc(unsigned long size); – 功能 申请足够大内存区域用来存储长度为size 的数据对象,返回该区域的首指针,并保证该 区域符合任何数据类型对存储区域开始地址和 对齐的要求。
返回指针是void类型的,调用者必须使用 显示强制类型转换,把该指针转换成所需要类 型的指针。
整理ppt
11
例: float *p ; p = (float*)malloc( sizeof(float) ); struct date *pdate; pdate=(struct date*)malloc(sizeof(struct date));
C语言第12章PPT教学课件
printf("input a to creat(########.###):"); gets(); if ((fp=fopen(,"wb"))==NULL)
如果正常关闭了文件,则函数返回值为0; 否则,返回值为非0(-1)。
2020/12/09
9
12.3 文件的读写操作
文件打开之后,就可以对它进行读与写的操作了。
12.3.1 读/写一个字符 12.3.3 读/写一个数据块 12.3.2 读/写一个字符串 12.3.4 格式化读/写 12.3.5 读/写函数的选用原则
第12章 文 件
程序运行时,数据一般都存放在内存中。当程序运行结 束后,存放在内存中的数据被释放。
如需长期保存程序运行所需的原始数据,或程序运行产 生的结果,就必须将数据以文件形式存储到外部存储介质上。
12.1 C语言文件概述 12.2 文件的操作步骤 12.3 文件的读写操作 12.4 位置指针与文件定位 12.5 出错检测
p.310
二、打开文件──fopen()函数 以某种使用方式打开文件
p.311
if( (fp=fopen(“文件名”,“使用方式”)) ==NULL)
{ printf("can not open this file\n");
exit(0);
}
正常返回DOS
2020/12/09
7
文件的使用方式: “r” 以只读方式打开已有文本文件 “w” 以只写方式打开新文本文件 “a” 以只写方式打开已有文本文件,追加数据到末尾 “r+”、”w+”、”a+” 以读写方式打开ASCII文件
2020/12/09
1
《计算机基础与C语言程序设计》课件第12章
rb
以只读方式打开一个二进制文件。其余功能与 r 相同。
wb
以只写方式打开一个二进制文件。其余功能与 w 相同。
ab
以追加方式打开一个二进制文件。其余功能与 a 相同。
r+b
以先读后写方式打开一个二进制文件。其余功能与 r+相同。
w+b
以先写后读方式打开一个二进制文件。其余功能与 w+相同。
a+b
以先追加后读方式打开一个二进制文件。其余功能与 a+相同。
ASCII码文件是指组成文件的字节流中,每个字节存储 一个字符的ASCII码。例如,整数10000在ASCII文件中的存 储形式为
00110001 00110000 00110000 00110000 00110000 共占用磁盘5个字节的存储空间。00110001代表数字1 的ASCII编码,00110000代表数字0的ASCII编码。
23
当调用fopen( )函数时,如果打开失败,将返回 NULL(NULL在stdio.h头文件中被定义为0,即#define NULL 0)。
下面的程序段可以在打开一个文件时,通过将返回的 指针赋给文件型指针变量来判断文件是否打开成功。
FILE *fp; fp=fopen("c:\\1.txt","r"); if (fp==NULL){ print("can not open the file!\n"); exit(1); }
FILE *fp; fp被定义为指向FILE类型的指针变量,称为文件型指 针。
17
12.2 文件的打开与关闭
在对文件进行操作前需要打开文件。文件被打开后, 才可以对其进行读/写操作。使用完文件后,必须关闭文件。
C语言第十二章.ppt
int endangle,int radius); void ellipse(int x, int y, int stangle,
int endangle, int xradius,int yradius);
12.1.5 封闭图形的填充
❖填充模式设置 void far setfillstyle(int pattern, int color); void far setfillpattern(char * upattern,int color); void far getfillpattern(char * upattern); void far getfillsetings(struct fillsettingstype far * fillinfo);
void far moverel(int dx, int dy); 移动游标从当前位置(x, y)移动到 (x+dx, y+dy)的位置, 移动过程中不画点。
❖画点函数 void far putpixel(int x, int y, int color); int far getpixel(int x, int y);
void far initgraph(int far *gdriver,
int far *gmode, char *path); 其中,gdriver和gmode分别表示图形驱动器和模式, path是指图形驱动程序所在的目录路径。其值参见 表12-1
void far detectgraph(int *gdriver, *gmode); 自动检测显示器硬件的函数, 用gdriver= DETECT 语句 进行初始化。
返回当前背景颜色值。
int far getcolor(void);
int endangle, int xradius,int yradius);
12.1.5 封闭图形的填充
❖填充模式设置 void far setfillstyle(int pattern, int color); void far setfillpattern(char * upattern,int color); void far getfillpattern(char * upattern); void far getfillsetings(struct fillsettingstype far * fillinfo);
void far moverel(int dx, int dy); 移动游标从当前位置(x, y)移动到 (x+dx, y+dy)的位置, 移动过程中不画点。
❖画点函数 void far putpixel(int x, int y, int color); int far getpixel(int x, int y);
void far initgraph(int far *gdriver,
int far *gmode, char *path); 其中,gdriver和gmode分别表示图形驱动器和模式, path是指图形驱动程序所在的目录路径。其值参见 表12-1
void far detectgraph(int *gdriver, *gmode); 自动检测显示器硬件的函数, 用gdriver= DETECT 语句 进行初始化。
返回当前背景颜色值。
int far getcolor(void);
C语言程序设计 chapter12 文件PPT课件
作为函数返回值传给操作系统。
11
高级语言程序设计
第12章 文件
2. 文件的三种基本使用方式
只读方式:为读(输入)文本文件打开文件。若文件
不存在,返回NULL。
只写方式:为写(输出)文本文件打开文件。若文件
不存在,则建立一个新文件;若文件已存在,
则清空文件。
追加方式:为写(输出)文本文件打开文件。若文件
高级语言程序设计
第12
高级语言程序设计
第12章 文件
存储到内存的各种类型的数据,当程序运 行结束, 这些数据随之消失, 下次再运行还要重 新输入。
用文件可以将输入或输出数据有组织的长 期保存在磁盘中。数据可以做到一次输入,反 复使用,提高输入输出效率。
“文件”是指一组相关数据的集合。每个 文件均有一个名称, 即文件名,可以唯一标识 一个文件。
定义文件指针的一般形式为:
FILE *指针变量标识符;
8
高级语言程序设计
第12章 文件
12. 2 文件的打开与关闭
其中FILE是由系统定义的一个结构体类型,该类
型的结构体中含文件相关信息。
typedef struct
{ sho在rtCle语ve言l; 中,无论对/*磁缓盘冲区文“件满还/是空”设程度*/
} 若ex文it(0件);打开成功,为该文件分配一个文件缓冲 区1. 和检一查个以F只IL读E方类式型打变开量文,件返名回为 一 个 FILE 类 型 指 针;“e:\\soft\\tc\\stu.txt ”的文件是否成功。
2.若e文xi件t函打数开的失作败用,:返结回束程NU序L的L。执行,并将实参0
文件名:需要打开的文件名称(字符串)。
文件使用方式:是具有特定含义的符号。
11
高级语言程序设计
第12章 文件
2. 文件的三种基本使用方式
只读方式:为读(输入)文本文件打开文件。若文件
不存在,返回NULL。
只写方式:为写(输出)文本文件打开文件。若文件
不存在,则建立一个新文件;若文件已存在,
则清空文件。
追加方式:为写(输出)文本文件打开文件。若文件
高级语言程序设计
第12
高级语言程序设计
第12章 文件
存储到内存的各种类型的数据,当程序运 行结束, 这些数据随之消失, 下次再运行还要重 新输入。
用文件可以将输入或输出数据有组织的长 期保存在磁盘中。数据可以做到一次输入,反 复使用,提高输入输出效率。
“文件”是指一组相关数据的集合。每个 文件均有一个名称, 即文件名,可以唯一标识 一个文件。
定义文件指针的一般形式为:
FILE *指针变量标识符;
8
高级语言程序设计
第12章 文件
12. 2 文件的打开与关闭
其中FILE是由系统定义的一个结构体类型,该类
型的结构体中含文件相关信息。
typedef struct
{ sho在rtCle语ve言l; 中,无论对/*磁缓盘冲区文“件满还/是空”设程度*/
} 若ex文it(0件);打开成功,为该文件分配一个文件缓冲 区1. 和检一查个以F只IL读E方类式型打变开量文,件返名回为 一 个 FILE 类 型 指 针;“e:\\soft\\tc\\stu.txt ”的文件是否成功。
2.若e文xi件t函打数开的失作败用,:返结回束程NU序L的L。执行,并将实参0
文件名:需要打开的文件名称(字符串)。
文件使用方式:是具有特定含义的符号。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
fwrite(内存地址,长度,次数,文件指针);
float x;
fread ( &x , sizeof(float), 1, fp);
fwrite( &x , 4 , 1 , fp);
19
若有以下的定义和说明
#include”stdio.h” struct std { char num[6];
char name[8]; float mark[4]; } a[30]; FILE *fp;
文件尾部,此时可以进行追加或读操作。
10
如果是二进制文件,则在方式后加“b”。
如果不能正确完成文件的打开操作,函数fopen将返 回错误信息,即返回空指针值NULL。
if ( (fp=fopen (“file1.C”, “r” ) )= =NULL) { printf(“cannot open this file\n”);
main( )
printf(“%d,%f\n” ,_r_.n_u_m__,_r_.t_o_t_a_l _);
{ FILE *f;
f=fopen( “bin.dat”, “rb”); }
reout(f);
}
fanf 函数 是格式化的读写函数,与printf和scanf相仿,但 其读写对象不是终端而是磁盘文件。 fprintf(文件指针,格式字符串,输出列表); fscanf(文件指针,格式字符串,输入列表);
设文件中以二进制形式存有10个班的学生 数据, 且已正确打开,文件指针定位于文件 开头,若要从文件中读30个学生的数据放入 ss数组中,以下不能实现此功能的语句是
A) for (i=0;i<30;i++) fread(&a[i], sizeof(struct std), 1L, fp);
B) for (i=0;i<30;i++,i++) fread(a+i, sizeof(struct std), 1L, fp);
打开文件file1.c读其内容
if((fp=fopen(“file1.c”, “r”))= =NULL)
{ printf(“cannot open file1.c\n”); exit(0); }
ch=fgetc(fp); 读文件中的一个字符到ch
while(ch!=EOF)
{ putchar(ch);
13
文件的读写
r读 文件
程
序
w写 文件
1、fputc 把一个字符写到文件中 fputc(ch, fp);
ch为要输出的字符(常量或变量)。fp:要写入的文件。
fp=fopen(“FILE1.OUT”, “w”); fputc(‘A’, fp); /* 将字符‘A’写入FILE1.OUT */
14
2、fgetc 从指定文件中向程序中的变量读入一 个字符
由每个文件自己开辟。
5
文件类型指针 每个被使用的文件都在内存中开辟一个区,用来存
放文件的有关信息(文件的名字、文件的状态及当前 位置等)。这些信息保存在一个结构体类型的变量中 的。该结构体类型是由系统定义的,名为FILE。
typedef struct { int -fd; /* 文件号 */
int -cleft ; /* 缓冲区中剩下的字符 */ int -mode; /* 文件操作模式 */ char *-nextc; /* 下一个字符的位置 */ char *-buff; /* 文件缓冲区位置 */
12
2、文件的关闭 fclose
文件使用完毕后,应当关闭。关闭就意味着 释放文件指针以供别的程序使用,同时也释放文 件缓冲区的内存,避免文件中数据的丢失,使指 针与文件脱钩。
fclose (文件指针) fclose (fp)
flose 亦有返回值,正常关闭返回值为0,否则为 非0。关闭是否出错可由ferror函数来检验。
{ int a[10],i,j,t;
if(a[j]>a[j+1])
FILE *fp;
{ t=a[j];
if(fp=fopen(“FILE.OUT”, “w”))= =NULL) a[j]=a[j+1];
{ printf(“cannot open \n”); exit(0); } a[j+1]=t;
for(i=0;i<10;i++)
if((fp=fopen(“file1.out”, “w”))= =NULL)
{ printf(“error\n”); exit(0); }
ch=getchar( ); 从键盘读入一个字符到ch while(ch!=‘#’) 判断输入是否结束 { fputc(ch, fp);
ch=getchar( ); 向文件输出字符
int num; float s[4]; } student[50];
并且结构体数组student中的元素都已有 值,若要将这些元素写到硬盘文件fp中, 以下不正确的形式是:
A) fwrite(student, sizeof(struct st), 50, fp);
B) fwrite(student, 50*sizeof(struct st), 1, fp);
文件
程序
文件
文件有两种形式:
1) ASCII文件(文本文件):每字节代表一个字符。
2) 二进制文件:按内存中数据的存放方式。
3
文本文件: 文 以ASCII表示的文件:记事本,*.cpp等 件
二进制文件:
用二进制形式表示的文件:可执行程序*.EXE等
56:ASCII表示为 00110101 00110110,占两字节
用“r+”, “w+”, “a+”方式打开的文件可以输入输出数据。
用“ r+ ”方式打开的文件应事先存在,以便计算机从中读出数据。
用“w+”方式一样建立一个新文件,向其输入数据,然后可以读 取该文件的数据。若打开一个已存在的文件,一样删除其原有的 内容。
用“a+”方式打开已有的文件,打开文件时,文件的位置指针在
#include “stdio.h”
reout(__F__IL__E__*_f_____)
struct rec { int num;
float total; };
{ struct rec r; while (!feof(f)) { fread(&r, _si_z_e_o_f(_r_e_c_), 1, f );
C) fread(a, sizeof(struct std), 30L, fp);
D) for (i=0;i<30;i++) fread( a[i], sizeof(struct std), 1L, fp);
20
若有以下结构体类型
#include”stdio.h” struct st { char name[8];
C) fwrite(student, 25*sizeof(struct st), 25, fp);
D) for (i=0;i<50;i++) fwrite( student+i, sizeof(struct st), 1, fp);
21
下面程序从一个二进制文件中读入结构体数据,并把 结构体数据显示在终端屏幕上。
} FILE; 6
可以定义文件型指针变量
FILE *fp;
fp是一个指向FILE类型结构体的指针变 量。可以使fp指向某一个文件的结构体变量, 从而通过该结构体变量中的文件信息能够访问 该文件。通过文件指针变量能够找到与它相关 的文件。
如果有n个文件,一般应设n个指针变量,
使它们分别指向n个文件,以实现对文件的访
}
fclose(fp); 关闭文件
}
18
fread函数和fwrite函数 用fread和fwrite可以一次读写一个若干长度的数据块
fread(内存地址,长度,次数,文件指针); int a[10]; fread ( a, sizeof(int), 10, fp); fwrite( a, sizeof(int), 10, fp);
判断文件是否结束
ch=fgetc(fp); } putchar(‘\n’);
ch=getchar( ); while (ch!=‘\n’)
fclose(fp); 关闭文件
{..... }
}
判断键盘输入 是否结束
16
EOF为文本文件的结束标志,-1。
while(!feof(fp)) { ch=fgetc(fp);
如果希望向一个已经存在的文件的尾部添加新数据, 保留原有的数据,用“a”方式打开,但文件必须事先存 在,打开文件时,文件的位置指针在文件尾部。
9
文件的使用方式 “r+” 读写 “w+” 读写 “a+” 读写 “rb+” 读写 “wb+” 读写 “ab+” 读写
含义 为读/写打开一个文本文件 为读/写建立一个新的文本文件 为读/写打开一个文本文件 为读/写打开一个二进制文件 为读/写建立一个新的二进制文件 为读/写打开一个二进制文件
56:二进制表示为 111000,占六个二进制位
不同的文件操作的函数、格式不同
4
C文件是一个字节流或二进制流,对文件的存储是以字 节为单位的。
缓冲文件系统: 系统自动在内存为正在处理的文件开辟缓冲区,对
文件的输入输出操作通过缓冲区进行。
输出文件缓冲区 程序数据区
磁盘
输出文件缓冲区
非缓冲文件系统:系统不为文件开辟缓冲区,缓冲区
第十二章 文件
1
键盘
输入
显示器