计算机相关语言15结构体等_第1页
计算机相关语言15结构体等_第2页
计算机相关语言15结构体等_第3页
计算机相关语言15结构体等_第4页
计算机相关语言15结构体等_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 1 1C C C程序设计程序设计程序设计11结构体的基本概念和使用结构体的基本概念和使用结构体数组结构体数组结构体指针及其应用(结构体指针及其应用( *链链表的处理)表的处理)共用体、枚举型、定义别名共用体、枚举型、定义别名 2 2C C C程序设计程序设计程序设计整型整型实型(浮点型)实型(浮点型)字符型(字符串)字符型(字符串)枚举型枚举型数组类型数组类型结构体类型结构体类型共用体类型共用体类型基本类型基本类型构造类型构造类型指针类型指针类型空类型空类型数据类型数据类型 3 3C C C程序设计程序设计程序设计numNAMESE

2、XAGEScoreADDr2010001Li fengM1876Beijing2010002Wang bingM1889Beijing2010030Chen mingM1786Beijing 4 4C C C程序设计程序设计程序设计 struct struct 结构体名结构体名 结构体成员表;结构体成员表; ;structstruct (是关键字)结构体类型标识符。(是关键字)结构体类型标识符。结构体名结构体名(称结构体类型名)由标识符组成。(称结构体类型名)由标识符组成。大括号大括号中的结构体成员表称结构体。中的结构体成员表称结构体。结构体成员表结构体成员表包含若干成员,

3、包含若干成员,成员的表达形式成员的表达形式:数据类型标识符:数据类型标识符 结构体成员名;结构体成员名;例如:例如:struct datestruct date int day; int day; int month; int month; int year; int year; ; /date/date是结构体名。是结构体名。结构体成员。结构体成员。结构体说明的格式:结构体说明的格式: 5 5C C C程序设计程序设计程序设计struct student int num; char name20; char sex; int age; float score; char

4、addr30;numNAMESEXAGEScoreADDr2010001Li fengM1876Beijing2010002Wang bingM1889Beijing2010030Chen mingM1786Beijing例:用结构建立学生的学籍卡(数据体)。例:用结构建立学生的学籍卡(数据体)。 6 6C C C程序设计程序设计程序设计 由于结构体是由不同数据类型的数据组成的集合体。它包含若干由于结构体是由不同数据类型的数据组成的集合体。它包含若干成员。因此,在使用结构体进行数据处理时,首先应对结构体的组成成员。因此,在使用结构体进行数据处理时,首先应对结构体的组成进行描

5、述,即进行描述,即说明说明。 结构体说明实质上是构造一个结构体。结构体说明实质上是构造一个结构体。 结构体说明的内容,即说明结构体是由哪些成员组成以及成员的数结构体说明的内容,即说明结构体是由哪些成员组成以及成员的数据类型。据类型。2 2、结构体的说明、结构体的说明 7 7C C C程序设计程序设计程序设计 对结构体中数据(结构体成员)的操作是通过结构体变量的引用来实现的。对结构体中数据(结构体成员)的操作是通过结构体变量的引用来实现的。通过结构体变量可以对结构体成员进行赋值、存取或运算。通过结构体变量可以对结构体成员进行赋值、存取或运算。 结构体变量定义要按照结构体说明中

6、的结构体类型,为被定义的结构体变量分配内结构体变量定义要按照结构体说明中的结构体类型,为被定义的结构体变量分配内存单元,存单元,内存单元总数为各成员所占内存单元之和;而结构体说明不分配内存内存单元总数为各成员所占内存单元之和;而结构体说明不分配内存结构体变量定义的三种格式:结构体变量定义的三种格式:1 1)在结构体说明的同时定义结构体变量。 struct struct 结构体名结构体名 结构体成员表;结构体成员表; 结构体变量名表;结构体变量名表;3 3、结构体变量的定义、结构体变量的定义 8 8C C C程序设计程序设计程序设计 struct student int nu

7、m; char name20; char sex; int age; float score; char addr30;student1,student2,student3;该例结构体名为该例结构体名为studentstudent,用它定义了三个结构体,用它定义了三个结构体变量变量student1student1、student2student2、student3student3,三个变量具,三个变量具有相同的组成结构体,即相同的类型。有相同的组成结构体,即相同的类型。 这种定义方法的特点是这种定义方法的特点是:定义一次结构体变量之后,在该定义之后的任何:定义一次结构体变量之后,在该定义之后的

