C语言程序设计第9章.ppt

合集下载

《C语言程序设计教程(第二版)》 第09章-指针(1)

《C语言程序设计教程(第二版)》 第09章-指针(1)

访问p_int所 指向的变量
getch();
}
程序运行结果: num_int=12, *p_int=12 num_f=3.14, *p_f=3.14 num_ch=p, *p_ch=p
2019/2/22
11
1、指针变量的定义
指针变量的定义标识符
数据类型 *指针变量[,*指针变量2……];
例如, [案例9.1]中的语句:
int num_int=12, *p_int ;
特别说明:定义而未初始化的指针变量(例如 p_int)是悬空的。
使用悬空指针变量,很容易破坏系统,导致系统 瘫痪。
2019/2/22
12
2、取地址运算 : &变量名 例 如 , [ 案 例 9.1] 中 的 &num_int 、 &num_f 、 &num_ch 的结果,分别为对应变量的地址 (num_int 、 num_f、num_ch)。 注意:指针变量只能存放相同数据类型变量的 地址。 例如, [案例9.1]中的指针变量p_int、p_f、p_ch, 只能接收int型、float型、char型变量的地址,否则出 错。
使p_int指向变量num_int
2019/2/22
10
printf(“num_int=%d, *p_int=%d\n”, num_int, *p_int); printf(“num_f=%4.2f, *p_f=%4.2f\n”, num_f, *p_f); printf(“num_ch=%c, *p_ch=%c\n”, num_ch, *p_ch);
9.3* 1维数组的指针与列指针变量 9.4 字符串的指针和指向字符串的指针变量 9.5 指针数组与主函数main()的参数 9.6 返回指针值的函数

C语言程序设计 第9章 文件

C语言程序设计 第9章  文件

9.3 文件的顺序读写
❖ 【例9.4】fputs函数和fgets函数的使用。
9.3 文件的顺序读写
❖ 9.3.3 fprintf函数和fscanf函数 ❖ fprintf与fscanf函数为格式读写函数,与printf、scanf类似,fprintf与
fscanf用于从文件中读取指定格式的数据和把指定格式的数据写入文件,这 是按数据格式要求进行文件的输入/输出。其一般形式为: ❖ fscanf(fp,format,args); ❖ fprintf(fp,format,args); ❖ 其中,fp为文件指针,format为格式控制字符串,args为输入或输出的地 址列表。 ❖ 例如,若文件指针fp已指向一个已打开的文件文本,a、b分别为整型变量 ,则以下语句从fp所指向的文件中读入两个整数放入变量a和b中。 ❖ fscanf(fp,”%d%d”,&a,&b); ❖ 又如,若文件指针fp已指向一个已打开的文件文本,x、y分别为整型变量 ,则以下语句将x、y中的数据按%d的格式输出到fp所指向的文件中。 ❖ fprintf(fp,"%d%d",&a,&b);
本章小结
❖ 本章主要介绍了以下内容。 ❖ (1)文件的概念 ❖ 介绍了文件及文件指针的基本概念,以及文件的打开与关闭
函数fopen、fclose等。 ❖ (2)文件的顺序读写 ❖ 主要介绍了从文件中输出字符、字符串,以及将字符、字符
串写入文件的函数。 ❖ (3)随机文件的读写及错误检测 ❖ 主要介绍了随机文件读写的应用,以及文件的出错检测。
❖ 在实际读写文件中,人们常常希望能直接读到某一数据 项而不是按物理位置顺序逐个读下来。这种可以任意指 定读写位置的操作称为文件的随机读写。可以想象,只 要能移动位置指针到所需要的地方,实现文件的定位, 就能实现随机读写。

C语言程序设计(第3版)何钦铭-颜-晖-第9章--结构

C语言程序设计(第3版)何钦铭-颜-晖-第9章--结构

第9章结构【练习9-1】定义一个能够表示复数的结构类型,一个复数包括实数与虚数两个局部。

解答:struct complex{float real;float imaginary;};【练习9-2】人的出生日期由年、月、日组成,请在例 9-1 中的通讯录结构中增加一个成员:出生日期,用嵌套定义的方式重新定义该结构类型。

