C语言实例教程 第2版 普通高等教育“十一五”国级级规划教材 教学课件 ppt 作者 赵克林 第7章 指针与文件

上传人:E**** 文档编号:89347888 上传时间:2019-05-23 格式:PPT 页数:53 大小:667KB
返回 下载 相关 举报
C语言实例教程 第2版  普通高等教育“十一五”国级级规划教材  教学课件 ppt 作者  赵克林 第7章 指针与文件_第1页
第1页 / 共53页
C语言实例教程 第2版  普通高等教育“十一五”国级级规划教材  教学课件 ppt 作者  赵克林 第7章 指针与文件_第2页
第2页 / 共53页
C语言实例教程 第2版  普通高等教育“十一五”国级级规划教材  教学课件 ppt 作者  赵克林 第7章 指针与文件_第3页
第3页 / 共53页
C语言实例教程 第2版  普通高等教育“十一五”国级级规划教材  教学课件 ppt 作者  赵克林 第7章 指针与文件_第4页
第4页 / 共53页
C语言实例教程 第2版  普通高等教育“十一五”国级级规划教材  教学课件 ppt 作者  赵克林 第7章 指针与文件_第5页
第5页 / 共53页
点击查看更多>>
资源描述

《C语言实例教程 第2版 普通高等教育“十一五”国级级规划教材 教学课件 ppt 作者 赵克林 第7章 指针与文件》由会员分享,可在线阅读,更多相关《C语言实例教程 第2版 普通高等教育“十一五”国级级规划教材 教学课件 ppt 作者 赵克林 第7章 指针与文件(53页珍藏版)》请在金锄头文库上搜索。

1、第七章 指针与文件,【主要内容】,指针的意义、指针与数组的关系。 文件的种类、文件的各种操作方法。,【学习重点】,用指针处理数组,特别是字符型数组。文件读写的8个函数。,第四节 文件的读写,第一节 指针及其定义,第二节 指针与数组,第三节 C文件概述,第七章 指针与文件,第一节 指针及其定义,一、指针的意义,指针就是地址。指针变量是一种专门存放其它变量在内存中的地址的特殊变量,它的值是变量的地址(而非变量的值!)。内存空间被划分成若干个大小相同(1个字节)的存储单元,并为每一个存储单元安排一个编号,这个编号被称为内存地址。,第一节 指针及其定义,二、指针的定义与运算,指针既然称为变量,当然应遵

2、守变量的有关规则,如先定义后赋值再使用等。其定义格式是:,类型 *指针变量名;,2. 深入理解两个运算符:* 与 &,1. 指针变量的定义,C语言提供了专门的地址运算符&,以取变量的地址,其优先级与负号同,高于算术运算符。其格式为:,&变量名,第一节 指针及其定义,提示:,指针变量的类型是它指向的内存单元中存放 的数据的类型,而不是指针变量的值的类型。,【例7-1】 键盘输入园的半径,求它的面积。本例说明了通过指针变量访问实型变量的一般方法。,参考源代码: /* 例7-1,7-1.c */ void main() float r, s, *pr, *ps; /* 定义pr、ps两个指针变量 *

3、/ pr = /* 输出ps指向内存单元的值 */ ,第一节 指针及其定义,【融会贯通】 从键盘上输入任意矩形的长、宽,求它的周长和面积。,第一节 指针及其定义,想一想,该怎样编写这个程序呢?,3.指针的运算,第一节 指针及其定义,指针变量可以进行的运算主要有算术运算、增量运算、关系运算等。设有下行定义,,int *p, *p1, *p2, a, n, v;,p+,p-,+p,-p 结果是指向下一个(或上一个)数据的地址,而不是指向下一个(或上一个)地址单元。,p + n:表示 p + n * sizeof( 指针类型 ),即从p算起,后边第n个数的地址。,p - n:表示 p - n * s

4、izeof( 指针类型 ),即从p算起,前边第n个数的地址。,第一节 指针及其定义,v = *p+:等价 v = *(p+),先取p单元值赋给变量v,然后p自增1。 v = *+p:等价 v = *(+p),p先自增指向下一数据单元,再取该单元值赋给变量v。 v = (*p)+:将(*p)值先赋给v,然后(*p)的内容再增1。 v = +(*p):将(*p)内容增1后赋给v。 p1 - p2:两指针地址值之差 sizeof(指针类型),结果表示两个地址之间能够存放某种类型数据的个数,当然数据类型与指针的类型须一致。,当 * 与+、-结合时应注意其优先顺序和结合性:三个运算符优先级相同,但结合顺