8、任何位置还可用该结构体类型来定义其它结构体变量。位置还可用该结构体类型来定义其它结构体变量。例如:例如: 9 9C C C程序设计程序设计程序设计 struct struct 结构体成员表;结构体成员表; 结构体变量名表;结构体变量名表;例如:例如:struct int num; char name20; char sex; int age; float score; char addr30;student1,student2,student3; 不出现结构体名不出现结构体名这里定义了三个结构体变量与这里定义了三个结构体变量与第一种方法中第一种方法中相同。相同。这种定义方法

9、的特点是:这种定义方法的特点是:不能在别处用来另行定义别的结构体变量,不能在别处用来另行定义别的结构体变量,要想定义就必须将要想定义就必须将struct struct 这部分重写。这部分重写。2 2)直接定义结构体变量。其定义形式为:)直接定义结构体变量。其定义形式为:01010C C C程序设计程序设计程序设计 struct struct 结构体名结构体名 结构体成员表;结构体成员表; ; . . . . . struct struct 结构体名结构体名 变量名表;变量名表;例如:例如:struct student int num; char name20; char s

10、ex; int age; float score; char addr30; . . .struct student student1,student2,student3; 这种定义方法的特点是:这种定义方法的特点是:可把其结构体说明部分作为文件存放起来,可把其结构体说明部分作为文件存放起来,这样可借助于这样可借助于“#include”#include”预编译语句把它预编译语句把它复制到任何源文件中,用以定义同类型的其复制到任何源文件中,用以定义同类型的其它结构体变量。它结构体变量。3) 3) 把定义和说明分开。其定义格式为:把定义和说明分开。其定义格式为:11111C C

11、 C程序设计程序设计程序设计v 结构体说明描述了结构体的组织形式,在程序编译时并不为它分配存储结构体说明描述了结构体的组织形式,在程序编译时并不为它分配存储空间。只是规定了一种特定的数据结构体类型及它所占用的存储空间的空间。只是规定了一种特定的数据结构体类型及它所占用的存储空间的存储模式。存储模式。v 结构体成员可以是简单变量、数组、指针、结构或共用体等。结构体成员可以是简单变量、数组、指针、结构或共用体等。v 结构体说明可以在函数内部,也可以在函数外部。在函数内部的结构体结构体说明可以在函数内部,也可以在函数外部。在函数内部的结构体,只在函数内部可见;在函数外部说明的结构体,从说明点到源文件

12、结,只在函数内部可见;在函数外部说明的结构体,从说明点到源文件结束之间的所有函数都是可见的。一般是在源文件的开始部位对结构体进束之间的所有函数都是可见的。一般是在源文件的开始部位对结构体进行说明。行说明。v 结构体成员名可以结构体成员名可以与程序中其它变量同名与程序中其它变量同名,系统会自动识别它们,二者,系统会自动识别它们,二者不会相混。不会相混。v 结构体结构体可以嵌套使用可以嵌套使用,即一个结构体也可以成为另一个结构体的成员。,即一个结构体也可以成为另一个结构体的成员。struct student int num; char name20; char sex; int age; stru

13、ct date birthday; int mon_name4; int *year;/结构体成员是数组。结构体成员是数组。/结构体成员是数组。结构体成员是数组。/结构体成员是结构。结构体成员是结构。/结构体成员是指针。结构体成员是指针。有关结构体说明应注意以下几点:有关结构体说明应注意以下几点:21212C C C程序设计程序设计程序设计struct date int month; int day; int year; ; 定义一个定义一个struct datestruct date结构体,它代表日期结构体,它代表日期包括三个成员,包括三个成员,month(month(月

14、月) )、day(day(日日) )、year(year(年年) )。struct student int num; char name20; char sex; int age; float score; char addr30; struct date birthday; ;在定义在定义struct student struct student 结构体时,结构体时,成员成员birthdaybirthday被定义被定义struct datestruct date类型。类型。即结构体成员为结构。即结构体成员为结构。已定义的(结构)类型已定义的(结构)类型struct datestruct da

15、te与其他类型与其他类型(int (int 、char)char)一样可以用来一样可以用来定义结构体成员的类型。定义结构体成员的类型。结构体成员可以是另一结构体例结构体成员可以是另一结构体例:student12010001Li fengM1887Beijing birthdayMonthDayyear31313C C C程序设计程序设计程序设计结构体成员的引用就是对结构体成员中所存放的数据进行读取操作。结构体成员的引用就是对结构体成员中所存放的数据进行读取操作。 在对结构体成员进行引用时,只能对其成员进行直接操作,而不能对结在对结构体成员进行引用时,只能对其成员进行直接操作

