C语言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语言版严蔚敏清华大学出版社课件第十二章 .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

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);
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课件

学习结束学生应达到三会—— 会读程序、会编程序、会调程序。
3
03.12.2020
三、教学环境:
采用多媒体教学环境:黑板、投影、程序编 制、演示、调试等。
四、参考教材:
[1]C程序设计,谭浩强,清华大学出版社
[2] The C Programming Language (Second Edition)
,Brian W.Kernighan & Dennis M.Ritchie
[3] C语言大全,王子恢等译 电子工业出版社
五、课程验收:平时、实验、作业、期末
六、教学时数:48/15 4
03.12.2020
第一章 程序设计基础
5
03.12.2020
一、计算机基础知识
1、计算机系统组成 2、计算机基本工作过程 3、DOS基本知识
2.1 C程序的组成结构及特性
一、程序结构
程序一:
main() { printf(“This is a c program. \n”); }
17
03.12.2020
程序二:
# include <stdio.h>
main()
/*求两数之和*/
{int a,b,sum; /*定义变量*/
a=123;b=456;
2006年2月
1
03.12.2020
教师பைடு நூலகம்况及联系方式:
计算机科学与技术学院
计算机语言教研室
王庆北
Add:综合实验楼214房间 E-mail:zyzy@
Tel:
2
03.12.2020
一、教学内容: C语言程序设计的基本语法、基本句
法、基本结构和基本程序设计方法。
3
03.12.2020
三、教学环境:
采用多媒体教学环境:黑板、投影、程序编 制、演示、调试等。
四、参考教材:
[1]C程序设计,谭浩强,清华大学出版社
[2] The C Programming Language (Second Edition)
,Brian W.Kernighan & Dennis M.Ritchie
[3] C语言大全,王子恢等译 电子工业出版社
五、课程验收:平时、实验、作业、期末
六、教学时数:48/15 4
03.12.2020
第一章 程序设计基础
5
03.12.2020
一、计算机基础知识
1、计算机系统组成 2、计算机基本工作过程 3、DOS基本知识
2.1 C程序的组成结构及特性
一、程序结构
程序一:
main() { printf(“This is a c program. \n”); }
17
03.12.2020
程序二:
# include <stdio.h>
main()
/*求两数之和*/
{int a,b,sum; /*定义变量*/
a=123;b=456;
2006年2月
1
03.12.2020
教师பைடு நூலகம்况及联系方式:
计算机科学与技术学院
计算机语言教研室
王庆北
Add:综合实验楼214房间 E-mail:zyzy@
Tel:
2
03.12.2020
一、教学内容: C语言程序设计的基本语法、基本句
法、基本结构和基本程序设计方法。
c++第12章PPT教学课件

12.3.1 建立顺序访问文件
1. 建立文本文件
【12.1】使用操作器、设置标志位和成员 函数向输出文件中输出文本。 #include <fstream.h> #include <stdlib.h> #include <iomanip.h> void main(void) { fstream output;
为了进行文件I/O操作,C++定义了文件流。 文件流是控制台流的扩展,是从控制台流 类派生来的,它继承了控制台流类的所有 特点。文件流类根据自己的需求,增加了 控制台流类所没有的特性。
文件流可分为3类:输入文件流ifstream、 输出文件流ofstream以及输入/输出文件流 fstream。
和其他高级语言一样,对文件的读写之前 应打开该文件,在完成操作之后应及时关 闭该文件。
12.2 文 件 和 流
C++语言把文件看作是一个字符(字节) 的序列,即由一个一个字符(字节)的数 据顺序组成。一个文件是一个字节流或二 进制流。它把数据看作是一连串的字符 (字节),而不考虑记录的界限。
这种以字节流或二进制流组成的文件被称 为流式文件。以字符为单位进文 件 简 介 12.2 文 件 和 流 12.3 顺序文件的访问 12.4 随机文件的访问
12.1 文 件 简 介
C++的文件一般指存储在外部介质上的数 据集合。
这里的外部存储介质一般特指磁盘,磁盘 上的文件称为磁盘文件。对磁盘文件的输 入/输出简称为文件I/O。 每个文件都对应一个文件名,
打开文件进行读操作,文件不存在时出错。 打开文件进行写操作,如文件已存在则更新该文件。 如果文件已存在则清空原文件 打开一个已经存在的文件,如果文件不存在则打开失败。 打开一个不存在的文件,如果文件存在则打开失败。 二进制文件(非文本文件)
1. 建立文本文件
【12.1】使用操作器、设置标志位和成员 函数向输出文件中输出文本。 #include <fstream.h> #include <stdlib.h> #include <iomanip.h> void main(void) { fstream output;
为了进行文件I/O操作,C++定义了文件流。 文件流是控制台流的扩展,是从控制台流 类派生来的,它继承了控制台流类的所有 特点。文件流类根据自己的需求,增加了 控制台流类所没有的特性。
文件流可分为3类:输入文件流ifstream、 输出文件流ofstream以及输入/输出文件流 fstream。
和其他高级语言一样,对文件的读写之前 应打开该文件,在完成操作之后应及时关 闭该文件。
12.2 文 件 和 流
C++语言把文件看作是一个字符(字节) 的序列,即由一个一个字符(字节)的数 据顺序组成。一个文件是一个字节流或二 进制流。它把数据看作是一连串的字符 (字节),而不考虑记录的界限。
这种以字节流或二进制流组成的文件被称 为流式文件。以字符为单位进文 件 简 介 12.2 文 件 和 流 12.3 顺序文件的访问 12.4 随机文件的访问
12.1 文 件 简 介
C++的文件一般指存储在外部介质上的数 据集合。
这里的外部存储介质一般特指磁盘,磁盘 上的文件称为磁盘文件。对磁盘文件的输 入/输出简称为文件I/O。 每个文件都对应一个文件名,
打开文件进行读操作,文件不存在时出错。 打开文件进行写操作,如文件已存在则更新该文件。 如果文件已存在则清空原文件 打开一个已经存在的文件,如果文件不存在则打开失败。 打开一个不存在的文件,如果文件存在则打开失败。 二进制文件(非文本文件)
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程序设计(第三版)第12章位运算精品PPT课件

12.1 位运算符和位运算
C语言提供的位运算符有:
运算符 含义
& 按位与 | 按位或 ∧ 按位异或
运算符
~ 取反 << 左移
>> 右移
含义
ห้องสมุดไป่ตู้
说明:
(1)位运算符中除~以外,均为二目(元)运算符, 即要求两侧各有一个运算量。
(2)运算量只能是整型或字符型的数据,不能为实型 数据。
4
12.1.1“按位与”运算符(&)
异号则结果为1(真)
即:0∧0=0,0∧1=1,1∧0=1, 1∧1=0 例:
∧
即:071∧052=023 (八进制数)
11
∧运算符应用:
(1) 使特定位翻转 设有01111010,想使其低4位翻
转,即1变为0,0变为1。可以将它与0 0001111进行∧运算,即:
运算结果的低4位正好 是原数低4位的翻转。可 见,要使哪几位翻转就将 ∧ 与其进行∧运算的该几位 置为1即可。
第十二章
主要内容
12.1位运算符和位运算 12.2位运算举例 12.3位段
概念
位运算是指按二进制位进行的运算。因为在 系统软件中,常要处理二进制位的问题。 例如:将一个存储单元中的各二进制位左移 或右移一位,两个数按位相加等。 C语言提供位运算的功能,与其他高级语言 (如PASCAL)相比,具有很大的优越性。
20
例: a的值是八进制数113755:
a:11101 (用二进制形式表示) a>>1: 10110 (逻辑右移时) a>>1: 11110 (算术右移时)
应位值均为0。将这两个数
进行&运算:
6
(2) 取一个数中某些指定位。 如有一个整数a(2个字节),想要取其中
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章位运算法则

本章要求 1、位运算及其特殊用途。 2、信息的位段表示。
第 12 章 位运算 1/5
第 12 章 位运算
位运算: 是指对二进制按位进行运算。如:将一个二进制的位左移或右移,两个二进制数相加 等。
12.1 位运算
C 语言提供的位运算符: & 按位与 | 按位或 ∧ 按位异或 ~ 取反 << 左移 >> 右移
b=a<<(16-n);
c=a>>n;
cபைடு நூலகம்c|b;
printf(“%o\n%o”,a,c);
}
12.3 位域(位段)
信息可以用 1 字节、2 字节、4 字节、8 字节表示。 例如,用 1 字节表示一个英文字符,2 字节表示一个汉字字符,4 字节表示一个实数,....等。
第 12 章 位运算 4/5
|=, 例:a|=b 相当于 a=a|b
>>=, 例:a >>=b 相当于 a=a>>b
<<=, 例:a<<=b 相当于 a=a<<b
∧=, 例:a∧=b a = a∧b
12.2 位运算举例
例[12.1] 取一个整数 a 从右端开始的 4~7 位。 比如,
第 12 章 位运算 3/5
0000,0000,1101,1001(16 位二进制) 方法: (1) 先使 a 右移 4 位,使要取出的几位移到最右端。a>>4 (2) 设置一个低 4 位全为 1,其余为 0 的数
二、“按位或”运算符 规则: 参加运算的两个运算量,如果两个对应位中有 1,则 该位结果值为 1,否则为 0。 例如 X=10001001 Y=11101110
第 12 章 位运算 1/5
第 12 章 位运算
位运算: 是指对二进制按位进行运算。如:将一个二进制的位左移或右移,两个二进制数相加 等。
12.1 位运算
C 语言提供的位运算符: & 按位与 | 按位或 ∧ 按位异或 ~ 取反 << 左移 >> 右移
b=a<<(16-n);
c=a>>n;
cபைடு நூலகம்c|b;
printf(“%o\n%o”,a,c);
}
12.3 位域(位段)
信息可以用 1 字节、2 字节、4 字节、8 字节表示。 例如,用 1 字节表示一个英文字符,2 字节表示一个汉字字符,4 字节表示一个实数,....等。
第 12 章 位运算 4/5
|=, 例:a|=b 相当于 a=a|b
>>=, 例:a >>=b 相当于 a=a>>b
<<=, 例:a<<=b 相当于 a=a<<b
∧=, 例:a∧=b a = a∧b
12.2 位运算举例
例[12.1] 取一个整数 a 从右端开始的 4~7 位。 比如,
第 12 章 位运算 3/5
0000,0000,1101,1001(16 位二进制) 方法: (1) 先使 a 右移 4 位,使要取出的几位移到最右端。a>>4 (2) 设置一个低 4 位全为 1,其余为 0 的数
二、“按位或”运算符 规则: 参加运算的两个运算量,如果两个对应位中有 1,则 该位结果值为 1,否则为 0。 例如 X=10001001 Y=11101110
C语言第12章