5、序是从右向左,为避免歧义,书写时请加括号以区别。,例如:,【例7-2】 分析下列语句是否正确。,第一节 指针及其定义, int i; char *p = /* 错误!不能将一个常量直接赋给指针变量 */,课堂练习7.1 要求用指针处理:求一元二次方程ax2+bx+c=0的实根。,第一节 指针及其定义,想一想,该怎样编写这个程序呢?,第二节 指针与数组,一、指针与一维数组,1. 指针与数值型一维数组,int x = 1, 2, 3, 4, 5, 6, 7, 8, 10 , *p = x;,数组元素xi的等价表示是:pi、*(p+i)、*(x+i)。,如果要把xi元素的地址赋给p,可以这样写:p=

6、x+i或 p=&xi。,提示:,当用指针引用数组时,人们习惯将数组名赋给指针变量,如下行定义:,【例7-3】 输出某一维数组中各元素的内存地址及其值。,第二节 指针与数组,【简要分析】 输出一维数组常采用两种方法:指针法和下标法。这两种方法既可以通过数组名实现,也可以通过指针实现,共有四种等价引用形式。,参考源代码: /* 例7-3,7-3.c */ void main() int a = 11, 12, 13, 14, 15 , *p, i; p = a; for ( i = 0; i 5; i+ ) printf(“n %0x单元:%d, %d, %d, %d“, p+i, ai, *(a

7、+i), pi, *(p+i) ); ,第二节 指针与数组,printf( )函数中p+i表示元素地址,它对不同的运行环境可能不同。设p指向内存2000H单元,则该数组在内存中存放形式如图7-2所示。,数组元素在内存中存放示意图:,第二节 指针与数组,【思考验证】 下边的代码行能逆向输出数组各元素吗?,第二节 指针与数组,void main() int a = 11, 12, 13, 14, 15 , *p, i; p = a + 4; /* 欲指向a数组最后一个元素 */ for ( i = 4; i = 0; i- ) printf(“n %0x单元:%d, %d, %d, %d“, p-

8、, ai, *(a+i), pi, *(p+i) ); 因a数组的元素个数可以这样计算:sizeof(a) / sizeof(int),本例可演变如下: void main() int a = 11, 12, 13, 14, 15 , *p, i, n; n = sizeof(a) / sizeof(int); p = a + n - 1; /* 欲指向a数组最后一个元素 */ for ( i = n - 1; i = 0; i- ) printf(“n %0x单元:%d, %d, %d, %d“, p-, ai, *(a+i), pi, *(p+i) ); ,第二节 指针与数组,【融会贯通】

9、试用指针的方法,随机产生N个1000以内的自然数,放于一维数组中,并输出。,?,第二节 指针与数组,2.指针与字符型一维数组,从第6章知,C语言是将字符串作为数组对待的,与数值型数组一样,我们也可用字符型的指针变量指向字符串, 然后通过指针变量来访问字符串存贮区域。,设有如下语句:,char *cp; cp = “love”;,则cp指向字符串”love”常量的首字符l。,程序中可通过cp来访问这一存贮区域,第i个字符可表示成cpi或*(cp+i)。如:*(cp+2)或cp2,都是字符v。,【例7-4】 输入任意一行字符,降序排列之。,第二节 指针与数组,参考源代码:,【思考验证】 试用指针的

10、下标表示法改写本例。,【融会贯通】 用指针方法判断从键盘上输入的一行字符是否是对称的。对称字符串如“abcdcba”。,二维数组是由若干行一维数组组成的。怎样用指针表示二维数组每一行的起始地址是正确用指针处理二维数组的关键所在。,第二节 指针与数组,以如下定义为例,分析用指针访问二维数组的方法。,二、指针与二维数组,int a23 = 1,2,3,4,5,6 , *p = a;,下面一段代码输出二维数组aNM:,第二节 指针与数组,int aNM, i, *p; printf(“n”); for ( i = 0; i N; i+ ) for ( p = ai; p ai + M; p+) pr