16、,而不能对结构体变量整体进行操作。构体变量整体进行操作。 结构体成员引用方式:结构体成员引用方式: 用结构体成员运算符方式,即:用结构体成员运算符方式,即:结构体变量名结构体变量名 成员名成员名 。 41414C C C程序设计程序设计程序设计例:例:struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2;用结构成员运算符用结构成员运算符“.”.”引用结构体成员引用结构体成员stu1.num=20101;scanf(“%s”,);

17、stu1.sex=M;stu1.age=18;stu1.score=87.5;puts(stu2.addr);stu2.age=20;格式格式: : 结构体变量名结构体变量名. .结构体成员名结构体成员名“. .” 结构体成员运算符结构体成员运算符结构体成员运算符就表示对结构体成员的引用。结构体成员运算符就表示对结构体成员的引用。用结构成员运算符用结构成员运算符“.”.”引用结构体成员引用结构体成员51515C C C程序设计程序设计程序设计格式:格式: struct struct 结构体名结构体名 结构体变量名结构体变量名= = 初始数据初始数据 ;注意几点:注意几点:初

18、始化数据与数据之间用逗号隔开。初始化数据与数据之间用逗号隔开。初始化数据的个数要与被赋值的结构体成员的个数相等。初始化数据的个数要与被赋值的结构体成员的个数相等。初始化数据的类型要与相应的结构体成员的类型一致。初始化数据的类型要与相应的结构体成员的类型一致。不能直接在结构体成员表中对成员赋初值。不能直接在结构体成员表中对成员赋初值。结构体变量的初始化结构体变量的初始化61616C C C程序设计程序设计程序设计struct student int num; char name20; char sex; int age; float score; char addr30;;s

19、truct student stu1=20101,“Li feng”,M,18, 87,“Beijing”; struct student int num=2010001; char name20=“Li feng”; char sex=M; int age=18; float score=87; char addr30=“Beijing”; stu1,stu2; /不能直接在结构体成员表中对成员赋初值。不能直接在结构体成员表中对成员赋初值。例:例:71717C C C程序设计程序设计程序设计例例:main( ) struct student int num; char n

20、ame20; char sex; float score; char addr30; ; struct student stu1; scanf(%c,&stu1.sex); scanf(%d,&stu1.num); gets(); scanf(%f,&stu1.score); scanf(%s,stu1.addr); printf(nnum:%dn,stu1.num); printf(name:%sn,); printf(sex:%cn,stu1.sex); printf(score:%.2fn,stu1.score); printf

21、(addr:%sn,stu1.addr);M2010001Li feng87Beijingnum:2010001name:Li fengsex:Mscore:87addr:Beijing81818C C C程序设计程序设计程序设计11.5 11.5 结构体数组结构体数组1 1、定义、定义struct struct 结构体名结构体名 结构体数组名结构体数组名 元素个数元素个数 , 结构体数组名结构体数组名 元素个数元素个数, . . ., . . . ; ;例如例如: static struct student stu30; : static struct student s

22、tu30; 例中例中定义了一个结构体数组,下标定义了一个结构体数组,下标0-290-29(下标从(下标从0 0开始),开始),结构体数组元素是结构体数组元素是 stu0stu0、stu1stu1、stu2stu2、. .stu29. .stu29。 结构体数组与前面介绍的数值型数组不同之处在于每个数组元素都是结构体数组与前面介绍的数值型数组不同之处在于每个数组元素都是一个结构体类型的数据,它们分别包含各个成员项(一组数据)。一个结构体类型的数据,它们分别包含各个成员项(一组数据)。91919C C C程序设计程序设计程序设计结构体数组的初始化,就是在定义结构体数组的同时,对

23、其成员赋初值。结构体数组的初始化,就是在定义结构体数组的同时,对其成员赋初值。其格式为:其格式为: struct struct 结构体名结构体名 结构体数组名结构体数组名 元素个数元素个数= = 初始化数据初始化数据 ; 或或 struct struct 结构体名结构体名 结构体成员表;结构体成员表; 结构体数组名结构体数组名 元素个数元素个数= = 初始化数据初始化数据 ;说明:说明: 其中,结构体即其中,结构体即“struct struct 结构体名结构体名”是已被说明的结构体类型。是已被说明的结构体类型。 初始化的数据的个数与结构体数组元素的个数相同及数据类型相匹配。初始化的数据的个数与