Turbo C提供了一个自动检测显示器硬件的函数, 其调用格式 为: void far detectgraph(int *gdriver, *gmode); 其中gdriver和gmode的意义见表12.5。
【例12-3】自动进行硬件测试后进行图形初始化。 - #include <graphics.h> main() { int gdriver, gmode; detectgraph(&gdriver, &gmode); /*自动测试硬件*/ printf("the graphics driver is %d, mode is %d\n", gdriver, gmode); /*输出测试结果*/ getch(); initgraph(&gdriver, &gmode, "c:\\tc"); /* 根据测试结果初始化 图形*/ bar3d(10, 10, 130, 250, 20, 1); getch(); closegraph(); return 0; }
但某位为1时 表示相应的键已按,或相应的控制功能已有效, 但某位为 时,表示相应的键已按,或相应的控制功能已有效,如选参数 CMD为2,则有:key=bioskey(2)。 若key 值为 值为0x09,则表示右边的 为 ,则有: 。 ,则表示右边的Shift键 键 被按,同时又按Alt键 被按,同时又按 键。
第12章 C语言图形介绍 12章
Turbo C 提供了非常丰富的图形函数以实现图形程序设 计,所有图形函数的原型均在graphics.h中,本章主要介绍 键盘、鼠标、光标等的控制,主要的图形函数的功能、使 用方法,并用实例加以解释。本章的内容供有志于编写实 用系统的读者参考,在实际编写此类程序时可能还需要查 阅相关手册
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)。
8
二进制流
• 二进制流是一系列字节,并与外部设备上的 字节一一对应
• 写(或读)的字节数与外部设备上的字节数 一样
• 没有任何标记用来指明文件的结束或记录的 结束(结束标记也被看作和其他字符一样的 二进制,不象文本流中的那些标记一样有 “特殊待遇”)
• 文件的结束是由文件大小来决定
9
文件的打开和关闭
回顾
• 上一节课主要讲解了以下内容
– 结构体 – 结构体数组 – typedef关键字 – 冒泡排序法 – 插入排序法
1
目标
• 解释流和文件 • 讨论文本流和二进制流 • 解释各种文件函数 • 解释文件指针 • 讨论当前活动指针
2
文件操作的必要性
• 程序或软件有时需要把处理的数据
– 永久保存 – 方便地移动和交换 – 只在必要时打开和调用
if ((fp=fopen("file1.txt","r"))==NULL)
{
printf("cannot open this file.\n");
exit(0);
}
要在文件打开的
同时让文件指针指
向该文件
16
打开二进制文件
• fopen() 函数打开一个文 件
• fopen() 函数返回与该文 件关联的文件指针
• 在文本流中,可以根据情况需要对某些字符 进行转换
– 写(或读)的字符与外部设备上的字符可能不 是一对一的关系,发生某种转换,导致保存和 实际字符数不同
– 例如:文本流中字符和换行符被按不同方式存 储,文本中的回车实际是换行加一个回车,而 如果用文本流保存回车将只保存换行,读出后 又自动变成换行加回车
• “a”方式打开:只可写,追加方式写入(实际是从 文件结尾处打开),如果要打开的文件存在,则向 文件写入时会在已有文件内容后追加,文件不存在, 则按指定文件名新建一个文件
• “r+”方式打开:可读写
• “w+”方式打开:可读写
• “a+”方式打开:可读写,追加方式写入
15
打开文本文件
fopen在程序中的一般形式
13
功能
打开文件
关闭文件
通过这些C
将字符写入文件中
语言的函数
从文件中读取字符
来实现文件
将数据从文件中读到缓冲区 将数据从缓冲区写入文件
的打开、关
在文件中搜索指定位置
闭、写入、
操作类似于 printf(),但是用于文件 读出等操作
操作类似于 scanf(),但是用于文件
如果到达文件结尾,返回 true
• 操作文件首先要打开,结束后必须关闭 • 通过执行打开操作,文件可以与流进行关联;
通过执行关闭操作,可以断开关联 • 如果一个程序正常终止,所有文件都会自动关
闭 • 一旦程序崩溃,文件会保持打开状态
10
文件操作
• C语言进行文件操作两个必要组成部分: • 文件指针 • 文件函数
11
文件指针
• 文件指针是读写文件必需的 • 用一个文件指针指向一个文件后,今后C语
言对于该文件的操作,全部通过操作该指针 来完成 • 文件指针声明方式为:
FILE *fp
此处必须大写
12
文件指针的名称,可随意
基本的文件函数
函数名 fopen( ) fclose( ) fputc( ) fgetc( ) fread() fwrite() fseek( ) fprintf( ) fscanf( ) feof( ) ferror( ) rewind( ) remove( ) fflush( )
如果出错,返回 true
将文件位置指示器重新置于文件开头
删除文件
将内部缓冲区的数据写入指定文件
打开文本文件
• 操作文件前必须打开 • fopen() 函数打开一个文件 • fopen() 函数返回与该文件
关联的文件指针 • 文件打开失败返回NULL • fopen() 函数的原型为:
fopen(文件名,文件打 开方式)
• 此时必须把这些数据按照文件的形式保存在 磁盘等外部存储器上,而不仅仅是内存
3
文件输入/输出
• C 语言的 I/O 操作使用标准库中的函数来实 现
• 文件输入和输出的数据可以用内部的二进 制表示法传输
• 文件输入和输出的数据也可以按文本格式 传输
4Hale Waihona Puke C语言中的文件• C语言中的文件是广义的文件,不单单指存储在磁 盘上的文件
操作
17
关闭文件
• 无论打开哪种文件,关闭方法相同 • 关闭文件可以释放系统资源,并且能降低超
出允许打开的文件个数的风险 • 关闭流的同时也将清除所有相应的缓冲区 • 结束文件操作后必须关闭文件
– fclose() 函数关闭通过调用 fopen() 而打开的流 – fclose() 函数的原型为:
14
模式
含义
r 打开文本文件进行读操
作
w 创建文本文件进行写操
作
a 向文本文件追加数据
r+ 打开文本文件进行读/写
操作
w+ 创建文本文件进行读/写
操作
a+ 追加或创建文本文件进
行读/写操作
打开文本文件
• “r”方式打开:只可读 ,文件存在,则正常打开, 不存在返回NULL
• “w”方式打开:只可写,无论要打开的文件是否存 在,都会按指定文件名新建一个文件,如果存在则 完全覆盖原来的文件
C语言提供了一种访问各种文件的统一接 口——流 • 通过流,可以让C语言把显示器和磁盘驱动 器等各种文件看成是类似的设备,可以按 相同的方法进行输入输出操作 • 流实际是一种缓冲文件系统
6
流
• 对应不同文件有不同的流 • 所有的流工作方式类似 • 有两种类型的流
– 文本流 – 二进制流
7
文本流
• 文本流是一系列字符,可以由许多行构成, 每行由一个换行符终止
• 所有完成输入输出功能的设备在C语言中全部看作 文件
• C语言中的文件包括:显示器(终端)、磁盘驱动 器、磁带驱动器、打印机等
• printf可以看作向显示器这个文件完成了一个输出 的操作
• 我们平时理解和看到的文件可以看作是向磁盘驱 动器这个文件完成了一些输入输出操作后的结果
5
流
• C语言各种文件的差别非常大 • 为了对各种文件进行统一的输入输出操作,
模式
含义
rb 打开二进制文件进行读操作 wb 创建二进制文件进行写操作
• 文件打开失败返回NULL ab • fopen() 函数的原型为:
fopen(文件名,文件 r+b
向二进制文件追加数据
打开二进制文件进行读/写 操作
打开方式)
w+b 创建二进制文件进行读/写
操作
a+b 追加二进制文件进行读/写
二进制流
• 二进制流是一系列字节,并与外部设备上的 字节一一对应
• 写(或读)的字节数与外部设备上的字节数 一样
• 没有任何标记用来指明文件的结束或记录的 结束(结束标记也被看作和其他字符一样的 二进制,不象文本流中的那些标记一样有 “特殊待遇”)
• 文件的结束是由文件大小来决定
9
文件的打开和关闭
回顾
• 上一节课主要讲解了以下内容
– 结构体 – 结构体数组 – typedef关键字 – 冒泡排序法 – 插入排序法
1
目标
• 解释流和文件 • 讨论文本流和二进制流 • 解释各种文件函数 • 解释文件指针 • 讨论当前活动指针
2
文件操作的必要性
• 程序或软件有时需要把处理的数据
– 永久保存 – 方便地移动和交换 – 只在必要时打开和调用
if ((fp=fopen("file1.txt","r"))==NULL)
{
printf("cannot open this file.\n");
exit(0);
}
要在文件打开的
同时让文件指针指
向该文件
16
打开二进制文件
• fopen() 函数打开一个文 件
• fopen() 函数返回与该文 件关联的文件指针
• 在文本流中,可以根据情况需要对某些字符 进行转换
– 写(或读)的字符与外部设备上的字符可能不 是一对一的关系,发生某种转换,导致保存和 实际字符数不同
– 例如:文本流中字符和换行符被按不同方式存 储,文本中的回车实际是换行加一个回车,而 如果用文本流保存回车将只保存换行,读出后 又自动变成换行加回车
• “a”方式打开:只可写,追加方式写入(实际是从 文件结尾处打开),如果要打开的文件存在,则向 文件写入时会在已有文件内容后追加,文件不存在, 则按指定文件名新建一个文件
• “r+”方式打开:可读写
• “w+”方式打开:可读写
• “a+”方式打开:可读写,追加方式写入
15
打开文本文件
fopen在程序中的一般形式
13
功能
打开文件
关闭文件
通过这些C
将字符写入文件中
语言的函数
从文件中读取字符
来实现文件
将数据从文件中读到缓冲区 将数据从缓冲区写入文件
的打开、关
在文件中搜索指定位置
闭、写入、
操作类似于 printf(),但是用于文件 读出等操作
操作类似于 scanf(),但是用于文件
如果到达文件结尾,返回 true
• 操作文件首先要打开,结束后必须关闭 • 通过执行打开操作,文件可以与流进行关联;
通过执行关闭操作,可以断开关联 • 如果一个程序正常终止,所有文件都会自动关
闭 • 一旦程序崩溃,文件会保持打开状态
10
文件操作
• C语言进行文件操作两个必要组成部分: • 文件指针 • 文件函数
11
文件指针
• 文件指针是读写文件必需的 • 用一个文件指针指向一个文件后,今后C语
言对于该文件的操作,全部通过操作该指针 来完成 • 文件指针声明方式为:
FILE *fp
此处必须大写
12
文件指针的名称,可随意
基本的文件函数
函数名 fopen( ) fclose( ) fputc( ) fgetc( ) fread() fwrite() fseek( ) fprintf( ) fscanf( ) feof( ) ferror( ) rewind( ) remove( ) fflush( )
如果出错,返回 true
将文件位置指示器重新置于文件开头
删除文件
将内部缓冲区的数据写入指定文件
打开文本文件
• 操作文件前必须打开 • fopen() 函数打开一个文件 • fopen() 函数返回与该文件
关联的文件指针 • 文件打开失败返回NULL • fopen() 函数的原型为:
fopen(文件名,文件打 开方式)
• 此时必须把这些数据按照文件的形式保存在 磁盘等外部存储器上,而不仅仅是内存
3
文件输入/输出
• C 语言的 I/O 操作使用标准库中的函数来实 现
• 文件输入和输出的数据可以用内部的二进 制表示法传输
• 文件输入和输出的数据也可以按文本格式 传输
4Hale Waihona Puke C语言中的文件• C语言中的文件是广义的文件,不单单指存储在磁 盘上的文件
操作
17
关闭文件
• 无论打开哪种文件,关闭方法相同 • 关闭文件可以释放系统资源,并且能降低超
出允许打开的文件个数的风险 • 关闭流的同时也将清除所有相应的缓冲区 • 结束文件操作后必须关闭文件
– fclose() 函数关闭通过调用 fopen() 而打开的流 – fclose() 函数的原型为:
14
模式
含义
r 打开文本文件进行读操
作
w 创建文本文件进行写操
作
a 向文本文件追加数据
r+ 打开文本文件进行读/写
操作
w+ 创建文本文件进行读/写
操作
a+ 追加或创建文本文件进
行读/写操作
打开文本文件
• “r”方式打开:只可读 ,文件存在,则正常打开, 不存在返回NULL
• “w”方式打开:只可写,无论要打开的文件是否存 在,都会按指定文件名新建一个文件,如果存在则 完全覆盖原来的文件
C语言提供了一种访问各种文件的统一接 口——流 • 通过流,可以让C语言把显示器和磁盘驱动 器等各种文件看成是类似的设备,可以按 相同的方法进行输入输出操作 • 流实际是一种缓冲文件系统
6
流
• 对应不同文件有不同的流 • 所有的流工作方式类似 • 有两种类型的流
– 文本流 – 二进制流
7
文本流
• 文本流是一系列字符,可以由许多行构成, 每行由一个换行符终止
• 所有完成输入输出功能的设备在C语言中全部看作 文件
• C语言中的文件包括:显示器(终端)、磁盘驱动 器、磁带驱动器、打印机等
• printf可以看作向显示器这个文件完成了一个输出 的操作
• 我们平时理解和看到的文件可以看作是向磁盘驱 动器这个文件完成了一些输入输出操作后的结果
5
流
• C语言各种文件的差别非常大 • 为了对各种文件进行统一的输入输出操作,
模式
含义
rb 打开二进制文件进行读操作 wb 创建二进制文件进行写操作
• 文件打开失败返回NULL ab • fopen() 函数的原型为:
fopen(文件名,文件 r+b
向二进制文件追加数据
打开二进制文件进行读/写 操作
打开方式)
w+b 创建二进制文件进行读/写
操作
a+b 追加二进制文件进行读/写