《结构体与共用体》PPT课件.ppt

上传人:za****8 文档编号:17134570 上传时间:2020-11-10 格式:PPT 页数:101 大小:2.52MB
收藏 版权申诉 举报 下载
《结构体与共用体》PPT课件.ppt_第1页
第1页 / 共101页
《结构体与共用体》PPT课件.ppt_第2页
第2页 / 共101页
《结构体与共用体》PPT课件.ppt_第3页
第3页 / 共101页
资源描述:

《《结构体与共用体》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《结构体与共用体》PPT课件.ppt(101页珍藏版)》请在装配图网上搜索。

1、第 11章 使用结构体类型 处理组合数据 -用户自定义数据类型 C语言提供了一些由系统已定义好的数据类型,如: 整型、实型、字符型、指针等类型, C语言 还 允许用 户根据需要自己建立数据类型,用它来定义变量。 11.1 定义和使用结构体变量 11.2 结构体数组 11.3 结构体指针 11.4 用结构体变量和结构体变量的指针 作函数参数 11.5 用指针处理链表 11.6 提高部分 11.1 定义和使用结构体变量 11.1.1 自己建立结构体类型 11.1.2 定义结构体类型变量 11.1.3 结构体变量的初始化和引用 11.1.1 自己建立结构体类型 用户自己建立由不同类型数据组成的组 合

2、型的数据结构,它称为 结构体 例如,一个学生的学号、姓名、性别、 年龄、成绩、家庭地址等项,是属于同 一个学生的 ,因此 组成一个组合数据, 如 student_1的变量,反映它们之间的内 在联系 struct student int num; char name20; char sex; int age; float score; char addr30; ; 由程序设计者指定了 一个结构体类型 struct student 它包括 num,name,sex,age, score,addr等不同类 型的成员 声明一个结构体类型的一般形式为: struct 结构体名 成员表列 ; 类型名 成员

3、名 ; 说明: (1)结构体类型并非只有一种,而是可以设计出许多种结 构体类型,例如 struct teacher struct worker struct date等结构体类型 各自包含不同的成员 说明: (2) 成员可以属于另一个结构体类型。 struct date int month; int day; int year; ; struct student int num;char name20; char sex; int age; struct date birthday; char addr30; ; 说明: (2) 成员可以属于另一个结构体类型。 num name sex age

4、 birthday addr month day year 11.1.2 定义结构体类型变量 前面只是建立了一个结构体类型,它相 当于一个模型,并没有定义变量,其中 并无具体数据,系统对之也不分配存储 单元。 为了能在程序中使用结构体类型的数据 ,应当定义结构体类型的变量,并在其 中存放具体的数据。 1. 先声明结构体类型,再定义该类型变量 声明结构体类型 struct student, 可以用它 来定义变量 struct student student1,student2; 结构体类型名 结构体变量名 1. 先声明结构体类型,再定义该类型变量 声明结构体类型 struct student,

5、可以用它 来定义变量 struct student student1,student2; 10001 Zhang Xin M 19 90.5 Shanghai student1 10002 Wang Li F 20 98 Beijing student2 2.在声明类型的同时定义变量 struct student int num; char name20; char sex; int age; float score; char addr30; student1,student2; 3. 不指定类型名而直接定义结构体类型变量 其一般形式为 : struct 成员表列 变量名表列 ; 指定了一个

6、无名的结构体类型 。 说明: (1) 结构体类型与结构体变量是不同的概念 ,不要混同。只能对变量赋值、存取或 运算,而不能对一个类型赋值、存取或 运算。在编译时,对类型是不分配空间 的,只对变量分配空间。 (2) 结构体类型中的成员名可以与程序中的 变量名相同 , 但二者不代表同一对象。 (3) 对结构体变量中的成员(即“域”), 可以单独使用,它的作用与地位相当于普 通变量。 11.1.3 结构体变量的初始化和引用 例 11.1 把一个学生的信息放在一个结构体变量中, 然后输出这个学生的信息。 解题思路: 先在程序中自己建立一个结构体类型,包括有关学生 信息的各成员 然后用它来定义结构体变量

7、,同时赋以初值 最后输出该结构体变量的各成员 #include void main() struct student int num; char name20; char sex; char addr20; -student1=,10101,“Li Lin”,M, “123 Beijing Road”-; printf(NO.:%dnname:%sn sex:%cnaddress:%sn, student1.num, student1.name, student1.sex, student1.addr); #include void main() struct student int num;

