最新c语言程序设计第10章课件
合集下载
C语言程序设计教程课件第10章

k。
如果是循环右移,则先将m右移n位(即将原数的高k- n位移到低位),再将m左移k-n位(即将原数的低n位移到 高位),然后将它们作按位或运算(即将它们合并)。 如果是循环左移,则先将m左移n位(即将原数的低k- n位移到高位),再将m右移k-n位(即将原数的高n位移到 低位),然后将它们作按位或运算(即将它们合并)。
(5)位段可以在一般的表达式中被引用,并被自动转 换为相应的整数。
10.3 程序举例
例10.3 编写一个C程序,其功能是:从键盘输入一个
无符号整数m以及位移位数n,当n>0时,将m循环右 移n位;当n<0时,将m循环左移|n|位。
将一个无符号整数m循环移n位的方法如下: 首先用sizeof函数确定一个无符号整数所占的二进制位数
3.“按位异或”运算符(^) “按位异或”的运算符为“^” 。其运算规则是:若两个 运算对象的对应二进制位不相等,则结果的对应位是1,否 则为0。 “按位异或”运算具有以下几个性质: (1)使数据中的某些位取反,即将0变为1,1变为0。 (2)同一个数据进行异或运算后,其结果为0。利用异或 运算的这个性质,可以将变量清零。 (3)可以实现交换两个变量的值:
6.“右移”运算符(>>)
“右移”运算符为“>>”。其运算规则是:将运算对象中 的每个二进制位向右移动若干位,从右边移出去的低位部分 被丢弃。但左边空出的高位部分是补0还是补1,要视下列具 体情况而定: 若右移对象为无符号整型数,则右移后左边空出的高位 部分补0。 若右移对象为一般整型数或字符型数据,当该数据的最 高位为0(对于一般整型来说即为正数),则右移后左边空 出的高位部分补0。当该数据的最高位为1(对于一般整型来 说即为正数),则与使用的计算机系统有关,有的计算机系 统将右移后左边空出的高位部分补1,称为“算术右移”; 有的计算机系统将右移后左边空出的高位部分补0,称为“ 逻辑右移”。
谭浩强C语言程序设计课件完整版第10章

