C语言(第12章)

合集下载

C语言课件第12章 位运算

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;

第12章 关系数据库提供的应用程序接口

第12章 关系数据库提供的应用程序接口
第十二章 关系数据库提供的 应用程序接口
12.1 ODBC 12.2 OLE DB 12.3 ADO
第12章 关系数据库提供的应用程序接口 本章重点介绍了ODBC(Open Database Connectivity, 开放数据库互连)的特点、体系结构、ODBC DSN的创建 过程,以及UDA(Universal Data Access,一致数据访问) 技术的两层标准接口OLE DB和ADO。 OLE DB是系统级的编程接口,它定义了一组COM接口, 这组接口封装各种数据库系统的访问操作,为数据处理方 和数据提供方建立了标准。OLE DB还提供了一组标准的 服务组件,用于提供查询、缓存、数据更新、事务处理等 操作。 ADO是应用层级的编程接口。它利用OLE DB 提供的 COM接口来访问数据,因此它适合于C/S(客户/服务器) 系统和基于Web的应用,尤其在一些脚本语言中进行数据 库访问操作是ADO主要优势。
下面对ADO的各个对象进行讨论。 (1)Connection对象。利用Connection对象可以实现与 数据源建立连接。 (2)Command对象。Command对象代表一个操作命令, 主要是通过调用其各种方法来执行针对数据源的有关 操作。 (3)Recordset对象。Recordset对象代表一个表的记录 集或命令执行的结果,在记录集中,总有一个当前记 录。记录集是ADO管理数据的基本对象,它是一种表 状结构,每一行对应一个记录(Record),每一列对 应一个域(Field)。Recordset对象也可通过游标对记 录进行访问,在ADO中,游标分为四种: ① 静态游标。提供对数据集的一个静态拷贝,允许各 种移动操作,包括前移、后移等等,但其他用户所做 的操作反映不出来。
图12.5 “ODBC 数据源管理器”对话框

第12章 对C语言的进一步讨论

第12章  对C语言的进一步讨论

第十二章对C语言的进一步讨论一、选择题1:Cmain()函数的参数通常是两个,第一个必须是int型,第二个必须是字符串的指针。

2:D程序的含义表明将输入的参数命令行看作字符串,将第2,4个字符串即(abcd h3)的字符个数相加,存放到len中,输出。

3:DInt*f()表示返回值是指针的函数4 :DA,B,C选项正确,D选项中,f是指向函数的指针不能这样调用5:B函数的递归调用分为直接地归调用和间接递归调用两种,其中间接递归调用自己的称为间接递归调用6:C这是函数递归调用:Fun(7)调用后等价于7-fun(5),又去调用fun(5),fun(5)又相当于5-fun(3)这时程序相当于计算7-(5-fun(3)),即7-5+fun(3), 又去调用fun(3),fun(3)又相当于3-fun(1),程序相当于计算7-5+3-fun(1),结果为2。

7:A这是函数递归调用:x的输入值为10,调用fun(10),相当于以下过程:fun(10)=10+fun(9);10+fun(9)=10+9+fun(8)10+9+fun(8)= 10+9+8+fun(7)10+9+8+fun(7)= 10+9+8+7+fun(6)10+9+8+7+fun(6)= 10+9+8+7+6+fun(5)..........10+9+8+7+6+5+4+3+2+fun(1)= 10+9+8+7+6+5+4+3+2+1;结果为558:DA项:预处理命令不一定要放在程序开头,B:一行只能有一条预处理命令。

C 宏名可以小写,但一般用大写进行区别,D正骨俄9:Cf(x)为代参数的宏,f(8)相当于8*8,f(4)相当于4*4,同样f(4+4)相当于4+4*4+4,f(2+2) 相当于2+2*2+2所以结果是4,3.10:AF(X,Y) 为代参数的宏,F(a++,b++)相当于(a++)*(b++),结果为1211:M1+M2相当于(N*3)+(N*2),而N相当于5所以结果为25。

数据结构C语言版严蔚敏清华大学出版社课件第十二章 .ppt

数据结构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语言程序设计》(第2版)苏小红-13章 12