8、 char name20; char sex; char addr20; -student1=,10101,“Li Lin”,M, “123 Beijing Road”-; printf(NO.:%dnname:%sn sex:%cnaddress:%sn, student1.num, student1.name, student1.sex, student1.addr); #include void main() struct student int num; char name20; char sex; char addr20; -student1=,10101,“Li Lin”,M, “

9、123 Beijing Road”-; student1.num=10010; 对 printf(“%sn”,student1); 不对 #include void main() struct student int num; char name20; char sex; char addr20; -student1=,10101,“Li Lin”,M, “123 Beijing Road”-; struct date birthday; student1.num=10010; 对 student1.birthday.month=11; 对 #include void main() struc

10、t student int num; char name20; char sex; char addr20; -student1=,10101,“Li Lin”,M, “123 Beijing Road”-; student2.num=student1.num; 对 sum=student1.num+student2.num; 对 student1.num+; 对 ,student2; #include void main() struct student int num; char name20; char sex; char addr20; -student1=,10101,“Li Lin

11、”,M, “123 Beijing Road”-; student2=student1; 对 ,student2; scanf(“%d”, 对 例 11.2 输入两个学生的学号、姓名和成绩,输出成绩 较高学生的学号、姓名和成绩 解题思路: (1)定义两个结构相同的结构体变量 student1和 student2; (2)分别输入两个学生的学号、姓名和成绩; (3)比较两个学生的成绩,如果学生 1的成绩高于学生 2, 就输出学生 1的全部信息,如果学生 2的成绩高于学生 1, 就输出学生 2的全部信息。如果二者相等,输出 2个学生 的全部信息 #include void main() struc

12、t student int num; char name20; float score; student1,student2; scanf(%d%s%f, scanf(“%d%s%f”, 不能加 if (student1.scorestudent2.score) printf(%d %s %6.2fn,student1.num, student1.name,student1.score); else if (student1.scorestudent2.score) printf(%d %s %6.2fn,student2.num, student2.name,student2.score);

13、 else printf(%d %s %6.2fn,student1.num, student1.name, student1.score); printf(%d %s %6.2fn,student2.num, student2.name,student2.score); 11.2 结构体数组 例 11.3 有 3个候选人,每个选民只能投 票选一人,要求编一个统计选票的程 序,先后输入被选人的名字,最后输 出各人得票结果。 解题思路: 设一个结构体数组,数组中包含 3个元素 每个元素中的信息应包括候选人的姓名 ( 字符型 )和得票数 (整型 ) 输入被选人的姓名,然后与数组元素中的 “姓名”成

14、员比较,如果相同,就给这个 元素中的“得票数”成员的值加 1 输出所有元素的信息 #include #include struct person char name20; int count; leader3=“Li”,0,“Zhang”,0,“Sun”,0; 全局的结构体数组 name count leader0 Li 0 Zhang 0 Sun 0 void main() int i,j; char leader_name20; for (i=1;i=10;i+) , scanf(“%s”,leader_name); for(j=0;j3;j+) if(strcmp(leader_name

15、, leaderj.name)=0) leaderj.count+; for(i=0;i3;i+) printf(%5s:%dn“,leader*i+.name, leaderi.count); leaderj.count=leaderj.count+1; void main() int i,j; char leader_name20; for (i=1;i=10;i+) , scanf(“%s”,leader_name); for(j=0;j3;j+) if(strcmp(leader_name, leaderj.name)=0) leaderj.count+; for(i=0;i3;i+)

16、 printf(%5s:%dn“,leader*i+.name, leaderi.count); 说明: (1)定义结构体数组一般形式是 struct 结构体名 成员表列 数组名 数组长度 ; 先声明一个结构体类型,然后再用此类型定义结构体 数组: 结构体类型 数组名 数组长度 ; 如: struct person leader3; 说明: (2)对结构体数组初始化的形式是在定义数组的后面加上: =初值表列 ; 如: struct person leader*3+= ,Li,0,Zhang,0,“Sun,0-; 例 11.4 有 n个学生的信息 (包括学号、姓 名、成绩 ),要求按照成绩的高低

17、顺序 输出各学生的信息。 解题思路:用结构体数组存放 n个学生 信息,采用选择法对各元素进行排序 ( 进行比较的是各元素中的成绩 )。 #include #define N 5 struct student int num; char name20; float score; ; void main() struct student stuN =10101,Zhang,78 , 10103,Wang,98.5, ,10106,Li“,86-, ,10108,“Ling”, 73.5-, ,10110,“Sun”, 100- -; struct student temp; int i,j,k;

18、printf(The order is:n); for(i=0;iN-1;i+) k=i; for(j=i+1;jstuk.score) k=j; temp=stuk; stuk=stui; stui=temp; for(i=0;iN;i+) printf(%6d %8s %6.2fn, stui.num,stui.name,stui.score); printf(n); 写法上与普通变量一致 11.3 结构体指针 指向 结构体 对象 的指针变量既可以指向 结 构体变量 ,也可以用来指向 结构体数组中 的元素 。但是,指针变量的基类型必须与 结构体变量的类型相同。例如: struct stud

19、ent *pt; 例 11.5 通过指向结构体变量的指针变量 输出结构体变量中成员的信息。 解题思路:在已有的基础上,本题要解 决两个问题: 怎样对结构体变量成员赋值; 怎样通过指向结构体变量的指针访问结构 体变量中成员。 #include #include void main() struct student long num; char name20; char sex; float score; ; struct student stu_1; struct student * p; p= stu_1.num=10101; strcpy(stu_1.name,“Li Lin”); stu_

20、1.sex=M; stu_1.score=89.5; printf(No.:%ldn”,stu_1.num); printf(name:%sn,stu_1.name); printf(sex:%cn”,stu_1.sex); printf(”score:%5.1fn”,stu_1.score); stu_1 10101 Li Lin M 89.5 p struct student stu_1; struct student * p; p= stu_1.num=10101; strcpy(stu_1.name,“Li Lin”); stu_1.sex=M; stu_1.score=89.5; p

21、rintf(No.:%ldn”,stu_1.num); printf(name:%sn,stu_1.name); printf(sex:%cn”,stu_1.sex); printf(”score:%5.1fn”,stu_1.score); stu_1 10101 Li Lin M 89.5 p (*p).num (*p).name (*p).sex (*p).score 说明: 为了使用方便和直观,允许把 (*p).num用 p-num来代替 (*p).name等价于 p-name 如果 p指向一个结构体变量 stu,以下等价: stu.成员名 (如 stu.num) (*p).成员名 (如

22、 (*p).num) p-成员名 (如 p-num) 例 11.6 有 3个学生的信息,放在结构体 数组中,要求输出全部学生的信息。 解题思路:用指向结构体变量的指针处理 (1)声明 struct student,并定义结构体数组 、 初 始化 (2)定义指向 struct student类型指针 p (3)使 p指向数组首元素,输出元素中 各 信息 (4)使 p指向下一个元素,输出元素中 各 信息 (5)再使 p指向结构体数组的下一个元素,输出 它指向的元素中的有关信息 #include struct student int num; char name20; char sex; int a

23、ge; ; struct student stu3= 10101,Li Lin,M,18, 10102,Zhang Fun,M,19, 10104,Wang Min,F,20 ; void main() struct student *p; printf( No. Name sex agen); for(p=stu;pnum, p-name, p-sex, p-age); 10101 Li Lin M 18 10102 Zhang Fang M 19 10104 Wang Min F 20 stu0 stu1 stu2 void main() struct student *p; printf

24、( No. Name sex agen); for(p=stu;pnum, p-name, p-sex, p-age); 10101 Li Lin M 18 10102 Zhang Fang M 19 10104 Wang Min F 20 p stu0 stu1 stu2 void main() struct student *p; printf( No. Name sex agen); for(p=stu;pnum, p-name, p-sex, p-age); 10101 Li Lin M 18 10102 Zhang Fang M 19 10104 Wang Min F 20 p st

25、u0 stu1 stu2 void main() struct student *p; printf( No. Name sex agen); for(p=stu;pnum, p-name, p-sex, p-age); 10101 Li Lin M 18 10102 Zhang Fang M 19 10104 Wang Min F 20 p stu0 stu1 stu2 11.4 用结构体变量和结构体 变量的指针作函数参数 将一个结构体变量的值传递给另一个函 数,有 3个方法 。 (1) 用结构体变量的成员作参数。 例如,用 stu1.num或 stu2.name作函数实参,将实参值 传给形

26、参。 用法和用普通变量作实参是一样的,属于“值传递”方 式。 应当注意实参与形参的类型保持一致。 (2) 用结构体变量作实参。 用结构体变量作实参时,将结构体变量所占的内存单元 的内容全部按顺序传递给形参,形参也必须是同类型的 结构体变量 在函数调用期间形参也要占用内存单元。这种传递方式 在空间和时间上开销较大 在被调用函数期间改变形参(也是结构体变量)的值, 不能返回主调函数 一般较少用这种方法 (3)用指向结构体变量(或数组元素)的指针作实参, 将结构体变量(或数组元素)的地址传给形参。 例 11.7 有 N个结构体变量 stu,内含学生学号、姓名 和 3门课程的成绩。要求输出平均成绩最高

27、的学生 的信息 (包括学号、姓名、 3门课程成绩和平均成绩 )。 解题思路:按照功能函数化的思想,分别用 3个函数 来实现不同的功能: 用 input函数输入数据和求各学生平均成绩 用 max函数找平均成绩最高的学生 用 print函数输出成绩最高学生的信息 在主函数中先后调用这 3个函数,用指向结构体变量的 指针作实参。最后得到结果。 本程序 假设 N=3 #include #define N 3 struct student int num; char name20; float score3; float aver; ; 4个成员 输入前 3个成员值 计算最后成员值 void main(

28、) void input(struct student stu); struct student max(struct student stu); void print(struct student stu); struct student stuN,*p=stu; input(p); print(max(p); void input(struct student stu) int i; printf(请输入各学生的信息: 学号、姓名、三门课成绩 :n); for(i=0;iN;i+) scanf(%d %s %f %f %f, stui.aver=(stui.score0+ stui.sco

29、re1+stui.score2)/3.0; 输入第 1个成员值 输入第 2个成员值 输入第 3个成员值 计算第 4个成员值 stu0 stu1 stu2 stu 10101 Li 78 89 98 88.33 i=0 void input(struct student stu) int i; printf(请输入各学生的信息: 学号、姓名、三门课成绩 :n); for(i=0;iN;i+) scanf(%d %s %f %f %f, stui.aver=(stui.score0+ stui.score1+stui.score2)/3.0; 输入第 1个成员值 输入第 2个成员值 输入第 3个成

30、员值 计算第 4个成员值 stu0 stu1 stu2 stu 10101 Li 78 89 98 88.33 10103 Wang 98.5 87 69 84.83 i=1 void input(struct student stu) int i; printf(请输入各学生的信息: 学号、姓名、三门课成绩 :n); for(i=0;iN;i+) scanf(%d %s %f %f %f, stui.aver=(stui.score0+ stui.score1+stui.score2)/3.0; 输入第 1个成员值 输入第 2个成员值 输入第 3个成员值 计算第 4个成员值 stu0 stu

31、1 stu2 stu 10101 Li 78 89 98 88.33 10103 Wang 98.5 87 69 84.83 10106 Sun 88 76.5 89 84.5 i=2 struct student max(struct student stu) int i,m=0; for(i=0;istum.aver) m=i; return stum; stu0 stu1 stu2 stu 10101 Li 78 89 98 88.33 10103 Wang 98.5 87 69 84.83 10106 Sun 88 76.5 89 84.5 最大 返回 void print(struc

32、t student stud) printf(n成绩最高的学生是 :n); printf(学号 :%dn姓名 :%sn 三门课成绩 :%5.1f,%5.1f,%5.1fn 平均成绩 :%6.2fn”, stud.num, stud.name,stud.score0, stud.score1,stud.score2,stud.aver); stud 10101 Li 78 89 98 88.33 10103 Wang 98.5 87 69 84.83 10106 Sun 88 76.5 89 84.5 num name score aver stu0 stu1 stu2 以上 3个函数的调用,情

33、况各不相同: 调用 input函数时,实参是指针变量,形参是结构体数 组,传递的是结构体元素的地址,函数无返回值。 调用 max函数时,实参是指针变量,形参是结构体数组, 传递的是结构体元素的地址,函数的返回值是结构体类 型数据。 调用 print函数时,实参是结构体变量,形参是结构体变 量,传递的是结构体变量中各成员的值,函数无返回值。 11.5 用指针处理链表 11.5.1 什么是线性链表 11.5.2 建立简单的静态链表 11.5.3 建立动态链表 11.5.1 什么是线性链表 链表是一种常见的重要的数据结构 它是动态地进行存储分配的一种结构 head 1249 1249 A 1356

34、1356 1475 B 1475 C 1021 1021 D 0 头指针 各结点地址不连续 各结点含有两个部分 表尾 链表是一种常见的重要的数据结构 它是动态地进行存储分配的一种结构 链表必须利用指针变量才能实现 struct student int num; float score; struct student *next; a,b,c; 10101 89.5 10103 90 10107 85 a结点 b结点 c结点 a.next= b.next= num score next 11.5.2 建立简单的静态链表 例 11.8 建立一个如图所示的简单链表, 它由 3个学生数据的结点组成,要

35、求输 出各结点中的数据。 10101 89.5 10103 90 10107 85 a结点 b结点 c结点 num score next 解题思路: 10101 89.5 10103 90 10107 85 a结点 b结点 c结点 num score next head head= a.next= b.next= NULL c.next=NULL; #include struct student int num; float score; struct student *next; ; void main() struct student a,b,c,*head,*p; a. num=1010

36、1; a.score=89.5; b. num=10103; b.score=90; c. num=10107; c.score=85; head= a.next= b.next= c.next=NULL; p=head; do ,printf(“%ld%5.1fn”,p-num,p-score); p=p-next; while(p!=NULL); p=head; do ,printf(“%ld%5.1fn”,p-num,p-score); p=p-next; while(p!=NULL); 10101 89.5 10103 90 10107 85 a结点 b结点 c结点 num score

37、 next head NULL p 相当于 p= p=head; do ,printf(“%ld%5.1fn”,p-num,p-score); p=p-next; while(p!=NULL); 10101 89.5 10103 90 10107 85 a结点 b结点 c结点 num score next head NULL p 相当于 p= p=head; do ,printf(“%ld%5.1fn”,p-num,p-score); p=p-next; while(p!=NULL); 10101 89.5 10103 90 10107 85 a结点 b结点 c结点 num score nex

38、t head NULL p 相当于 p= p=head; do ,printf(“%ld%5.1fn”,p-num,p-score); p=p-next; while(p!=NULL); 10101 89.5 10103 90 10107 85 a结点 b结点 c结点 num score next head NULL p 相当于 p= p=head; do ,printf(“%ld%5.1fn”,p-num,p-score); p=p-next; while(p!=NULL); 10101 89.5 10103 90 10107 85 a结点 b结点 c结点 num score next he

39、ad NULL p 相当于 p=NULL; 静态链表 11.5.3 建立动态链表 所谓建立动态链表是指在程序执行过 程中从无到有地建立起一个链表,即 一个一个地开辟结点和输入各结点数 据,并建立起前后相链的关系。 例 11.9 建立一个有 2名学生学号和成绩数 据的单向动态链表。 解题思路: 定义结构体变量,其成员包括学号、成绩和 指针变量。 动态地开辟一个新单元 (动态开辟内存单元 用 malloc函数 )。使指针变量 p和 head指向此结 点。 向此结点输入数据。 例 11.9 建立一个有 2名学生学号和成绩数 据的单向动态链表。 解题思路: 再开辟第 2个新结点,并使指针变量 p指向此

40、 结点。 使第 2个结点中的指针变量的值为 NULL,即 不指向任何对象,链表到此为止。 输出两个结点中的数据。 #include #include #define LEN sizeof(struct student) struct student int num; float score; struct student *next; ; struct student类型数据的长度 void main() struct student *head,*p; head=p=(struct student*) malloc(LEN); scanf(“%d,%f”, p=(struct student

41、*) malloc(LEN); head p 10101 89.5 void main() struct student *head,*p; head=p=(struct student*) malloc(LEN); scanf(“%d,%f”, p=(struct student*) malloc(LEN); scanf(“%d,%f”, head-next=p; p=head; head 10101 89.5 p 10102 90 p-next=NULL; NULL void main() struct student *head,*p; head=p=(struct student*)

42、malloc(LEN); scanf(“%d,%f”, p=(struct student*) malloc(LEN); scanf(“%d,%f”, head-next=p; p=head; head 10101 89.5 p 10102 90 p-next=NULL; NULL void main() struct student *head,*p; head=p=(struct student*) malloc(LEN); scanf(“%d,%f”, p=(struct student*) malloc(LEN); scanf(“%d,%f”, head-next=p; p-next=

43、NULL; p=head; printf(“结点 1:%d,%6.2fn”, p-num,p-score); p=p-next; 10101 89.5 p 10102 90 NULL 结点 1: 10101, 89.50 void main() struct student *head,*p; head=p=(struct student*) malloc(LEN); scanf(“%d,%f”, p=(struct student*) malloc(LEN); scanf(“%d,%f”, head-next=p; p-next=NULL; p=head; printf(“结点 1:%d,%

44、6.2fn”, p-num,p-score); p=p-next; printf(“结点 2:%d,%6.2fn”, p-num,p-score); 10101 89.5 p 10102 90 NULL 结点 1: 10101, 89.50 结点 2: 10102, 90.00 单链表的结构: struct student int num; float score; struct student *next; ; 要点: 1、链表中的元素在内存中存放顺序是不连续的。 由 next指针来连接各 结 点。 2、链表数据结构的实现 ,必须利用指针变量 . head num score next nu

45、m score next num score NULL . 结点 建立含 n个节点的 链表过程 : malloc() malloc() head num score next num score next num score NULL . struct student *creat( ) struct student *head,*p1,*p2; n=0;head=NULL; p1=p2=(struct student *)(malloc(sizeof(struct student); scanf(“%ld,%f”, while(p1-num!=0) n=n+1; if(n= =1) head

46、=p1; else p2-next=p1; p2=p1; p1=(struct student *)(malloc(sizeof(struct student); scanf(“%ld,%f”, p2-next=NULL; return(head); 11.6 提高部分 11.6.1 共用体类型 11.6.2 枚举类型 11.6.3 自定义类型 11.6.1 共用体类型 有时想用同一段内存单元存放不同类 型的变量。 使几个不同的变量共享同一段内存的 结构,称为 “共用体”类型的结构。 1000 1001 1002 1003 字符 ch 整 型 变 量 i 实 型 变 量 f 定义共用体类型变量

47、的一般形式为: union 变量表列; 例如: union data int i; char ch; float f; a,b,c; union data int i; char ch; float f; ; union data a,b,c; “共用体”与“结构体”的定义形式相似 , 但它们的 含义是不同的。 结构体变量所占内存长度是各成员占的内存长度之和 , 每个成员分别占有其自己的内存单元。而共用体变量 所占的内存长度等于最长的成员的长度。 只有先定义了共用体变量才能引用它, 但应注意,不能引用共用体变量,而只 能引用共用体变量中的成员。 例如,前面定义了 a,b,c为共用体变量, 下面

48、的引用方式是正确的: a.i a.ch a.f 例 :已知字符“ 0”的 ASCII码为十六进制的 30,下面程序的输出为 : main() union 运行结果: 9 unsigned char c; unsigned int i4; z; z.i0=0 x39; z.i1=0 x36; printf(“%cn”,z.c); 00110110 00000000 i1 ? . i2 00111001 00000000 i0 c的地址 i0的低位地址 例 11_8:下列程序的运行结果是什么 ? main() union zj int a; char ch 2; au; au.a 298; pri

49、ntf( dn dn,au.ch 0 ,au.ch 1 ); 运行结果为: 42,1 11.6.2 枚举类型 如果一个变量只有几种可能的值,则可 以定义为枚举类型 所谓“ 枚举 ”就是指把可能的值一一列 举出来,变量的值只限于列举出来的值 的范围内 声明枚举类型用 enum开头。 例如: enum Weekdaysun,mon,tue, wed,thu,fri,sat; 声明了一个枚举类型 enum Weekday 然后可以用此类型来定义变量 enum Weekday workday,week_end; 枚举 元素 枚举 变量 workday=mon; 正确 week_end=sun; 正确

50、也可以直接定义枚举变量,例如: enumsun,mon,tue,wed,thu, fri,satworkday,week_end; 其中 sun、 mon、 、 sat称为枚举元素 或枚举常量 , 它们是用户定义的标识 符。 例:编写程序,功能是输入当天是星期几,就可以计算并输出 n 天后是星期几。例如,今天是星期六,若求 3天后是星期几, 则输入 6, 3,即输出 “ 3天后是星期 2”。 enum week sun, mon, tue, wed, thu, fri, sat; enum week nd(enum week w, int n) return(enum week)(int)w

51、n) 7); main() enum week w0, wn; int n; scanf( d, d, w0, n); wn nd(w0, n); if(wn 0) printf( d天后是星期日 n, n); else printf( d天后是星期 dn, wn); 一、含义: 使用 typedef可以说明一个新的类型标识符。 二、定义方法: typedef 类型名 标识符 三、要点: 1、“类型名”为已有定义的类型标识符; “ 标识符”为用户定义的新标识符 2、经 typedef说明后的标识符可作为原数据类型名使用 四、 应用: typedef struct student int i; . REC; REC x,y,*p; typedef struct int month; int day; int year; DATE; DATE birthday,*p; typedef struct int _fd; int _cleft; int _mode; char *_nextc; char *_buff; FILE; FILE *fp;

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!