10.3文件的读写
fputc(c,fp2); fclose(fp1); fclose(fp2); } system("cls"); printf("abc.txt:\n"); system("type abc.txt"); printf("\n\nxyz.txt:\n"); system("type xyz.txt"); */ } 运行结果如下:
10.2文件的打开与关闭
即先检查打开的操作有否出错,如果有错就在终端上输出 “cannot open this file”。Exit函数的作用是关闭所有文件,终 止正在调用的过程。待用户检查出错,修改后在运行。 2.文件的关闭(fclose函数) 使用完一个文件之后应该尽快关闭,以免数据丢失。 关闭一个文件使用fclose()函数实现,其格式如下: Fclose(文件指针) 文件指针:指明要关闭哪个文件,作为参数的文件指针必须是由打 开文件函数fopen()得到的。 例如: #include<stdio.h> main() { FILE *fp; … if(fp=fopen(“abc.txt,”“r”))==0) /*尝试打开文件*/
/* 调用DOS命令输出源文件内容*/ /* 调用DOS命令输出目标文件内容
10.3文件的读写
10.3.2 fgets()函数和fputs()函数
以字符为单位的fgetc()函数和fputc()函数一次只能读出或写入一个字 符到文件中,显然处理大量数据时效率不高,以字符串为单位的fgets()函 数和fputs()函数可以一次从文件输入或向文件输出一个字符串。 1.fgets ()函数 fgets()是从文件而不是从标准输入设备取得字符串。其格式如下: fgets(字符串指针,字符个数,文件指针); 其中第一个参数“字符串指针”,即一个字符组名或指向字符的指针, 用于存放读出的字符串;第二个参数指明读出多少个字符,是一个整型数; 第三个参数即目标文件的文件指针。 fgets()在遇到换行符或文件结束符时,即使已读取得字符数小于参数 中指定的数量也会自动停止。如程序设计者已经知道abc.txt文件不大于 100个字节,调用fgets()函数的第二个参数为100,使得整个文件被一次 读取。若abc.txt文件大于100字节,则后面的内容没有被读取。如果 fgets()读取到文件结束符,将会返回一个NULL值。可以据此判断是否到 达文件尾部,使用循环语句读出整个文件。若目标文件的结构不清晰,一 般使用fgetc()函数逐个字符读取,逐个处理。在预先知道目标文件结构的 情况下,使用fgets()函数能提高效率。
C语言程序设计第四版PPT-谭浩强

文件f2的 文件信息区
文件f3的 文件信息区
文件的基本知识——文件的操作 写文件:打开-写-关闭 读文件:打开-读-关闭
文件的打开
功能:为文件建立相应的信息区(存放 文件信息)和文件缓冲区(暂时存放输入 输出的数据) 函数: fopen(文件名,使用文件方式); 例: fopen("a1.dat","r");
第10章 文件
本章内容
10.1 文件的基本知识 10.2 打开与关闭文件 10.3 顺序读写数据文件 10.4 随机读写数据文件 10.5 文件读写的出错检测
文件的基本知识——输入输出
之前各章中处理的数据 ➢输入:键盘->内存 ➢输出:内存->显示器 实际上也可能是 ➢输入:外部设备->内存(读文件) ➢输出:内存->外部设备(写文件) 操作系统把各种设备都统一作为文件处理
文件
顺序文件的读写——读写字符串
例10.3 从键盘输入3个字符串,排序,把排
序后的字符串写入文件(P.342-343) 读上面写好的文件(P.344)
顺序文件的读写——格式化读写
fprintf(文件指针,格式字符串,输出表列); fscanf (文件指针,格式字符串,输入表列);
例: fprintf (fp,"%d,%6.2f",i,f); fscanf (fp,"%d,%f",&i,&f);
用文件扩展名”
文件的基本知识——流式文件
C语言把文件看作是字符(或字 节)的序列。
文件以“流”的形式在程序与操 作系统间流动。
文件的基本知识——数据的形式
根据数据的组织形式,数据文件可分为 ASCII文件:数据逐个字符的ASCII码 输出到外存,也称文本文件 二进制文件:内存中二进制形式的数据 直接输出到外存
《C语言程序设计教程》PPT课件

② 标准输出文件,文件指针为stdout,系统指定为 显示器。
③ 标准错误输出文件,文件指针为stderr,系统指 定为显示器,输出错误信息。
10.1 文件的概述
11
10.1.2 文件的打开与关闭
操作文件的一般步骤
打开文件 读写文件 关闭文件 打开量文的件函C:语数建配言,立一的用用个输于户文入完程件输成序缓出对与冲函数文区数据件。库文的中件联提的系供建,了立为大、文件分 读写数文据件的:读是写指、对数文据件的的追读加、等写操、作追。加和定位操作。 关闭文件在:程切序断中文调件用与这程些序函的数联时系,,必释须放先文用件缓冲
}
FFIILLE;E *文件指针变量/名* ;This is the FILE object */
10.1 文件的概述
10
10.1.1 文件和文件指针
4. 标准文件
标准文件是外部设备中的三个特殊的设备文件。它们 的文件指针是系统定义的,并由系统自动打开和关闭。这 三个标准文件分别是:
① 标准输入文件,文件指针为stdin,系统指定为 键盘。
include命区令。包含stdio.h文件。
10.1 文件的概述
12
10.1.2 文件的打开与关闭
1. 文件打开函数fopen( )
常用的调用形式: FILE *fp; fp = fopen(文件名, 文件使用方式); 文件名:需要打开的文件名称(字符串)。 文件使用方式:是具有特定含义的符号。
缓冲区cha地r 址和大小f等d; 。 /* File descriptor
*/
FILE在类usnhCso型语irgt是n言ed系中ch统a,r定无hb义os论li的dz;e对;,磁包//**盘含UBnu文g在fefte件scrtcs还dhiazi是reo.i设fh头n备o 文b文uf件*f件/er中*/
③ 标准错误输出文件,文件指针为stderr,系统指 定为显示器,输出错误信息。
10.1 文件的概述
11
10.1.2 文件的打开与关闭
操作文件的一般步骤
打开文件 读写文件 关闭文件 打开量文的件函C:语数建配言,立一的用用个输于户文入完程件输成序缓出对与冲函数文区数据件。库文的中件联提的系供建,了立为大、文件分 读写数文据件的:读是写指、对数文据件的的追读加、等写操、作追。加和定位操作。 关闭文件在:程切序断中文调件用与这程些序函的数联时系,,必释须放先文用件缓冲
}
FFIILLE;E *文件指针变量/名* ;This is the FILE object */
10.1 文件的概述
10
10.1.1 文件和文件指针
4. 标准文件
标准文件是外部设备中的三个特殊的设备文件。它们 的文件指针是系统定义的,并由系统自动打开和关闭。这 三个标准文件分别是:
① 标准输入文件,文件指针为stdin,系统指定为 键盘。
include命区令。包含stdio.h文件。
10.1 文件的概述
12
10.1.2 文件的打开与关闭
1. 文件打开函数fopen( )
常用的调用形式: FILE *fp; fp = fopen(文件名, 文件使用方式); 文件名:需要打开的文件名称(字符串)。 文件使用方式:是具有特定含义的符号。
缓冲区cha地r 址和大小f等d; 。 /* File descriptor
*/
FILE在类usnhCso型语irgt是n言ed系中ch统a,r定无hb义os论li的dz;e对;,磁包//**盘含UBnu文g在fefte件scrtcs还dhiazi是reo.i设fh头n备o 文b文uf件*f件/er中*/
C语言程序设计课件第10章

