C语言第7章_文件及应用ppt课件

合集下载

大学课件C语言数组

大学课件C语言数组
第3趟排序后成为:37, 48, 12, 26, 49, 64, 75, 97 第4趟排序后成为:37, 12, 26, 48, 49, 64, 75, 97 第5趟排序后成为:12, 26, 37, 4 8, 49, 64, 75, 97
第6趟排序后成为:12, 26, 37, 4 8, 49, 64, 75, 97
printf("ENTER 10 REAL NUMBERS\n"); for(i=0;i<10;i++) { scanf("%f",&value); x[i]=value; } total=0.0; for(i=0;i<10;i++) total=total+x[i]*x[i];
/*.....PRINTING OF x[i] VALUES AND TOTAL......*/
number[0] number[1] number[2] number[3] number[4]
C语言中,数组元素的序号(下标)从0开始。
对数组的引用超过了所声明的范围,会导致不可预知的结果.
9
数组的作用
数组元素的作用相当于简单变量 数组名代表的是数组在内存中的首地址 同一个数组中的元素在内存中是按顺 序连续存放的
/*.....PRINTING OF x[i] VALUES AND TOTAL......*/
printf("ENTER 10 REAL NUMBERS\n"); for(i=0;i<10;i++) { scanf("%f", &x[i]); total=total+x[i]*x[i]; } printf("\n"); for(i=0;i<10;i++) printf("x[%2d]=%5.2f\n", i, x[i]); printf("\ntotal=%.2f\n", total);

C语言完整 ppt课件

C语言完整 ppt课件
1.4.1 宏定义
用一个标识符来表示一个字符串,称为“宏”,标识符称为“宏名”。在 程序中 用宏名替代字符串称为“宏调用”。在编译预处理时,将对程序中所有出现的 “宏 名”,都用宏定义中的字符串代换,这个过程称为“宏展开”。
1.4.1.1 不带参数的宏定义
格式为:#define 标识符 字符串
1.4.1.2 带参数的宏定义
1-4
1.3 C程序上机步骤
C源程序编好后,要经过编辑、编译、连接, 生成可执行文件后,才可运行。
运行集成开发软件
编辑源程序
编译
有 有错? 无 连接
不正确
运行
结果正确? 正确
结束
1-5
1.4 编译预处理
编译预处理是指,在C编译程序对C源程序进行编译之前,由编译预处理程 序对源程序中的预处理命令进行处理的过程。
1.2.1 C语言程序举例
1.2.2 C语言程序的结构
1.2.2.1 函数是C语言程序的基本单位。
1.2.2.2 函数的一般结构
任何函数(包括main()函数)都是由函数首部和函数体两部分组成。
1. 函数首部: 函数首部即函数第一行,由函数类型、函数名和函数参数表三部分组成。
2. 函数体: 函数体为函数首部下面的花括号{……}内的部分。 函数体一般由声明部分和执行部分构成:声明部分定义所用到的变量,声明所调用的函数等; 执行部分有若干语句组成。
2.6.1 运算符及表达式简介 2.6.1.1 运算符
C语言中的运算符具有2个特点: ⑴ 运算符的优先级 C语言中,运算符的优先级共分为15级,1级最高,15级最低。 ⑵ 运算符的结合性 C语言中各运算符的结合性分为左结合性(从左到右)和右结合性(从右到左)。 2.6.1.2 表达式 表达式是由常量、变量、函数和运算符组成的式子。 表达式求值是按运算符的优先级和结合性规定的顺序进行的。

实用C语言程序的设计教程第7章2