《C语言程序设计》(第2版)苏小红-13章 12
作用
2021/7/31
40/60
struct sample {
short i; char ch; float f; };
union sample {
short i; char ch; float f; };
2021/7/31
共用体
【例12.8】
printf("%d\n", sizeof(struct sample));
Before function call:1999/04/23 After function call:2000/05/22
指针作函数形参 实参必须为地址值
2021/7/31
33/60
struct date
{
int year; int month;
结构体变量
int day; };
作函数返回值
struct date Func(struct date p)
2021/7/31
【例12.3】利用 结构体数组计 算每个学生的 平均分
25/60
结构体指针的定义和初始化
如何定义指向结构体变量的指针?
pt STUDENT stu1; STUDENT *pt; pt = &stu1;
等价于
STUDENT *pt = &stu1;
stu1 成员1 成员2 成员3 成员4
i ch
f
8个字节
printf("%d\n", sizeof(union sample));
0x0037b00
cfih
4个字节 41/60
共用体
sizeof(union number)取决于占空间最多的那个成员 变量
同一内存单元在每一瞬时只能存放其中一种类型的成员 起作用的成员是最后一次存放的成员,不能作为函数参数 不能进行比较操作,只能对第一个成员初始化

第12章 文件操作-按行读写文件

第12章 文件操作-按行读写文件

第12章文件操作——按行读写文件
⏹int puts(const char *s);
将字符串s写入标准输出流stdout,并在其后添加一个换行符
⏹按字符串(行)写文件
int fputs(const char *s, FILE *fp);
将字符串s写入fp所指的文件中
与puts()相同的是:若出现写入错误,则返回EOF,否则返回一个非负数 与puts()不同的是:它不会自动添加换行符,除非字符串本身含有换行符
⏹char*gets(char *s);
从标准输入流stdin读取字符串,读到换行符时停止
⏹按字符串(行)读文件
char*fgets(char *s, int n, FILE *fp);
从fp所指的文件中读取字符串,最多读n-1个字符
当读到回车换行符、文件末尾,或读满n-1个字符时,函数返回该字符串的首地址 用fgets(buf, sizeof(buf), stdin)代替gets(buf)更安全
⏹char*gets(char *s);
⏹char*fgets(char *s, int n, FILE *fp);
讨论
下面左侧的程序中将gets(str)修改为fgets(str,sizeof(str),fp)后,再重新运行右侧的程序,则输出结果将会在输出的Hello world和program is over.之间增加一个空行,这是为什么?请说明其原因。

c第12章 上 机 实 验ppt课件

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语言中顺序结构程序的设计方法,为以后作好准备。

C语言12文件

C语言12文件

©2006-8 North University of China
11
中北大学计算机系基础教研室
格式化I/O:fprintf与fscanf
函数原型: fprintf(文件指针,格式字符串,输出表列) fscanf(文件指针,格式字符串,地址表列) 功能:按格式对文件进行I/O操作 返值:成功,返回I/O的个数;出错或文件尾,返回EOF
C语言程序设计
第12章 文件
中北大学计算机系基础教研室
§12.1 C文件概述
文件:存储在外部介质上数据的集合,是操作系 统数据管理的单位 文件分类 使用数据文件的目的
1、数据文件的改动不引起程序的改动——程序与数据分离 按文件的逻辑结构: 2、不同程序可以访问同一数据文件中的数据——数据共享 记录文件:由具有一定结构的记录组成(定长和不定长) 3、能长期保存程序运行的中间数据或结果数据 流式文件:由一个个字符(字节)数据顺序组成
14
©2006-8 North University of China
中北大学计算机系基础教研室
fseek函数


函数原型:int fseek(FILE *fp,long offset,int whence) 功能:改变文件位置指针的位置 返值:成功,返回0;失败,返回非0值 起始点 位移量(以起始点为基点,移动的字节数) 文件开始 SEEK_SET 0 文件指针 >0 向后移动 文件当前位置 SEEK_CUR 1 <0 向前移动 文件末尾 SEEK_END 2
输入文件缓冲区
程序数据区 a 输出文件缓冲区
©2006-8 North University of China
fclose
7
中北大学计算机系基础教研室
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
广义地说,所有输入输出设备都是文件,例如打印机
文件、卡片文件、磁带文件等。计算机以这些设备为 对象进行输人输出时,对这些设备的处理方法统一按 ‚文件‛处理。
§12.1 文件系统概述

文件可以从不同的角度进行分类: 按文件所依附的介质来分:有卡片文件、纸带 文件、磁带文件、磁盘文件等。 按文件的内容区分:有源程序、目标文件、可 执行程序文件、数据文件等。 按文件中数据的组织形式区分:数据文件可分 为字符代码文件(也称字符文件或文本文件或 正文文件)和二进制文件。
数据区
a
文件输入 缓冲区
磁盘文 件
数据区
a
文件输出 缓冲区
磁盘文 件
缓冲文件系统(标准I/O)和 非缓冲文件系统(系统I/O)
设置输入输出缓冲区目的是:减少对磁盘的实际读
写次数,提高输入输出操作的效率。磁盘访问最小 只能以扇区为单位,且其读写速度远远低于读写内 存的速度。 缓冲文件系统自动为文件设置所需的缓冲区,缓冲 区的大小随机器和操作系统而异。
文件的关闭(fclose函数)