解答:struct date{int year;int month;int day;};struct student{int num;char name[10];struct date birthday;int computer,english,math;double average;};【练习9-3】例 9-1 中,如果要计算的是三门课程的课程平均成绩,应该如何改写程序?解答:#include<stdio.h>struct student{int num;char name[10];int computer,english,math;double average;};int main(void){int i, n;double math_sum,english_sum,computer_sum;struct student s1;printf("Input n:");scanf("%d", &n);printf("Input the student's number, name and course scores:\n"); math_sum=english_sum=computer_sum=0;for(i=1;i<=n;i++){printf("No.%d:",i);scanf("%d%s%d%d%d",&s1.num,,&s1.math,&s1.english,&s1 puter);math_sum+=s1.math;english_sum+=s1.english;computer_sum+=s1 puter;}printf("math_ave:%.2lf\nenglish_ave:%.2lf\ncomputer_ave:%.2lf\n", math_sum/n,english_sum/n,computer_sum/n);return 0;}【练习9-4】定义一个包含 5 名学生信息的结构数组,并对该结构数组的所有元素进行初始化。

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语言学习指南课件与历年真题精讲精析 第9章

全国计算机二级c语言学习指南课件与历年真题精讲精析 第9章

2、1个数组元素,实质上就是1个变量,它具有和相 同类型单个变量一样的属性,可以对它进行赋值和参 与各种运算。 3、一个数组不能整体引用,数组名中存放的是一个地 址常量,它代表整个数组的首地址。 例如:double x[8], *p, q; p=x; q=x;
不能将数组名赋给一个类型不同的普通变量
C语言规定,数组名代表数组的首地址,因此, 数组名实际上也是指针,但它是一个固定不变的 指针常量。
如:int a[5]; a是数组名,也是指针,它永远指向数组的首地址 ,即不能将新地址赋给该指针。但可以通过形如 a+k的形式(k是整数)来表达该数组其它元素的地 址。 如:for(k=0;k<5;k++) scanf(“%d”,a+k);
15 67 3 26 98
a[0]
a[1] a[2] a[3] a[4]
高地址
9.1.2 一维数组元素的引用 数组名[下标表达式] 如:double x[8]; 则x[0]、x[j]、x[i+k]均合法。 注意:i+k是下标表达式而不是两个下标。 说明:
1、“下标表达式”可以是任何非负整型数据,取值范
for(k=0;k<10;k++) printf(“%4d”, *(p+k));
for( k=0;k<10;k++) {printf(“%4d”,*p);p++;}
for( k=0;k<10;k++) printf(“%4d”,*p++);
for( ;p-a<10;p++) printf(“%4d”,*p);
围是0~(元素个数-1)。

C语言第9章结构体、共用体、枚举

C语言第9章结构体、共用体、枚举

结构体变量.成员
struct date { int year;
int month; int day;
“.”是成员运算符, 优先级最高
printf("%d,%d,%d",birth);
printf("%d,%d,%d",birth.year,
}; struct date birth;
birth.month,birth.day);
scanf("%f",&student2.score[2])7; 8
student2
结构变量的整体赋值 student3 = student2;
02 Zhang Zi Liang 88 78
student3
02 Zhang Zi Liang 88 78
湖南工业大学计算机与通信学院
例9-1学生的基本信息包括学号、姓名、3门成绩、平均分、总分。输入一 个学生的前3项基本信息,计算平均分和总分并输出。
湖南工业大学计算机与通信学院
9.1 问题的提出
又如,在学生信息管理系统中填 加个属性:是否是中共党员,如 果不是属性的值为0(int),如
果是属性的值为入党的时间 (char)。在某一时间,属性只有 一种值,而且数据类型不同,这 种情况用什么数据类型描述呢?
对于这种应用,C语言引入了共用体类型。
共用体是一种同一存储区域由不同类型变量共享的数据 类型,它提供—种方法能在同一存储区中操作不同类型 的数据,也就是说共用体采用的是覆盖存储技术,准许 不同类型数据互相覆盖。
基本数据类型并不能方便地解决所有问题
❖ 复合数据类型是基本数据类型迭代派生而来
典型的代表就是“结构”,数组、指针也可算作此类

C语言程序设计 第3版 第9章 编译预处理