实用C语言程序的设计教程第7章2
就好像指针变量一样,有些是指向整型数据的指针变 量,有些是指向实型数据的指针变量,后面还会见指向结构 体类型数据的指针变量。对于结构体类型变量也类似,
有些是struct student的结构体变量,有些是struct date 的结构体变量,有些是其它结构体类型的结构体变量。如 果说指针变量要看它指向何种类型的指针,那么结构体变 量要看它到底是那种具体的结构体类型的变量。结构体是 构造类型,不像基本类型那样,在任何时候其含义是一致 的,而用户可以构造多个结构体类型,甚至对同一结构体 标记在不同的程序中,其含义可以不同(指成员不完全相 同)。这一点一定要引起足够的重视。
char tel[1(2如];int、char、float、double等)一样具
};
有同样的地位和作分用号,不都可可少以用来定义变
量的类型。
定义一个结构体类型的一般形式为: struct 结构体名
{ 成员表列 }; 说明: (1)“结构体名”用作结构体类型的标志,它又 称“结构体标记”(structure tag)。类型与变量 是不同的概念,不要混同。只能对变量赋值、存取 或运算,而不能对一个类型赋值、存取或运算。在 编译
定义了2个结构体类型的变量stud3,stud4。
定义了结构体型变量之后,结构体类型名的任务就完成 了,在后续的程序中除求类型的长度和强制类型转换外,不 再对其操作,而只对这些变量(如studl,stud2, date_2,dd等)进行赋值、存取或运算等操作。在编译时, 对类型不分配空间,只对变量分配空间。结构体型变量所占 内存空间是各成员变量所占内存单元的总和,各成员间占用 的存贮单元是连续的。
如: struct date { int year; int month; int day; } date_2,dd;

c语言程序设计第7章(谭浩强)PPT版本

c语言程序设计第7章(谭浩强)PPT版本

如 int a[5]; static int a[5]={6,2,3}; int a[]={1,2,3,4,5,6}; 等价于: a[0]=6; a[1]=2;a[2]=3; a[3]=0; a[4]=0; 等价于:a[0]=0; a[1]=0; a[2]=0; a[3]=0; a[4]=0; 如 编译系统根据初值个数确定数组维数 int a[3]={6,2,3,5,1}; ()

38 49 49 38 65 76 97 13 97 76 97 27 13 30 97 27 97 30 初 始 关 键 字 n=8
38 49 65 13 76 27 76 13 30 76 27 76 30 97 第 一 趟
38 49 13 65 27 65 13 30 65 27 65 30
程序举例
#include <stdio.h> #define SIZE 10 例 读10个整数存入数组,找出其中最大值和最小值 main() { int x[SIZE],i,max,min; printf("Enter 10 integers:\n"); for(i=0;i<SIZE;i++) 步骤: { printf("%d:",i+1); 1. 输入:for循环输入10个整数 scanf("%d",&x[i]); 2. 处理: } (a) 先令max=min=x[0] max=min=x[0]; (b) 依次用x[i]和max,min比较(循环) for(i=1;i<SIZE;i++) 若max<x[i],令max=x[i]{ if(max<x[i]) max=x[i]; 若min>x[i],令min=x[i] if(min>x[i]) min=x[i]; 3. 输出:max和min } printf("Maximum value is %d\n",max); printf("Minimum value is %d\n",min); }

C语言程序设计 重庆大学课件 第07章 字符串及其应用

C语言程序设计 重庆大学课件 第07章 字符串及其应用

7.1.1 字符串表示方法
a b c d \0
a b c d \0 sPtr a) 指针变量指向字符串常量 a b c d \0 1 2 3 4 \0
sPtr
b) 指针变量改变原指向指向另一字符串
图7.1 指针变量与字符串数据对象的关系示ห้องสมุดไป่ตู้图
7.1.1 字符串表示方法

字符数组的初始化 使用单个字符常量 字符数组与字符指针的区别

标准字符串连接函数strcat
函数原型:
char *strcat(char *strDestination, char*strSource);
函数调用:strcat(str1,str2);
功能:将字符串str2连接到字符串str1的后面生成新 的字符串str1,函数返回字符串str1。字符数组长度应 足够大(大于strlen(str1)+strlen(str2))。
7.2.2 字符串的复制
t t s1 指针方式实现字符串拷贝 char *strcopy(char *s,char *t) a 保存s的首地址到p { char *p=s; while((*s++=*t++)!='\0') ; *t的’\0‟先赋给*s a return p; 再判断是否等于’\0‟ } s2 t
字符串及其应用