10 文件
10
第10章 文件
通过本章的学习掌握磁盘文件中数据载入 方法和信息保存方法,能够对学生成绩管 理系统进一步完善。
第1章 C语言程序设计基础
知识目标
理解文件的概念 掌握文件的基本操作 掌握文本文件和二进制文件的读写 方法 掌握文件的定位方法
技能目标
学会使用文件进行数据的存储及处 理 能够用文件完善学生成绩管理系统
10.2 文件的读写
10.2.1 文本文件的读写
C语言提供以字符方式读写文件的函数有: • 写字符函数 int fputc(char ch, FILE *fp) • 读字符函数 int fgetc(FILE *fp) • 写字符串函数int fputs(char *string,FILE *fp) • 读字符串函数char *fgets(char *string,int n,FILE *fp)
10.1 文件的基本概念
10.1.1 文件的概念及文件类型
2.文件类型 (1)按文件的逻辑结构
记录文件:由具有一定结构的记录组成(定长和不定长)。 流式文件:由一个个字符(字节)数据顺序组成。 (2)按存储介质: 普通文件:存储介质文件(磁盘、磁带等) 设备文件:非存储介质(键盘、显示器、打印机等)
10.1.1 文件的概念及文件类型
5.文件的定义 一般情况下,要使用一个文件,系统将在内存中为这一文件开辟一个“文 件信息区”,用来存放文件的有关信息,如文件当前的读写位置、缓冲区 中未被处理的字符数、文件操作方式、下一个字符的位置、文件缓冲区 的位置等。这些信息保存在一个结构体中,该结构体由系统定义的,定 义在stdio.h的头文件中。Visual C++6.0系统中具体定义形式为:
《C程序设计》课件第10章