C语言程序设计 第3版 第9章 编译预处理
int s; s=sum(5); printf("s%d\n",s); }
#include "test2.c" static int sum(int n) {
int i,s=0; for(i=1;i<=n;i++)
s=s+fact(i); return s; }
static int fact(int n) {
C语言程序设计
第9章 编译预处理
第1讲:编译预处理基本形式
提纲
1.宏定义 2.文件包含 3.条件编译
1.宏定义
不带参数宏定义 带参数宏定义
格式:
#define 标识符 字符串
功能:
指定标识符代替一个较复杂的字符串。
注意说明:
(1)宏名一般习惯用大写字母,例如宏名PI。 (2)宏名用做代替一个字符串,不作语法检查。 (3)宏定义无需在末尾加“;” (4)宏定义的有效范围为#undef命令终止。 (5)在进行宏定义时,可以引用已定义的宏名。
char web[50]; int i=0; gets(web); while(web[i]!='\0') {
#if(R==1) if(web[i]>='A'&&web[i]<='Z') {web[i]=web[i]+32; i++;}
#else if(web[i]>='a'&&web[i]<='z') {web[i]=web[i]-32; i++;}
形式3:
#ifndef 标识符 程序段1
#else 程序段2

程序设计语言 编译原理(第三版)第9章

程序设计语言 编译原理(第三版)第9章

TOP 32
d
31
c
30
v
29
u
28
2
27
11
SP 26 25
返回地址 17
24
d
23
c
22
v(形参)
21
u(形参)
20
2(形参个数)
19
11
18
返回地址
17
11
16
i
15
b(形参)
14 1(形参个数)
13
0
12
返回地址
11
5
10
i
9
c
8
0
7
0
6
返回地址
5
0
4
x
3
a
2
0
1
返回地址
0
0
25
9.5 嵌套过程语言的栈式实现
0
0
过程S中调 用Q时
过程P中 调用S时
23
过程Q中调用R时
TOP
24
d
23
c
22
v(形参)
21
u(形参)
20 2(形参个数)
19
11
18 返回地址
SP
17
11
16
i
15
b(形参)
14 1(形参个数)
13
0
12
返回地址
11
5
10
i
9
c
8
0
7
0
6
返回地址
5
0
4
x
3
a
2
0
1
返回地址
0
0

51单片机C语言应用与开发(第9章)

51单片机C语言应用与开发(第9章)

4. 具有将可变的选择与特殊操作组合在一起的 能力,改善了程序的可读性;
5. 提供的库包含许多标准子程序,具有较强的 数据处理能力; 6. 由于具有方便的模块化编程技术,使已编好 程序可容易地移植;
C51程序结构
预处理命令 全局变量说明; 函数1说明; …… …… 函数n说明;
main() { 局部变量说明; 执行语句; 函数调用(实际参数表); 函数1(形式参数说明) { 局部变量说明; 执行语句; 函数调用(实际参数表); } …… …… 函数n(形式参数说明) { 局部变量说明; 执行语句; 函数调用(实际参数表); }
8
片内RAM,间接寻址,共256字节。
片外RAM,分页间址,共256字节。(MOVX @Ri)
xdata
code
16
16
片外RAM,间接寻址,共64k字节。(MOVX @DPTR)
ROM区域,间接寻址,共64k字节。(MOVC @DPTR)
访问片内RAM比访问片外RAM的速度要快得 多,所以对于经常使用的变量应该置于片内 RAM中,即用bdata、data、idata来定义;对 于不经常使用的变量或规模较大的变量应该置于 片外RAM中,即用pdata、xdata来定义。例如:
/* IP */ sbit PS = 0xBC; sbit PT1 = 0xBB; sbit PX1 = 0xBA; sbit PT0 = 0xB9; sbit PX0 = 0xB8; /* P3 */ sbit RD = 0xB7; sbit WR = 0xB6; sbit T1 = 0xB5; sbit T0 = 0xB4; sbit INT1 = 0xB3; sbit INT0 = 0xB2; sbit TXD = 0xB1; sbit RXD = 0xB0; /* SCON */ sbit SM0 = 0x9F; sbit SM1 = 0x9E; sbit SM2 = 0x9D; sbit REN = 0x9C; sbit TB8 = 0x9B; sbit RB8 = 0x9A; sbit TI = 0x99; sbit RI = 0x98; #endif

C语言程序设计(全套课件379P)

C语言程序设计(全套课件379P)

2.C语言的特点 C语言同时具有汇编语言和高级语言的优势。 (1)语言简洁、紧凑,使用方便、灵活。 (2)运算符极其丰富。 (3)生成的目标代码质量高,程序执行效率高。 (4)可移植性好(较之汇编语言)。 (5)可以直接操纵硬件。
3. 在C语言中,除实现顺序、选择和循环 三种基本 结构等的9条控制语句外,输入输出操作均由标准库函数 (不是C语言的组成部分)来实现。 所以学习C语言,不仅要学习这9条控制语句和各种 运算符,而且要学习并掌握常用标准库函数的使用。
(2)可执行语句
一般由若干条可执行语句构成。图1-2是[案例1.2]的main()函数体的示意 图。 /*主函数main()*/ main() { int num1,num2; 变量定义部分 printf(“Input the first integer number: ”); scanf(“%d”, &num1); printf(“Input the second integer number: ”); 可执行语句部分 scanf(“%d”, &num2); printf(“max=%d\n”, max(num1, num2)); } 图1-2 函数体结构示意图 4.说明 (1)函数体中的变量定义语句,必须在所有可执行语句之前。 下面程序中变量定义语句“int max;”的位置是非法的:
本书以ANSI C新标准来介绍。
( 3 )目前,在微机上广泛使用的C语言编译系统有 Microsoft C、Turbo C 、Borland C等。虽然它们的基本部 分都是相同的,但还是有一些差异, 所以请大家注意自己 所使用的C编译系统的特点和规定(参阅相应的手册)。 本书选定的上机环境是TC V2.0(DOS操作系统)。
1.2.2 函数的一般结构

C语言9

C语言9

第 九 章 编 译 预 处 理
7-1
宏定义 不带参数的宏定义 带参数的宏定义
7-1-1 7-1-2
7-2
7-3
文件包含
条件编译
9-1
宏定义
例9-1 请看下面的程序: #define PI 3.14159 main() {float r,l,s; scanf("%f",&r); l=2*PI*r; s=PI*r*r; printf("l=%7.2f,s=%7.2f\n",l,s); } 程序的第一行内容:#define PI 3.14159 就是一个宏定义,PI 称为宏名,其作用是用标识符PI代表3.14159这样一串字符。在此之后 的程序中就可以用标识符PI代替3.14159,称为宏引用。 预处理时,程序中的PI 将被所定义的串3.14159替换,称为宏展开 或宏替换,如程序中的语句:l=2*PI*r;和s=PI*r*r;中的宏展开后分别 为:l=2*3.14159*r;和s=3.14159*r*r;。 有两种形式的宏 :不带参数的宏和带参数的宏。
9-2
文件包含(1)
一个C 程序由若干个源程序组成,而一个源文件还可以将另一个源 文件的全部内容包含进来,即将指定源文件的内容包含在当前文件中。 例如有两个源文件file1.c和file2.c,文件的内容分别如下: file1.c的内容: int max(int x,int y) {int z; if(x>y) z=x; else z=y; return z; } file2.c的内容: #include "file1.c" main() {int a,b,c; scan("%d,%d",&a,&b); c=max(a,b); printf("c=%d\n",c); }

第9章C语言程序设计(张曙光)教材各章习题解答

第9章C语言程序设计(张曙光)教材各章习题解答

1.(1)struct struct student stu(2). ->(3)4(4)a(5)malloc() free()(6)s->next=p->next p->next=sp->next=p->next->next(7)typedef(8)枚举2.(1)scanf("%s",*cPtr->suit);错误。

更正为scanf("%s",cPtr->suit);(2)printf("%s\n", hearts.face); 错误。

更正为printf("%s\n", hearts[0].face); (3)赋初值错误。

应该赋予一个字符型的初值。

(4)枚举类型的定义错误。

更正为enum a {one=9,two=-1,three};3.(1)A)(2)D)(3)D)(4)D)(5)D)(6)B)4.(1)①sizeof(stu)(2)②struct object *next;(3)③old=q->age; ④q->name,q->age(4)⑤struct link *head ⑥p->data ⑦p->next5.(1)51,60,21(2)1,1(3)04510(4)2,3(5)求链表中所有节点数据域之和。