C语言的字符串表示方法 字符串的常用处理方法及标准库函数
字符串的常用处理方法及标准库函数



字符串中有效字符的统计 字符串的复制 字符串的连接 字符串中字符的查找 字符串中字符的插入和删除 字符串的比较和子串的查找 字符串中子串的插入和删除 字符串与二维字符数组

数据结构(C语言版)_第7章 图及其应用

数据结构(C语言版)_第7章 图及其应用
(1)创建有向图邻接表 (2)创建无向图的邻接表
实现代码详见教材P208
7.4 图的遍历
图的遍历是对具有图状结构的数据线性化的过程。从图中任 一顶点出发,访问输出图中各个顶点,并且使每个顶点仅被访 问一次,这样得到顶点的一个线性序列,这一过程叫做图的遍 历。
图的遍历是个很重要的算法,图的连通性和拓扑排序等算法 都是以图的遍历算法为基础的。
V1
V1
V2
V3
V2
V3
V4
V4
V5
图9.1(a)

图7-2 图的逻辑结构示意图
7.2.2 图的相关术语
1.有向图与无向图 2.完全图 (1)有向完全图 (2)无向完全图 3.顶点的度 4.路径、路径长度、回路、简单路径 5.子图 6.连通、连通图、连通分量 7.边的权和网 8.生成树
2. while(U≠V) { (u,v)=min(wuv;u∈U,v∈V-U); U=U+{v}; T=T+{(u,v)}; }
3.结束
7.5.1 普里姆(prim)算法
【例7-10】采用Prim方法从顶点v1出发构造图7-11中网所对 应的最小生成树。
构造过程如图7-12所示。
16
V1
V1
V2
7.4.2 广度优先遍历
【例7-9】对于图7-10所示的有向图G4,写出从顶点A出发 进行广度优先遍历的过程。
访问过程如下:首先访问起始顶点A,再访问与A相邻的未被 访问过的顶点E、F,再依次访问与E、F相邻未被访问过的顶 点D、C,最后访问与D相邻的未被访问过的顶点B。由此得到 的搜索序列AEFDCB。此时所有顶点均已访问过, 遍历过程结束。
【例7-1】有向图G1的逻辑结构为:G1=(V1,E1) V1={v1,v2,v3,v4},E1={<v1,v2>,<v2,v3>,<v2,v4>,<v3,v4>,<v4,v1>,<v4,v3>}

C语言程序设计_课件_第七章(适于清华谭浩强版)

C语言程序设计_课件_第七章(适于清华谭浩强版)

注意:
(1) return(表达式); 和return 表达式;都 是正确的。 (2) 带返回值的函数只能返回一个值。 (3) 在函数定义时,允许使用多个return语句, 但是应尽量在末尾使用一个return语句。 (4) return语句中的表达式与函数的返回值类 型不匹配时,以函数定义时的返回类型为准。

问题的提出 函数基础 函数的定义 函数说明 函数调用 参数传递 程序举例 递归调用 变量的存储类别
7.1 问题的提出
例6.20它可以解决的问题有: ①输入若干个学生的姓名、某课程的期中 和期末成绩,并计算每个学生的总评成绩; ②计算总评成绩的分数段情况; ③输出所有学生的姓名、期中、期末和总 评成绩; ④查询某个学生的总评成绩。
函数调用时需要传递数据。调用函数要将 实参的值传送给被调用函数的形参。 若函数定义首部是 double power(double x,int n) /*函数定义 */ 调 用 形 式 是 可 以 是 power(y,m) , 也 可 以 是 power(3.0,5)。 其中,x和n是形式参数,y和m是实际参数,3.0 和可以是一个变量 名,因为变量名也构成一个表达式,形式参数只 能是变量名。当实际参数是变量名时,它与形参 的名称既可以相同,也可以不同,只是要注意, 在函数定义内部应该使用形参的名称。 (2) 实际参数与形式参数的参数个数、数据类型 和顺序都应该一致,如果数据类型不一致,系统 将按照自动转换规则进行转换。
7.3 函数的定义
7.3.1 函数的定义形式 在C语言中函数定义的形式有两种。
第一种:
函数返回值的数据类型说明 函数名称(带有类型说明的参数表)
{
函数内部数据说明; 语句;
}
第二种:

C语言程序设计基础 第7章

C语言程序设计基础 第7章

模块化程序设计的基本要点是贯彻“自顶向下,逐步细 化”的思想方法,即将一个复杂功能的编程问题,划分成若 干个功能相对简单的子问题。这种划分可以逐层进行,直到 便于编程为止。在C语言中,一个模块的功能由一个函数来 实现。顶层函数是主函数main( )。功能模块与C语言函数的 关系如图7.1所示。
图7.1 模块与函数
第7章 函数——模块化程序设计方法的实现
7.1 模块化程序设计方法与函数 7.2 函数的定义 7.3 函数的调用 7.4 函数调用的条件与函数声明 7.5 函数的嵌套调用和递归调用 7.6 变量的作用域与函数间的数据传递 7.7 用函数实现模块化程序设计 实训任务十三 熟悉函数的功能及其使用方法 实训任务十四 学习模块化程序设计的方法
② 函数功能实现部分,是一个程序段,要依据实现某 种功能的算法进行设计。
③ 函数体最后使用一个“return(返回值);”语句,括 号中的返回值是一个需传带给主调函数的数据对象。如果没 有返回值,可以不要这个语句。VC++ 6.0系统中提倡在 main( )函数体后使用一个“return 0;”语句,表示正常返 回系统,否则会出现警告。如果函数体仅是一对花括号,没 有任何语句,就是空函数。空函数一般是无参函数。
7.2 函 数 的 定 义
怎样定义函数?定义函数要考虑哪些问题?
定义函数要解决两个方面的问题:一是函数间的接口问 题,二是功能实现问题。接口问题包括如何被上层函数调用 ,调用时需传递什么数据,调用返回时需传带什么数据。功 能实现问题就是如何实现模块的过程算法。
函数定义的一般形式为
基类型符 函数名(类型符形式参数 1,类型符形式参数 2,…) {
函数体内数据对象定义或声明部分; 函数功能实现部分; return(返 回值); }

C使用教程教程第七章PPT课件

C使用教程教程第七章PPT课件

含义 创建目录和子目录 删除目录及其内容 移动文件和目录内容
示例 DirectoryInfodi=Directory. CreateDirectory(''c:\\mydir''); Directory.Delete(''c:\\mydir''); Directory.Move=(''c:\\mydir'', ''c:\\mynewdir'');
1.1 C#的优势
(path, path2); Console.WriteLine("{0} was copied to {1}.", path, path2); // 删除新创建的文件 (path2); Console.WriteLine("{0} was successfully deleted.", path2); } catch (Exception e) { Console.WriteLine("The process failed: {0}", e.ToString()); } } } 程序运行结果如下:
7.2.2 Directory类和DirectoryInfo类
1.Directory类 目录使用 Directory类,可以用目录类创建、移动目录,并可列 举目录及子目录的内容。Directory类全部是静态方法。
Directory类常用方法见表7.2。
表7.2 Directory类的常用方法
方法 CreateDirectory Delete … Move
打开指定文件并返回一个 StreamWriter对象。以后可使 用这个对象向指定文件中添加 文本文件内容

C语言程序设计第07章 指针

C语言程序设计第07章 指针