11、intf(“%dt“, *p); printf(“n”); ,二维数组元素aij、*(ai+j)、(*(a+i)j表示形式是等价的!,提示:,第二节 指针与数组,【例7-5】 对N行字符按如下规则加密:如果是英文字母则大写变小写、小写变大写,并且ac、bd、xz、ya、zb;对非英文字符则保持不变。试写加密程序。,【简要分析】 本例牵涉到多个条件的判断,如果组织不好,会增加多条语句。对每行字符,先令指针变量p指向行首,然后利用p的变化处理完该行所有字符。i作循环控制变量,控制N行字符。,用自然语言描述的程序逻辑如下:,第二节 指针与数组,【例7-5】 参考源代码,第二节 指针与数组,【融会贯通

12、】 能写一个解密程序将按该算法加密后的密文原还成原来的明文吗?,第二节 指针与数组,课堂练习7.2,1.用指针实现:有NM个士兵排成N行M列,找出这样的士兵(指出他的位置),他的年龄在他站的那一行或那一列均是最小的。(原始数据,键盘输入),第三节 C文件概述,所谓“文件”,是指一组相关数据的有序集合。这个集合有一个名称,叫做文件名。,一、文件分类,1从用户的角度分 从用户的角度文件可分为普通文件和设备文件两种。普通文件是指驻留在磁盘或其它外部介质上的一个有序数据集。设备文件是指与主机相联的各种外部设备,如显示器、打印机、键盘等。,第三节 C文件概述,2从文件的功能分 从文件的功能文件可分为程序

13、文件和数据文件,前者又可分为源程序文件、目标文件和可执行文件。,3从数据的组织形式分 从数据的组织形式文件可分为顺序存取文件和随机存取文件。,4从文件的存储形式分 从文件的存储形式文件可分为 ASCII 码文件和二进制文件。,第三节 C文件概述,C语言对文件的操作一般分为4步:, 定义文件指针;, 以某种方式打开文件;, 对文件进行读写操作;, 关闭文件。,第三节 C文件概述,C语言对文件的操作是通过文件指针和一系列文件操作函 数完成的。文件指针是一类特殊的指针,其类型是FILE,其定义包含在stdio.h头文件中。文件指针用于存取文件的内容。找开文件用fopen( )函数。,FILE *fp

14、; 文件指针名 = fopen(文件名, “使用文件方式”);,例如: FILE *fp; fp = fopen(“file1.txt“, “r“);,二、文件的定义与打开,文件指针的定义、打开文件的一般格式是:,其意义是以只读的方式打开当前目录下的file1.txt文件,并使fp指向该文件。,文件操作方式 :,第三节 C文件概述,第三节 C文件概述,几点说明:, 文件使用方式由r、w、a、b、+五个字符组成,各字符的含义是:, 凡用“r”方式打开的文件,该文件必须已经存在,且只能从该文件读出数据。, 凡用“w”方式打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名新建该文件,若

15、打开的文件已经存在,则覆盖该文件。, 若要向一个已存在的文件追加新的信息,只能用“a”方式打开文件。但此时该文件必须是存在的,否则将会出错。,第三节 C文件概述, 在打开一个文件时,如果出错,open()函数将返回一个空指针值NULL。在程序中可以用这一信息来判别是否完成打开文件的工作,并作相应的处理。NULL是个符号常量,已在stdio.h中被定义成0。,因此常用以下程序段打开文件: fp = fopen(“c:hzk16“, “rb“); if ( fp = NULL ) printf(“nError on open c:hzk16 file!“); getch(); exit(1); ,

16、第三节 C文件概述, 将文件中所有字符逐一读入内存,常用如下while循环实现: while ( !feof(fp) ) ch = fgetc(fp); , 对文件读写一个字符,文件指针自动增1,勿需再使用单独的fp+语句。,文件一旦使用完毕,须关闭文件。关闭文件作用之一是将缓冲区中的数据存盘,这样数据才不丢失。,fclose函数调用的一般形式是:,第三节 C文件概述,二、文件的关闭,fclose(文件指针);,正常完成关闭文件操作时,fclose函数返回值为0。如返回非零值则表示有错误发生。一个关闭语句只能关闭一个文件。,第四节 文件的读写,读文件是指将文件从磁盘读入内存,写文件是指将内存中的数据保存到磁盘。读文件

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号