6.#include <stdio.h>struct complex /*定义结构体类型复数*/{double x; /*实部*/double y; /*虚部*/};struct complex complex_add( struct complex a,struct complex b )/*求复数的加法*/ {struct complex c;c.x = a.x+b.x;c.y = a.y+b.y;return c;}struct complex complex_sub( struct complex a,struct complex b ) /*求复数的减法*/ {struct complex c;c.x = a.x-b.x;c.y = a.y-b.y;return c;}void complex_print( struct complex c ) /*输出复数*/{if( c.x )printf( "%lf",c.x );if( c.y>0 )printf( "+%lfi",c.y );else if( c.y<0 )printf( "%lfi",c.y );}void complex_scan( struct complex *p ){scanf( "%lf%lfi",&p->x,&p->y );}int main(void){struct complex a, b, c;complex_scan( &a );complex_scan( &b );c = complex_add( a,b );complex_print( a );printf( " + " );complex_print( b );printf( " = " );complex_print( c );printf("\n");c = complex_sub( a,b );complex_print( a );printf( " - " );complex_print( b );printf( " = " );complex_print( c );printf("\n");return 0;}7..struct dt{ int year;int month;int day;}date;main(){ int I,day_num;printf(“please input year,yue and day\n”);scanf(“%d,%d,%d”,&date.year, &date.month, &date.day);printf(“\n %d 月%d 日is %d 第%d天”,date.month, date.day, date.year,days(date.year,date.month,date.day));}days(year,month,day)int year,month,day;{int day_sum,I;static int_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};day_sum=0;for (i=1;i<month;i++){day_sum+=day_tab[i];}day_sum+=day;if{{year%4==0 &&year%100!=0||year%4==0}&&month>=3}day_sum+=1;return(day_sum);}8.typedef char datatype;typedef struct node{ datatype data;struct node *next;}linklist;insert(linklist *head,datatype a, datatype key) { linklist *s,*p,*q;s=(linklist *)malloc(sizeof(linklist));s->data=key;q=head; p=head->next;if(p==NULL){s->next=p;q->next=s;return;}while((p->data!=a)&&(p->next!=NULL)) {q=p; p=p->next;}if(p->data==a){s->next=p;q->next=s;}else{s->next=NULL;p->next=s;}}9.typedef int datatype;typedef struct node{ datatype data;struct node *next;}linklist;invert(linklist *head){ linklist *p,*q;p=head->next;if(p!=NULL){ head->next=NULL;do{q=p->next; p->next=head->next;head->next=p; p=q;}while(p!=NULL);}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
13
文件的读写(四)
④ 读写一个“记录”(成“块”读写) P317 适用于结构体等复杂实体。 写入 fread(p,size,n,fp) 读入 fwrite(p,size,n,fp) p-实体指针 size-字节数 n-多少次 fp-文 件指针 调用成功,返回n值。
示例: P318例13.3
14
} fclose(fpr);
果。
fclose(fpw);
11
}
#define NULL 0
#include <stdio.h>
FILE *fp;
char *s="123";
main()
{
char ch;

clrscr(); if ((fp=fopen("d:\\tc\\a.dat",“w+")) ==NULL)
3
磁盘文件分类
按其存储方式,C文件可以分为: ASCII文件(文本文件)
按数据的ASCII编码方式存放(可用文字编辑软件如 “记事本”打开来看)。 二进制文件 按数据在内存中存储的形式原样存放(0和1的集合) C系统在处理这些文件时,并不区分类型,都看成 是字符流(即以字节为存取单位)。输入输出字符 流的开始和结束只由程序控制而不受物理符号(如 回车符)的控制,故称“流式文件”。
}
12
文件的读写(三)
③ 格式化读写 P321 适用于一般实体,如数值型变量。 fscanf(fp,“%d,%f”,&a,&b); 将磁盘文件中的数据送给变量a,下一个送给变量b fprintf(fp,“%d,%6.2f”,a,b); 将变量a和b按%d和%f格式输出到fp所指文件上 比较:scanf(“%d,%f”,&a,&b); printf(“%d,%6.2f”,a,b);

{ printf("文件打开失败");
运行之,打开 文件a.dat观看
exit(0); } fgets(s,10,fp); puts(s); fputs("Hello,",fp);
结果。 将fp打开方式 改为’a+’后连 续运行几次,看
fputs("my friends!",fp);
看结果。
fclose(fp);
① 单字符读写 P314 写入 fputc(ch,fp) 读入 x=fgetc(fp) 遇到文件末时,返回EOF(文 件结束符,即-1) 通常可用while(ch!=EOF) 或while(!feof(fp))控制读 取循环。 P314/315 比较: putchar(c) x=getchar( )
5
二、文件操作
文件打开/关闭程序的基本形式 示例(设文件;
/*声明文件型指针变量*/

fp=fopen(“ABC.txt”,“w”); /*按指定文件使用方式打开文件*/

/*输入输出等*/
fclose(fp);
/*关闭文件*/
}
6
示例程序说明
7
示例程序说明(续)
④文件使用方式 P312表13.1 基本方式是 r(只读) w(只写) a(追加) 加b: 对二进制文件 加+ :读写 注意:r和a要求该文件必须存在,否则出错 (返回NULL) w为新建文件(如原来存在同名文件,被复盖)
8
二、文件操作
文件的读写 P313 设文件指针变量为fp
{
FILE *fp;
long int n;
fp=fopen("wj.txt","rb");
fseek(fp,0,SEEK_END);
n=ftell(fp);
fclose(fp); printf("%ld",n); }
A)输出文件wj.txt的起始地址 B)输出文件wj.txt的终止地址 C)输出文件wj.txt的错误信息
高级语言程序设计
第九章 文件
计算机基础教研室
教学目的与要求
了解文件的分类 掌握标准设备输入、输出函数的作用 掌握文件读写的四种方法 熟练掌握文件的基本操作
重点与难点
文件的基本概念 文件的打开、关闭 文件常用读写方法 文件操作的应用
2
一、C文件概述
C程序与磁盘文件 本章讨论的文件主要是指可供C程序在执行 过程中从磁盘读取数据或写入数据的文件。
关于fseek(fp,n,i)
fp 文件指针 n 位移量(以起始点为基点,向前移动的字节数,负数
为倒移的字节数) i 起始点
函数ftell(fp)用于获得位置指针在文件中的当前位置(用相
对于文件开头的位移量来表示)。
16
示例
以下程序的功能是 。
#include "stdio.h"
main( )
9
文件的读写(二)
② 字符串读写 P323 写入 fputs(str,fp) 读入 fgets(str,n,fp) 从fp所指文件中读入n1个字节数据给字符数组str(未尾加’\0’, 遇EOF即结束) 比较:puts(str) gets(str)
10
示 例
#define NULL 0
#define EOF -1
文件的定位
文件中有一个位置指针,指向当前读写的位置。顺 序读写一个文件时,每读写完一个字符,位置指针 自动下移一个字符位置。以下函数可用于强制改变 位置指针的位置。
rewind(fp) 使fp所指文件位置指针回到文件开头(以便 从头再读写)
fseek(fp,n,i) 改变文件的位置指针
15
① FILE *fp; FILE是系统定义的结构体类型。 P310 ② 文件打开后,fp即代表该文件 ③ 通常需要判断该文件是否打开
打开成功时,fopen( )返回文件信息区的起始地址, 失败则返回0(NULL)。 if ((fp=fopen(…))==NULL) {
printf(“打开失败”); exit(0); }
4
C程序与文件读写
ANSI C提供四种读写文件的方法,通过四组函数进行:
读写一个字符:
fgetc fputc
读写一个字符串: fgets fputs
格式化读写:
fscanf fprintf
读写一个“记录”(成“块”读写):fread fwrite
文件读写(文件操作)的基本步骤是: 1、定义文件类型指针变量 2、打开文件 3、读写文件 4、关闭文件
D)输出文件wj.txt的长度
17
运行之,打开
{ printf("打开失败"); exit(0);
} ch=fgetc(fpr);
两个文件观看 结果。 将fpw打开方式
while (ch!=EOF) { printf("%c",ch);
fputc(ch,fpw); ch=fgetc(fpr);
改为’a’后连 续运行几次,看 看abc.txt的结
#include <stdio.h>
FILE *fpr,*fpw;
main()
{
char ch;
if ((fpr=fopen("d:\\tc\\TEST.DAT","rw"))==NULL)
{ printf("打开失败");
exit(0);
} if ((fpw=fopen("abc.txt",“w"))==NULL)
相关文档
最新文档