8
10/7/2013
内存地址
内存单元
1000 1001 1002 1003 1004
1004
12
图 一个变量指向另一个变量
9
10/7/2013
1、两个概念:变量指针与指针变量
变量指针:一个变量的地址 指针变量:专门存放变量地址的变量
指针 变量的地址
…...
2000
2001 2002 2003 2004 2005
k的 地址 2005
2004
…...
5
8.7
…...
…...
i
k
float k;
编译或函数调用时为变量分配内存单元 变量是对程序中数据 存储空间的抽象
4
程序中:i = 5; k = 8.7;
…...
10/7/2013
7.1.1 指针的概念
理解变量的地址和变量的值
变量名
00000000H 00000001H
C语言程序设计教学课件
第7章
指针
7.0 目标 理解指针的概念 定义指针变量 掌握对指针的操作 理解指针和数组的楼
存储地址
内存
0
…...
存储 单元
601
501
602 502
2000 2001
50
2002 注意:内存单元的地址与内存单元中的数据是 401 402 两个完全不同的概念。 2003 存储单元有
存放变量的内存 单 元 ,int 型 为 两 个 字节。
6
a
变量的值(a=6)
int a; a = 6;
变量的 地址
变量存储在内存某个单元中; 不同类型变量所占内存空间大小不一定相同; 不同编译环境,同一类型变量占用空间大小可能不同

计算机二级c语言课件 第7章