24、结构体数组元素的个数相同及数据类型相匹配。 为了加强可读性,最好每一个数组元素的初始数据都用为了加强可读性,最好每一个数组元素的初始数据都用花括号括起来。花括号括起来。2 2、初始化、初始化02020C C C程序设计程序设计程序设计struct student int num; char name20; char sex; int age; float score; char addr30;stu30=20101,“Li feng”,M,18,87,“Beijing”, 20102,“Wang bing”,M,18,79,“Beijing”, . . . . 20130,

25、“Chen ming”,M,17,80“Beijing” ;例中给结构体变量例中给结构体变量stu0stu0、 stu1stu1、. . Stu29. . Stu29的各个成员赋初值。的各个成员赋初值。例:例:12121C C C程序设计程序设计程序设计struct student int num; char name20; char sex; int age; float score; char addr30;;struct student stu30=20101,“Li feng,”M,18,87,“Beijing”, 20102,“Wang bing”,M,18,79

26、,“Beijing”, . . . . 20130,“Chen ming,”,M,17,80,“Beijing” ;结构体数组的初始化也可用以下的形式:结构体数组的初始化也可用以下的形式:22222C C C程序设计程序设计程序设计例例: :对候选人得票的统计程序。设有对候选人得票的统计程序。设有3 3个候选人,个候选人,1010人参加选举,人参加选举,每次输入一个得票的候选人的名字,要求最后输出每人得票结果。每次输入一个得票的候选人的名字,要求最后输出每人得票结果。struct personstruct person char name20; char name20; i

27、nt count; int count; main()main()int i, j;int i, j;char leader_name20;char leader_name20;for(i=1;i=10;i+)for(i=1;i=10;i+)scanf(scanf(“%s%s”,leader_name);,leader_name); for(j=0;j3;j+) for(j=0;j3;j+)If(strcmp(leader_name,)=0) leaderj.count+;If(strcmp(leader_name,)=0) leaderj.co

28、unt+; for(i=0;i3;i+)for(i=0;i - 成员名成员名 例如例如: :struct studentstruct student int num; int num; char name20; char name20; char sex; char sex; int age; int age; float score; float score; char addr30; char addr30;stu30;stu30;struct student struct student * *pstu; pstu; pstu=stu;pstu=stu;以下引用是正确的以下引用是正确的

29、( (* *pstu).num pstu).num ( (* *pstu).name pstu).name pstu -sexpstu -sexpstu -agepstu -age2 2、通过结构体指针引用结构体成员、通过结构体指针引用结构体成员62626C C C程序设计程序设计程序设计 结构体名结构体名 . . 结构体成员名结构体成员名 (* *结构体指针名)结构体指针名). . 结构体成员名结构体成员名 结构体指针名结构体指针名 - - 结构体成员名结构体成员名例如例如: : struct datastruct data int x; int x; int y; in

30、t y; a; a; struct data struct data * *p;p; p=&a; p=&a; 用结构体名用结构体名 . . 结构体成员名引用结构体成员名引用 a.x a.x a.ya.y用(用(* *结构体指针名)结构体指针名). . 结构体成员名引用结构体成员名引用 ( (* *p).x p).x ( (* *p).y p).y 用结构体指针名用结构体指针名 - - 结构体成员名引用结构体成员名引用 p-x p-x p-yp-y结构体成员引用的三种形式结构体成员引用的三种形式: :72727C C C程序设计程序设计程序设计例如例如: :

31、struct data struct data int x; int x; int int * *y;y; a10; a10; struct data struct data * *p;p; p=&a; p=&a; 引用结构体成员引用结构体成员x x。 等效为等效为* *(p.y),(p.y),此题中无意义此题中无意义p-yp-y是一个指针是一个指针, ,* *p-yp-y是取该指针的目标。是取该指针的目标。等效为等效为+(p-x) +(p-x) 结构体成员结构体成员x x加加1 1。 引用结构体成员引用结构体成员x x之前结构体指针之前结构体指针p p加加1 1。 相当于相当

32、于* *(p-x+p-x+) 结构体成员的引用及计算结构体成员的引用及计算由于运算符由于运算符“ “ .” .” 、“ “ -”-”、“ “ ( )” ( )” 、“ ” ”的优的优先级最高,因此在应用时应注意它们使用的区别。先级最高,因此在应用时应注意它们使用的区别。( (* *p).xp).x* *p.y p.y * *p-y p-y +p-x +p-x (+p)-x (+p)-x (p+)-x(p+)-x* *p-x+ p-x+ (*p-x)+82828C C C程序设计程序设计程序设计例例 指向结构体变量指针的应用。指向结构体变量指针的应用。 #include#in