在C语言中文件的含义更为广泛,不仅包含以上所述 的磁盘文件,还包括一切能进行输入/输出的终端设备,它 们被看成是设备文件。如键盘常称为标准输入文件,显示 器称为标准输出文件。
文件是由磁盘文件和设备文件组成的。作为磁盘文件 之一的数据文件是本章学习的主要对象。
根据文件内数据的组织形式, 文件可分为文本(text) 文件和二进制文件。 文本文件又称为ASCII码文件, 这种文件在磁盘中存放时每个字节存放一个字符的ASCII 码。 ASCII码文件可在屏幕上按字符显示, 文件的内容可 以通过编辑程序(如记事本等)进行建立和修改, 人们能读 懂文件内容。 但是ASCII码文件所占存储空间较多, 处理 时要花费转换时间(内存中的二进制形式与ASCII码之间的 转换)。
typedef struct
{
short
level; /* 缓冲区“满”或“空”的程
度 */
unsigned flags; /* 文件状态标志 */
char
fd; /* 文件描述符 */
unsigned char hold; /* 如无缓冲区不读取字符 */
short
bsize; /* 缓冲区的大小 */
缓冲文件系统中,关键的概念是文件指针。
通常,由于文件中的数据很多,因此读/写时应该指明 对哪个数据进行操作。流式文件中采用的方法是设立一个 专门用来存放文件读/写位置的变量,称为当前工作指针。 在对某文件开始进行操作时,将当前工作指针的值设置为 0,表示文件从头开始读(写); 每次读(写)之后,自动将当 前工作指针的值加上本次读(写)的字节数,作为下次读(写) 的位置。从前面的介绍可以看出,要对一个文件进行操作, 除了要设当前工作指针,还必须管理缓冲区。实际上,在 头文件stdio.h中,定义了一个名为FILE的类型,包含了所 有与文件操作有关的数据成员,这个文件类型是文件处理 的基础。文件类型FILE不是C语言的新类型,它是用 typedef定义出来的有关文件信息的一种结构体类型。如 Turbo C的stdio.h文件中有如下的定义:
C语言程序设计第十章课件

动为其添加′\0′结束符
2/37
第2页/共37页
10.2字符串的存储
C语言并没有为字符串提供任何专门的表示法, 完全使用字符数组和字符指针来处理 字符数组
–每个元素都是字符类型的是数字组符数组,但不代表字符串
char str[80];
Ho w Ho w
ar e ar e
y o u \0 y o u \0
H e l l o C h i n a \0 \0
2021/3/24
23/37
第23页/共37页
字符串比较
#include <string.h> strcmp(字符串1,字符串2);
string comparison
字符串能否用>、<、==比较大小?
if (str2 == str1)
if (strcmp(str2, str1) == 0)
char *pStr;
pStr = "Hello China"; 字符指针pStr是变量
2021/3/24
6/37
第6页/共37页
10.3字符指针
"Hello China"
str H e l l o
C h i n a \0
pStr
定义和初始化方法不同
char str[12] = {"Hello China"};
void MyStrcpy(char dstStr[], char srcStr[]) {
int i = 0; while (srcStr[i] != '\0') {
dstStr[i] = srcStr[i]; i++; } dstStr[i] = '\0'; }
2/37
第2页/共37页
10.2字符串的存储
C语言并没有为字符串提供任何专门的表示法, 完全使用字符数组和字符指针来处理 字符数组
–每个元素都是字符类型的是数字组符数组,但不代表字符串
char str[80];
Ho w Ho w
ar e ar e
y o u \0 y o u \0
H e l l o C h i n a \0 \0
2021/3/24
23/37
第23页/共37页
字符串比较
#include <string.h> strcmp(字符串1,字符串2);
string comparison
字符串能否用>、<、==比较大小?
if (str2 == str1)
if (strcmp(str2, str1) == 0)
char *pStr;
pStr = "Hello China"; 字符指针pStr是变量
2021/3/24
6/37
第6页/共37页
10.3字符指针
"Hello China"
str H e l l o
C h i n a \0
pStr
定义和初始化方法不同
char str[12] = {"Hello China"};
void MyStrcpy(char dstStr[], char srcStr[]) {
int i = 0; while (srcStr[i] != '\0') {
dstStr[i] = srcStr[i]; i++; } dstStr[i] = '\0'; }
C程序设计课件第10章

普通文件和设备文件
普通文件是指驻留在磁盘或其它外部介质上的一 个有序数据集,可以是源程序文件、目标程序文 件、可执行程序文件;也可以是一组待输入处理 的原始数据,或者是一组输出的结果。
设备文件是指与主机相联的各种外部设备,如显 示器、打印机、键盘等。
在操作系统中,把外部设备也作为文件来进行管 理,把它们的输入、输出等同于对磁盘文件的读 和写。通常显示器定义为标准输出文件,键盘是 标准输入文件
ASCII文件 二进制文件
文件名
文件名是文件的唯一标识,它的一般结构是
主文件名.扩展名
其中的扩展名可以省略,但通常都保留。
因为通过扩展名,可以判断文件类型。例如.
– .c
C语言的源程序文件
– .txt 文本文件
– .doc word文档文件
文件名分为
– 绝对文件名 从磁盘盘符开始描述的文件名
12 “ab+” 同“wb+”,但是不删除原有文件内容
关闭文件
函数原型
int fclose( FILE * stream );
调用方式 fclose( fp );
返回=值0EOF
操作成功 出错
读字符
函数原型:
int fgetc( FILE * fp );
功能 从fp指向的文件中读取一个字符,同时将读写位置 指针向前移动1个字节
返 回 值 = 读 E O 取 F 字 符 的 A S C I I 码
操 作 成 功 出 错 或 遇 到 文 件 结 束
写字符
函数原型 int fputc( int ch, FILE * fp );
功能 把字符ch写入fp指向的文件,同时将读写位置指针 向前移动1个字节。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
struct student
如果初值个数多于结构体成员个数,
则编译出错。
{ char num[8], name[20], sex;
struct date birthday;
float score;
}a={"9606011","Li ming",'M',{1977,12,9},83},
b={"9608025","Zhang liming",'F',{1978,5,10},87},c;
【例9.6】编写一个统计选票的程序。
struct candidate
{ char name[20]; /* name为候选人姓名 */
int count;
/* count为候选人得票数 */
} list[ ]={{"invalid",0},{"Zhao",0},{"Qian",0},
{"Sun",0},{"Li",0},{"Zhou",0}};
a.birthday.year a.birthday.month a.birthday.day
结 构 体 变 量 a 的 各 成 员 可 分 别 表 示 为 a.num、 、a.sex、a.birthday、a.score
2021/2/13
9.1 结构体
16
9.1.2 结构体变量的定义与初始化
结构体变量名.成员名
struct date { int year, month, day;}; struct student
结构体变量的各个成员可 进行何种运算,由该成员
的数据类型决定
{ char num[8], name[20], sex; struct date birthday; float score; }a;
struct date birthday; float score; }a;
sizeof(a) 的结果为8+20+1+6+4=39 sizeof(struct student) 的结果为39
2021/2/13
9.1 结构体
13
9.1.2 结构体变量的定义与初始化
3. 结构体变量的运算
同类型结构体变量之间的赋值运算
struct date birthday; float score; }a;
对结构体变量a进行 &a 运算,可以得到a的 首地址,它是结构体类型指针。
2021/2/13
9.1 结构体
15
9.1.2 结构体变量的定义与初始化 “.”是分量
4. 结构体变量成员的引用
运算符,运算
级别最高。
结构体变量成员引用的一般形式1
9.1.2 结构体变量的定义与初始化
2. 结构体变量的初始化
【例9.5】结构体数组的初始化。 struct s { char num[8],name[20],sex; float score; }stu[3]={{"9606011","Li ming",'M',87.5}, {"9606012","Zhang jiangguo",'M',79}, {"9606013","Wang ping",'F',90}};
}
2021/2/13
9.1 结构体
18
9.1.2 结构体变量的定义与初始化
for (i=1; i<=5; i++) printf("%s:%d\n",list[i].name,list[i].count);
c语言程序设计第10章课件
第9章 结构体与共用体
2
9.1 结构体 9.2 共用体 9.3 枚举类型与类型命名
2021/2/13
9.1 结构体
9.1.2 结构体变量的定义与初始化
1. 结构体类型变量的定义
直接定义结构体类型变量 struct
{ 成员定义表; }变量名表; 例如:
struct { char num[8],name[20],sex;
2021/2/13
9.1 结构体
17
9.1.2 结构体变量的定义与初始化
main( )
{ int i,n;
printf("Enter vote\n");
scanf("%d",&n); /* 输入所投候选人编号,编号从1开始 */
while (n!=-1)
/* 当输入编号为-1时,表示投票结束 */
c = a;
结构体变量之间进行赋值时,系统将按成员一一对应赋值。
2021/2/13
9.1 结构体
14
9.1.2 结构体变量的定义与初始化
3. 结构体变量的运算
对结构体变量进行取址运算
struct date { int year, month, day;}; struct student { char num[8], name[20], sex;
元素的个数可以省略,根据赋初值时 结构体常量的个数确定数组元素的个数
2021/2/13
9.1 结构体
12
9.1.2 结构体变量的定义与初始化
3. 结构体变量的运算
用sizeof运算符计算结构体变量所占内存空间
struct date { int year, month, day;}; struct student { char num[8], name[20], sex;
struct date { int year, month, day;}; struct student { char num[8], name[20], sex;
struct date birthday; float score; }a={"9606011","Li ming",'M',{1977,12,9},83},b,c;
int age; float score; }st[30], a, b, c;
9
2021/2/13
9.1 结构体
10
9.1.2 结构体变量的定义与初始化
2. 结构体变量的初始化
【例9.4】结构体变量的初始化。
struct date
如果初值个数少于结构体成员个数,
{ int year, mont则h,将d无ay初;}值; 对应的成员赋以0值。
{ if (n>=1 && n<=5)
list[n].count++; /* 有效票,则相应候选人计票成员加1 */
else
{ printf("invalid\n");
list[0].count++; } /* 无效票,list[0]的计票成员加1 */
scanf("%d",&n); /* 输入所投候选人编号 */