关闭文件用fclose函数:
int fclose(FILE *文件指针变量);


功能: 通知系统,将此指针指向的文件关闭,释放 相应的文件信息区(结构体变量)。 返回值: 调用成功时返回0, 发生错误时返回EOF (EOF 是一个符号常量,在stdio.h中定义为-1)
文件(FILE)类型指针

定义文针变量名;
例如: FILE *fpl,*fp2,*fp3;

上例定义了三个指针变量fpl,fp2,fp3,它们都是指 向FILE类型结构体数据的指针变量,但此时它们还未 具体指向哪一个结构体变量;FILE类型的结构体变量 在执行打开文件的函数时才生成,并由该函数返回其 起始地址,并在执行关闭文件的函数后释放。
FILE *fopen(char *filename, char *mode);
文件使用方式 函数返回值为文件指针, 文件名 指向FILE结构体类型变 量的起始地址
文件的打开(fopen函数)
文件打开方式 方式\格式 只读 只写 追加 读/写 读/写 追加
上加一个‚+”符号。其区别是由 存在的文件末尾补加新的数据。 ‚ r+”时则可对该文件执行读操作, 用‚ a+”方式则可以在追补数 单一的读或写的方式扩展为又能 r rb在读完数据后,可以向该文件写 以上是 ANSI C 的规定。它能够处理字 为输入打开 据后再读人这些数据。 读又能写的方式。 符文件和二进制文件。但有些 C。 语言的 “ w+”则是建立一个新文件, 入数据 ( 更新文件 ) w wb 为输出新建 缓冲文件系统不具备以上全部功能, 可以对它写人数据,然后又 因此在用到有关这些方式时请注意查 可以读人这些数据。 a ab 向文件尾增补 阅所用C语言系统的说明书或上机试一 下即可。 r+ rb+ 为读/写打开(不存在时出错)
文件(FILE)类型指针


FILE类型的结构体变量不用变量名来标识,而要设置 一个指向该结构体变量的指针变量(文件指针),通过它 来访问该结构体变量。 文件指针是缓冲文件系统的一个很重要的概念,只有 通过文件指针才能调用相应的文件。
fp1-> 文件1 的 信息区(结 构体变量) fp2-> 文件2 的 信息区(结 构体变量) fp3-> 文件3 的 信息区(结 构体变量)
缓冲文件系统(标准I/O)和 非缓冲文件系统(系统I/O)


标准I/O提供4种读写文件的方法,C语言中相对应的函 数是: 读写一个字符: 用fgetc和fputc函数; 读写一个字符串: 用fgets和fputs函数; 格式化读写: 用fscanf和fprintf函数; 按‚记录‛读写: 用fread和fwfite函数。 系统I/O(非缓冲系统)不提供前面3种功能的函数,只提 供第4种函数: 按‚记录‛读写:用read和write函数。
输入一个字符串
输出一个字符串 按指定格式输入若干变量的值 按指定格式输出若干数据
文件(FILE)类型指针


要调用一个文件,需要有以下的信息:文件当前的读写位 置;与该文件对应的内存缓冲区的地址;缓冲区中未被处 理的字符数;文件操作方式等。 缓冲文件系统为每一文件开辟一个‚文件信息区‛,用来 FILE的定义在stdio.h头文件 存放以上这些信息。这个‚文件信息区‛在内存中,是一 中,由系统事先指定的。它的 个结构体变量。这个结构体变量是由系统定义的,用户不 定义 (包括结构体中成员名、 请注意, FILE 不是结构体 必自己再去定义。其形式为: 成员个数、成员作用等 )在不 变量名,它是用 typedef typedef struct 同的C版本中不同。 定义的新类型名。 { ...... (结构体成员项,用来存放文件信息) } FILE;
字符文件与二进制文件