33、cludemain( ) struct student int stuno; char name20; float score; ; struct student stu97,*p; p=&stu97; p-stuno=9701; strcpy(*p).name,“Li ping”); stu97.score=95.5; printf(”n1 Student No. %dn Name: %s n Score: %fn, p-stuno,p-name,p-score); printf(n2 student No.: %d Name: %s Score: %fn, (*p).stuno,(

34、*p).name,(*p).score); 定义结构体。定义结构体。定义结构体成员。定义结构体成员。定义结构体变量和结构体指针变量。定义结构体变量和结构体指针变量。给结构体成员赋值。给结构体成员赋值。给结构体指针赋值。给结构体指针赋值。输出结构体数据。输出结构体数据。1 Student No: 9701 Name : Liping Score: 95.5000002 Student No: 9701 Name: Liping Score: 95.500000 92929C C C程序设计程序设计程序设计例:指向结构体数组指针的应用。例:指向结构体数组指针的应用。struct

35、 studentint stuno; char name20; int score; struct student st3=20001,Li ping,95, 20002,Zhang hua,93, 20003,Sun hong,98; main( ) struct student *p; printf(“Student No. Name Socre n); for(p=st;pstuno,p-name,p-score); Student No. Name Score 20001 Liping 95 20002 Zhanghua 93 20003 Sunhong 98 03

36、030C C C程序设计程序设计程序设计3 3、链表、链表struct student int data;struct student *next;一、链表概述 链表是数据在内存中的一种存储方法,是一种重要的数据结构,它根据需要动态分配存储单元。1249head1249A13561356B14751475C10211021DNull13131C C C程序设计程序设计程序设计链表的删除操作链表的删除操作P1=head;While(p1 data != a)&(p1 next !=Null)p2=p1; p1=p1 next; If (p1data = =a) if(

37、p1 = = head) head = p1 next ; else p2 next =p1 next ;1249head1249A13561356B14751475C10211021DNullp2p23232C C C程序设计程序设计程序设计链表的插入操作链表的插入操作 if (p1= =head)head=p0; p0 next=p1; ( (插入在链头插入在链头) )p2 next = p0; p0next = p1; ( (插入不在链头插入不在链头) ) p1 next =p0 ; p0 next =Null ; ( (插入链尾插入链尾) )1249head124

38、9A13561356B14751475C10211021DNullp2p1p033333C C C程序设计程序设计程序设计11.8 11.8 联合体(共用体)联合体(共用体)1 1概念概念使几个不同类型的变量占用同一段内存空间的结构称为共用型。使几个不同类型的变量占用同一段内存空间的结构称为共用型。2 2共用体类型的定义共用体类型的定义与结构类型的定义类似与结构类型的定义类似 union union 共用类型名共用类型名 成员列表成员列表;3 3共用体变量的定义共用体变量的定义与结构变量的定义类似与结构变量的定义类似(1 1)间接定义)间接定义先定义类型、再定义变量先定义类

39、型、再定义变量例如,定义例如,定义datadata共用体类型变量共用体类型变量un1,un2,un3un1,un2,un3的语句如下:的语句如下: union data un1,un2,un3union data un1,un2,un3;11.8.1 11.8.1 共用体共用体43434C C C程序设计程序设计程序设计例如,例如,union data union data int i; int i; char ch; char ch; float f; float f; un1,un2,un3; un1,un2,un3; 共用变量占用的内存空间,等于最长成员的长度,共用变

40、量占用的内存空间,等于最长成员的长度,而不是各成员长度之和。而不是各成员长度之和。例如,共用变量例如,共用变量un1un1、un2un2和和un3un3,在,在1616位操作系统位操作系统中,占用的内存空间均为字节(不是中,占用的内存空间均为字节(不是2+1+4=72+1+4=7字节)。字节)。共用变量的引用共用变量的引用与结构变量一样,也只能与结构变量一样,也只能逐个引用共用变量的成员逐个引用共用变量的成员例如,访问共用变量例如,访问共用变量un1un1各成员的格式为:各成员的格式为:un1.iun1.i、un1.chun1.ch、un1.fun1.f。(2 2)直接定义)直接定义定义类型的

41、同时定义变量定义类型的同时定义变量53535C C C程序设计程序设计程序设计(1 1)系统采用覆盖技术,实现共用变量各成员的内存共)系统采用覆盖技术,实现共用变量各成员的内存共享,所以在某一时刻,存放的和起作用的是最后一次存入的成享,所以在某一时刻,存放的和起作用的是最后一次存入的成员值。员值。例如,执行例如,执行un1.i=1, un1.ch=c, un1.f=3.14un1.i=1, un1.ch=c, un1.f=3.14后,后,un1.fun1.f才是有效的成员。才是有效的成员。(2 2)由于所有成员共享同一内存空间,故共用变量与其)由于所有成员共享同一内存空间,