计算机二级c语言课件 第7章
第7章 函数与预处理命令
7.1 概述 7.2 函数的定义与调用 7.3 数组作函数参数 7.4 函数的嵌套调用和递归调用 7.5 局部变量和全局变量及其作用域 7.6 变量的存储类别及变量的生存期 7.7 函数的存储分类 7.8 编译预处理 7.9 多文件程序的调试方法
7.1 概述
C程序
源程序文件1
case '*':printf("%5.2f%c%5.2f=%6.2f\n",x,opr,y,x*y);return;
case '/':printf("%5.2f%c%5.2f=%6.2f\n",x,opr,y,x/y);return;
default :printf("Operator err! \n"); }
{ int i;
for (b=3; b<=a/2; b+=2) if (prime(b)) { c=a-b; if (prime(c))
for (i=2; i<=sqrt(n); i++) if (n%i==0) return 0; return 1; }
{ printf("%d=%d+%d\n",a,b,c);
1.函数的形式参数与实际参数
【例7.4】编一程序,将主函数中的两个变量的值传 递给swap函数中的两个形参,交换两个形参的值。
void swap(int x, int y) { int z;
形式参数(形参)
z=x; x=y; y=z;
printf("\nx=%d,y=%d",x ,y);
} main( )
……
源程序文件n

C语言第七章

C语言第七章

4、strcpy(字符数组1,字符数组2):
例:main()
把“字符串2”的值拷贝到“字符串1”中。
{char str1[10]; char str2[ ]="Chinese"; strcpy(str1,str2); puts(str1); } 输出: Chinese 说明: (1)字符数组1的长度不应小于字符串2的长度。 (2)“字符数组1”必须写成数组名形式,“串2”可以是字符数 组名,也可以是一个字符串常量。如:strcpy(str1,“China”); (3)拷贝是‘\0‟一起拷贝。 (4)不能用赋值语句将一个字符常量或字符数组直接赋给一个 字符数组。 (5)可以用strcpy函数将字符串2中前面若干个字符拷贝到字符 数组1中去。 例如:strcpy(str1,str2,2);
3、部分元素赋值: int a[3][4] = {{1},{5},{9}}; 1 0 0 0 5 0 0 0 9 0 0 0
仅对a[0][0]、a[1][0]、a[2][0]赋值,编译器自动为未赋
值元素指定初值0。
4、如果对全部元素赋初值,则第一维的长度可以 不指定,但必须指定第二维的长度。 int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 与下面定义等价: int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12};
[例6.6]: main() { int i; char c1[ ] = {"How are you?"}; char c2[15]; scanf("%s", c2 ); for(i=0;i<12;i++) printf("%c", c2[i] ); printf("%s", c1 ); } 程序运行时:输入:abcdefghijklmno 结果:abcdefghijklHow are you?

《C语言程序设计》课件 《C语言程序设计》课件 第7章 函数的使用

《C语言程序设计》课件 《C语言程序设计》课件 第7章 函数的使用
各种自定义函数
<<C语言程序设计>>
电脑模块化组装
模块化程序
Page 4
7.1 为什么使用函数
【例7-1】打印输出如下所示超市购物小票的票头
某某超市欢送您 *****************************
*
分析
1、第一行为欢送词,自定义一个函数print_welcome来实 现欢送词的输出功能 2、第二行为一定数量的“*〞号,自定义一个函数 print_star来实现 “*〞号的输出功能
第7章 函数的使用
<<C语言程序设计>> 课程
<<C语言程序设计>>
Page 1
主要内容
1 为什么使用函数 2 函数的根本使用 3 函数递归调用 4 用带参数的宏定义代替公式型函数 5 函数和变量的作用域及存储类型
<<C语言程序设计>>
Page 2
问题引入
数学函数sqrt()、字符串处理函数strlen() 等。这些具有通 用功能的函数称之为标准库函数,是由C语言开发环境提供, 标准库函数给编程带来了极大的方便。
形式参数 实际参数
<<C语言程序设计>>
Page 17
7.3 函数的调用
函数调用的形式
函数名(参数表) – 对实参的要求
• 实参个数和形参个数相等。 • 实参的类型要和形参的类型一
致。 • 被调用函数无形参,实参表是
空的,但括号不能省略。
main( ) { int a=1,b=3,c;
函数调用
c=max(a,b);
{ int n=1, i; for(i=1;i<=a;i++) n=n*i; return n;

C程序设计课件第7章

C程序设计课件第7章
如:FILE *fp1,*fp2;
含义: 定义了两个文件类型的指针变量, 可以打开两个文件。
文件的打开与关闭
1. 打开文件 将文件调入内存, 并与文件指针建立联系。
2. 关闭文件 将文件指针与文件脱离, 并将文件从内存写入外存。
3. 文件打开函数(fopen())
➢函数调用格式 fp=fopen(文件名 , "打开方式")
➢调用格式
位置指针
fputc(ch,fp) /*fp是文件指针*/
➢功能 把 ch的值写入fp所指向的文件。
➢返回值: 成功, 返回写入字符; 失败, 返回EOF(-1)。
说明
在stdio.h中有宏定义:
#define putc(ch,fp) fputc(ch,fp)
putc(ch,fp)
fputc(ch,fp)
/*输入文件名*/
if( (fp= fopen(filename,"w") )==NULL )
/*按写方式打开文件*/
{ printf("Cannot create this file!\n"); exit(0); }
printf("Input %d line strings:\n",N); for(i=1;i<=N;i++)
【例】先将键盘输入的4行字符串写入到磁盘文件, 再将写入
文件的字符串输出到屏幕上。
#define N 4
#include "stdio.h "
#include "stdlib.h"
void main()
{ FILE *fp;
char ch[81],filename[12];
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

count++;
//统计,直到遇到文件结束符为止
fclose(fp);
printf(" file \"%s\" contains %d characters.\n",argv[1],count);
}
.
18
7.2.2 用于文件操作的函数
.
16
7.2.2 用于文件操作的函数
2.文件的读写函数
1)字符读写函数:
int fputc ( int ch, FILE *fp); int fgetc(FILE *fp);
2)串读写函数
int fputs(const char *str, FILE *fp); char *fgets(char *str,int length,FILE *fp);
.
17
7.2.2 用于文件操作的函数
/* 功 能:【统计例一7个.6文】本统文件计中文字符本的文个数件*/中的字符个数。
/* 说 明: 文件名从命令行输入 */
#include "stdio.h"
main(int argc, char *argv[ ])
{
FILE *fp;
int count = 0;
unsigned char *curp; /*文件定位指针*/
unsigned istemp; /*临时文件指示器*/
short token;
/*用于有效性检查*/
}FILE;
.
9
7.2
文件操作
.
10
文件的操作包括了几个基本步骤:
1)定义文件结构体类型指针; 2)打开文件; 3)文件的读/写(追加)操作; 4)关闭文件。
.
4
文件的分类:
按文件的逻辑结构:
记录文件:由定长或不定长的记录组成; 流式文件:由一个个字符(字节)数据顺序组成
按存储介质:
普通文件(磁盘文件):存储介质文件(磁盘、 磁带、光盘等);
设备文件:非存储介质(键盘、显示器、打印机 等)。
按数据的组织形式:
文本( ASCII码)文件:每个字节存放一个字符 的ASCII码;
ANSI C标准仅定义了缓冲文件系统。 本章集中讨论ANSI C文件系统。
内 存
Buffer
Disk
.
6
7.1.2 流和文件
C语言为实现设备无关性(各种不同的设备和磁 盘文件等同),提供了称为流的抽象。
流是由数据字节序列组成的。 每一个C流与一个文件相连。 流的模式共有两类:
文本流(text); 二进制 (binary) (比特)流。
filename是包含的路径文件名 mode是打开方式,见表:
返回值为指向此文件的指针,以后使用。 如果打开失败,返回值为NULL。
.
15
7.2.2 用于文件操作的函数
1.文件的打开与关闭函数
2)关闭文件 函数fclose()关闭由fopen()函数打开的流。 fclose()函数把遗留在缓冲区的数据写入文 件,实施操作系统级的关闭操作。同时释 放与流联系的文件控制块。
支持随机存取的文件,打开文件时也初始 化文件位置指示(File Position Indicator), 将其置为文件开始处,随着对文件的读写 再对其增量或减量,确保访问的正确推进。
.
8
7.1.3 C语言文件
与文件相联的每个流都有一个FILE类型的 控制结构,通常称为文件指针。在stdio.h 中定义,用户绝对不能修改。
通 常 把 显 示 器 定 义 为 标 准 输 出 文 件 , 使 用 printf , putchar函数对其输出。
键 盘 通 常 被 指 定 标 准 的 输 入 文 件 , 使 用 scanf , getchar函数输入。
.
7
7.1.3 C语言文件
文件还可以分为:
随机存取文件,如磁盘文件; 顺序存取文件,如键盘。
typedef struct
{ int level;
/*缓冲区“满”或“空”的程度*/
unsigned flags; /*文件状态标志*/
char fd;
/*文件描述符*/
unsigned char hold; /*如无缓冲区不读取字符*/
int bsize;
/*缓冲区大小*/
unsigned char *buffer; /*数据缓冲区位置*/
if ((fp = fopen(argv[1],"r")) == NULL )
{
printf("can't open file %s .",argv[1]);
exit(1);
// 文件打开失败,退出
}
// 文件成功打开,从文件中读取字符
while (fgetc(fp)!=EOF) // 按字符读文件并对读入字符数进行
UNIX I/O函数 (非缓冲文件系统) 大多没有前缀f。
系统定义宏EOF 为整数-1,当 读到文件尾时的 返回该值。
.
14
7.2.2 用于文件操作的函数
1.文件的打开与关闭函数
1)打开文件 FILE *fopen(char *filename, char *mode);
例:
FILE *fp=fopen("test", "rw");
.
11
7.2.1 定义文件结构体类型的指针
声明一个文件结构体类型指针的形式是:
FILE *文件结构体指针名;
例如: FILE *fp1,*fp2; 声明了两个指向文件的文件指针变量。
.
12
7.2.2 用于文件操作的函数
文件的一般处理过程
.
13
7.2.2 用于文件操作的函数
用于文件操作 的函数原型声明 在stdio.h中。
二进制文件:数据按其在内存中的存储形式原样 存放。
.
5
7.1.1 ANSI C的I/O和UNIX C的I/O
UNIX C标准定义了两套I/O操作方法:
缓冲文件系统(buffered file system),也可称为格 式化的(formatted)或高级(high level)文件系统;
非缓冲(unbuffered)文件系统,也可称非格式化的 (unformatted)文件系统,只存在于UNIX标准中。
第七章 文件及应用
兰州理工大学
.
1
第七章 文件及应用
7.1 C语言文件的概念 7.2 文件操作 7.3 非缓冲文件系统
.
2
7.1
C语言文件的概念
.
3
文件是一组存储在外部设备上的数据的集合。 每个文件都有一个文件名Fra bibliotek操作系统以树状的目
录(或称文件夹)管理文件。 使用文件可以:
大量、永久地保存信息; 便于数据共享;
相关文档
最新文档