字符代码文件是指文件的内容是由一个一个字符组成的, 每一个字符用一个代码表示,一般用ASCII代码。例如一 个实数136.56,共有6个字符,如果按字符代码形式 (ASCII码)输出到磁盘上,一个字符占一个字节,故共占6 个字节。 二进制文件是指以数据在内存中存储形式原样输出到磁盘 上去,例如136.56在内存中以浮点形式存储,占4个字节, 而不是6个字节。若以二进制形式输出此数,就将该4个字 节按原来在内存的存储形式送到磁盘上去。不管一个实数 数值多大,都占4个字节。
文件的关闭(fclose函数)



文件关闭后,保存该文件信息的结构体变量被清 除,原来的指针变量不再指向该文件,此后也就 不可以通过此指针来访问该文件。 如果是执行写操作后用fclose关闭文件,则系统会 先将输出文件缓冲区的内容(不论缓冲区是否已满) 都输出给文件,然后再关闭文件。这样可以防止 丢失本来应写到文件上的数据。 如果不关闭文件而直接使程序停止运行,这时就 会丢失缓冲区中还未写人文件的信息。因此必须 注意:文件用完后必须关闭。
文件的打开(fopen函数)

常用下面的方法打开一个文件: if ( (fp= fopen("file1","r") ) = = NULL) { printf("无法打开该文件\n"); exit (0); } exit是一个函数,其作用是关闭 在main函数中也可用以下方式: 所有文件,使程序结束,并返回 操作系统,同时把括弧中的值传 一般情况下, exit(0)表示正常退 if ( (fp= fopen("file1","r") ) = = NULL) 送给操作系统。 出。如果括弧内为非零值,则表 示程序是出错后退出的。也可以 { printf("无法打开该文件 \n"); 使括弧内空缺,即exit( )。 return; }
第十二章 文 件


到目前为止我们设计的程序只能从键盘输入 数据,将处理结果显示在屏幕上,程序结束 后这些数据都无法存留; 实际应用中,常需要输入大量的数据,处理 的结果也需要存留下来,以便查询; 文件是存储在外部介质上的数据集合,C语言 可以从文件中读取数据处理,也可以将内存 中的处理结果(数据)写到文件中。
文本
用‚ a”方式则可以向一个原已 后面 6种方式是在前 二进制 说明 6种方式基础 用‚r”时只能对该文件读,而用
w+ a+
wb+ ab+
为读/写新建(已存在时出错) 为读/写打开/新建(指向末尾)
文件的打开(fopen函数)


调用fopen函数后,fopen函数有一个返回值。 如果打开文件操作成功,它是一个地址值,指向被打 文件名 开文件的文件信息区(结构体变量)的起始地址。 使用方法 操作 简而言之,在打开一个文件时,程序要通 C程序 系统 如果在执行打开操作时失败 ( 例如用‚r”方式打开一个 知fopen函数三个方面的信息: 不存在的文件 ),则函数返回值是一个NULL指针(即地 ①要打开哪一个文件,以‚文件名‛指出; 址值为0 ,它是一个无效的指向 )。 指向文件的指针 ②对文件的使用方式 (字符串 ); fopen函数的返回值应当立即赋给一个文件类型指针变量 ③函数的返回值赋给哪一个指针变量,或 者说,让哪一个指针变量指向该文件。 (例如前面定义的 fpl,fp2,或fp3等),以便以后能通过该 指针变量来访问此文件,否则此函数返回值就会丢失而导 致程序中无法对此文件进行操作。
缓冲文件系统(标准I/O)和 非缓冲文件系统(系统I/O)
表12.1 标准I/O函数与终端I/O函数对照 标准I/O函数 fgetc fputc 终端I/O函数 getchar putchar 输入一个字符 输出一个字符 作用
fgets
fputs fscanf fprintf
gets
puts scanf printf

非缓冲(低层)文件系统:
非缓冲系统直接依赖于操作系统,通过操作系统的
功能直接对文件进行操作。所以它称为‚系统输入 输出‛或‚低层输入输出‛系统。 非缓冲区文件系统不自动设置缓冲区,而要由用户 自己根据需要设置。
缓冲文件系统(标准I/O)和 非缓冲文件系统(系统I/O)


这两种文件系统分别使用不同的输入输出函数。其各 自的特点如下: 缓冲文件系统:由系统代替用户做了许多事情,功 能强、使用方便。 非缓冲文件系统:通过操作系统的功能直接对文件 进行操作,依赖于操作系统,编程序时需要人们熟 悉操作系统,编程难度大一些,但它的执行效率高, 节省内存。 为方便起见,一般把缓冲文件系统输入输出称为标准 输入输出(标准I/O),非缓冲文件系统的输入输出称为 系统级输入输出(系统I/O)。
§12.2 文件的打开与关闭
相关文档
最新文档