42、故共用变量与其各成员的地址相同。各成员的地址相同。例如,例如,un1un1un1.iun1.iun1.chun1.chun1.fun1.f。(3 3)不能对共用变量进行初始化(注意:结构变量可)不能对共用变量进行初始化(注意:结构变量可以);也不能将共用变量作为函数参数,以及使函数返回一个以);也不能将共用变量作为函数参数,以及使函数返回一个共用数据,但可以使用指向共用变量的指针。共用数据,但可以使用指向共用变量的指针。(4 4)共用类型可以出现在结构类型定义中,反之亦然。)共用类型可以出现在结构类型定义中,反之亦然。5 5特点特点63636C C C程序设计程序设计程序设

43、计struct Tint a,b;float f;char c5;struct T t1;union Uint a,b;float f;char c5;union U u1;t1abfcStructStruct和和UnionUnion的区别的区别a (b)fcu73737C C C程序设计程序设计程序设计1 1枚举类型的定义枚举类型的定义 enum enum 枚举类型名枚举类型名 取值表取值表 ;例如,例如,enum weekday Sun,Mon,Tue,Wed,Thu,Fri,Satenum weekday Sun,Mon,Tue,Wed,Thu,Fri,Sat;枚举

44、变量的定义枚举变量的定义与结构变量类似与结构变量类似(1 1)间接定义)间接定义例如,例如,enum weekday workday;enum weekday workday;(2 2)直接定义)直接定义例如,例如,enum weekday enum weekday Sun,Mon,Tue,Wed,Thu,Fri,Sat workday; Sun,Mon,Tue,Wed,Thu,Fri,Sat workday;说明说明(1 1)枚举型仅适应于取值有限的数据。)枚举型仅适应于取值有限的数据。例如,根据现行的历法规定,周天,年例如,根据现行的历法规定,周天,年1212个月。个月。(2 2)取值表中

45、的值称为枚举元素,其含义由程序解释。)取值表中的值称为枚举元素,其含义由程序解释。例如,不是因为写成例如,不是因为写成“SunSun”就自动代表就自动代表“星期天星期天”。事实上,。事实上,枚举元素用什么表示都可以。枚举元素用什么表示都可以。11.9 11.9 枚举类型枚举类型83838C C C程序设计程序设计程序设计(3 3)枚举元素作为常量是有值的)枚举元素作为常量是有值的定义时的顺序号定义时的顺序号(从开始),所以枚举元素可以进行比较,比较规则是:序(从开始),所以枚举元素可以进行比较,比较规则是:序号大者为大!号大者为大!例如,上例中的例如,上例中的Sun=0Su

46、n=0、Mon=1Mon=1、Sat=6Sat=6,所以,所以MonSunMonSun、SatSat最大。最大。(4 4)枚举元素的值也是可以人为改变的:在定义时由程)枚举元素的值也是可以人为改变的:在定义时由程序指定。序指定。例如,如果例如,如果enum weekdaySun=enum weekdaySun=, Mon, Mon ,Tue, Wed, ,Tue, Wed, Thu, Fri, SatThu, Fri, Sat;则;则Sun=Sun=,Mon=Mon=,从,从Tue=2Tue=2开始,依次增开始,依次增。(5 5)将一个整数值赋值给枚举变量需要先进行强制类型)将一个整数值赋值给

47、枚举变量需要先进行强制类型转换:转换: workday=(enum weekday)2workday=(enum weekday)2;续93939C C C程序设计程序设计程序设计11.10 11.10 自定义类型自定义类型除可直接使用提供的标准类型和构造类型(结构、共用、枚举)除可直接使用提供的标准类型和构造类型(结构、共用、枚举)外,也可使用外,也可使用typedeftypedef定义已有类型的别名定义已有类型的别名。该别名与标准类型名一样,。该别名与标准类型名一样,可用来定义相应的变量。可用来定义相应的变量。 定义已有类型别名的方法如下:定义已有类型别名的方法如下:

48、(1 1)按定义变量的方法,写出定义体;)按定义变量的方法,写出定义体; (2 2)将变量名换成别名;)将变量名换成别名; (3 3)在定义体最前面加上)在定义体最前面加上typedeftypedef。 例:给实型例:给实型floatfloat定义定义1 1个别名个别名REALREAL。 typedef float REAL;typedef float REAL;04040C C C程序设计程序设计程序设计13 语言文件概述语言文件概述 文件的打开与关闭文件的打开与关闭 文件的读写操作文件的读写操作 位置指针与文件定位位置指针与文件定位 出错检测出错检测 在程序运行时,程序

49、本身和数据一般在程序运行时,程序本身和数据一般都存放在内存中。当程序运行结束后,存都存放在内存中。当程序运行结束后,存放在内存中的数据被释放。放在内存中的数据被释放。 如果需要长期保存程序运行所需的原如果需要长期保存程序运行所需的原始数据,或程序运行产生的结果,就必须始数据,或程序运行产生的结果,就必须以文件形式存储到外部存储介质上。以文件形式存储到外部存储介质上。14141C C C程序设计程序设计程序设计13.1 13.1 语言文件概述语言文件概述 1 1文件与文件名文件与文件名文件是指存放在外部存储介质上的数据集合。文件是指存放在外部存储介质上的数据集合。为标识一个文

50、件,每个文件都必须有一个文件名,其一般为标识一个文件,每个文件都必须有一个文件名,其一般结构为:结构为:主文件名主文件名.扩展名扩展名 文件命名规则,遵循操作系统的约定。文件命名规则,遵循操作系统的约定。24242C C C程序设计程序设计程序设计2 2文件分类文件分类可以从不同的角度对文件进行分类:可以从不同的角度对文件进行分类:(1 1)根据文件的内容,可分为)根据文件的内容,可分为程序文件和数据文件程序文件和数据文件,程序,程序文件又可分为源文件、目标文件和可执行文件。文件又可分为源文件、目标文件和可执行文件。(2 2)根据文件的组织形式,可分为)根据文件的组织形式,

51、可分为顺序存取文件和随机存顺序存取文件和随机存取取文件。文件。(3 3)根据文件的存储形式)根据文件的存储形式,可分为,可分为ASCIIASCII码文件和二进制码文件和二进制文件。文件。 ASCIIASCII码文件的每码文件的每1 1个字节存储个字节存储1 1个字符,因而便于对字符个字符,因而便于对字符进行逐个处理。但一般占用存储空间较多,而且要花费转进行逐个处理。但一般占用存储空间较多,而且要花费转换时间(二进制与换时间(二进制与ASCIIASCII码之间的转换)。码之间的转换)。二进制文件是把内存中的数据,原样输出到磁盘文件中。二进制文件是把内存中的数据,原样输出到磁盘文件中。可以节省存储

52、空间和转换时间,但可以节省存储空间和转换时间,但1 1个字节并不对应个字节并不对应1 1个字个字符,不能直接输出字符形式。符,不能直接输出字符形式。34343C C C程序设计程序设计程序设计3 3读文件与写文件读文件与写文件所谓读文件读文件是指,将磁盘文件中的数据传送到计算机内存的操作。所谓写文件写文件是指,从计算机内存向磁盘文件中传送数据的操作。 4 4构成文件的基本单元与流式文件构成文件的基本单元与流式文件语言将文件看作是由一个一个的字符(ASCII码文件)或字节(二进制文件)组成的。将这种文件称为流式文件。而在其它高级语言中,组成文件的基本单位是记录,对文件操作的基

53、本单位也是记录。5 5文件类型文件类型FILEFILE系统给每个打开的文件都在内存中开辟一个区域,用于存放文件的有关信息(如文件名、文件位置等)。这些信息保存在一个结构类型变量中,该结构类型由系统定义、取名为FILE。注意注意:结构类型名“FILE”必须大写。44444C C C程序设计程序设计程序设计6 6ANSI CANSI C的缓冲文件系统的缓冲文件系统 所谓所谓缓冲文件系统缓冲文件系统是指,系统自动地在内存区为每个正在是指,系统自动地在内存区为每个正在使用的文件开辟一个缓冲区。使用的文件开辟一个缓冲区。 从内存向磁盘输出数据时,必须首先输出到缓冲区中。待从内存向磁盘

54、输出数据时,必须首先输出到缓冲区中。待缓冲区装满后,再一起输出到磁盘文件中。缓冲区装满后,再一起输出到磁盘文件中。 从磁盘文件向内存读入数据时,则正好相反:首先将一批从磁盘文件向内存读入数据时,则正好相反:首先将一批数据读入到缓冲区中,再从缓冲区中将数据逐个送到程序数据数据读入到缓冲区中,再从缓冲区中将数据逐个送到程序数据区。区。54545C C C程序设计程序设计程序设计7 7、文件类型指针、文件类型指针 在语言中用一个指针变量指向一个文件,这个指针称为文件指针。在语言中用一个指针变量指向一个文件,这个指针称为文件指针。通过文件指针就可对它所指的文件进行各种操作。通过文件

55、指针就可对它所指的文件进行各种操作。定义说明文件指针的一般形式为:定义说明文件指针的一般形式为: FILE FILE * *指针变量标识符;指针变量标识符; 其中其中FILEFILE应为应为大写大写,它实际上是由系统定义的一个结构,该结构,它实际上是由系统定义的一个结构,该结构中含有文件名、文件状态和文件当前位置等信息。中含有文件名、文件状态和文件当前位置等信息。 在编写源程序时不必关心在编写源程序时不必关心FILEFILE结构的细节。结构的细节。例如:例如: FILE FILE * *fpfp; 表示表示fpfp是指向是指向FILEFILE结构的指针变量,通过结构的指针变量,通过fpfp即可

56、找存放某个文件即可找存放某个文件信息的结构变量,然后按结构变量提供的信息找到该文件,实施对文信息的结构变量,然后按结构变量提供的信息找到该文件,实施对文件的操作。件的操作。 习惯上也笼统地把习惯上也笼统地把fpfp称为指向一个文件的指针。称为指向一个文件的指针。64646C C C程序设计程序设计程序设计13.2 13.2 文件的打开与关闭文件的打开与关闭对文件进行操作之前,必须先打开该文件;使用结束后,应立对文件进行操作之前,必须先打开该文件;使用结束后,应立即关闭,以免数据丢失。即关闭,以免数据丢失。语言规定了标准输入输出函数库,用语言规定了标准输入输出函数库,用fop

57、en()fopen()函数打开一个文函数打开一个文件,用件,用fclose()fclose()函数关闭一个文件。函数关闭一个文件。 10.2.1 10.2.1 文件的打开文件的打开fopen()fopen()函数函数 1 1函数原型:函数原型:FILE FILE * *fopen(fopen(文件名文件名 , 操作方式操作方式);); 2 2功能:返回一个指向指定文件的指针。功能:返回一个指向指定文件的指针。 3 3函数原型:函数原型:stdio.h stdio.h 。注:对文件操作的库函数,函数原型均在头文件注:对文件操作的库函数,函数原型均在头文件stdio.hstdio.h中。后中。后续

58、函数不再赘述。续函数不再赘述。 4.4.用法用法(1 1)“文件名文件名”是指要打开(或创建)的文件名。如果使用字是指要打开(或创建)的文件名。如果使用字符数组(或字符指针),则不使用双引号。符数组(或字符指针),则不使用双引号。(2 2)“操作方式操作方式”如表如表13.113.1(P312)(P312)所示。所示。例如,例如,FILE FILE * *fp; fp; fp fpfopen(fopen(“a1.data1.dat,r)r);74747C C C程序设计程序设计程序设计5.5.说明说明: :(1 1)如果不能实现打开指定文件的操作,则)如果不能实现打开指定文

59、件的操作,则fopen()fopen()函数返回一个空指针函数返回一个空指针NULL NULL (其值在头文件(其值在头文件stdio.hstdio.h中被定义为)。中被定义为)。 为增强程序的可靠性,常用下面的方法打开一个文件:为增强程序的可靠性,常用下面的方法打开一个文件:if(fp=fopen(if(fp=fopen(文件名文件名,操作方式操作方式)=NULL)=NULL) printf(can not open this filen); printf(can not open this filen); exit(0); exit(0); 关于关于exit()exit()函数函数: :

60、1 1)用法:)用法:void exit(void exit(程序状态值程序状态值);); 2 2)功能:关闭已打开的所有文件,结束程序运行,返回操作系统,)功能:关闭已打开的所有文件,结束程序运行,返回操作系统,并将并将“程序状态值程序状态值”返回给操作系统。当返回给操作系统。当“程序状态值程序状态值”为时,表示程为时,表示程序正常退出;非值时,表示程序出错退出。序正常退出;非值时,表示程序出错退出。(2 2)“r r(b b)+ +”与与“a a(b b)+ +”的区别:使用前者打开文件时,读写位置的区别:使用前者打开文件时,读写位置指针指向文件头;使用后者时,读写指针指向文件尾。指针指向文件头;使用后者时,读写指针指向文件尾。(3 3)使用文本文件向计

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论