制作程世杰哈理工计算中心

上传人:cn****1 文档编号:568485375 上传时间:2024-07-24 格式:PPT 页数:51 大小:944.50KB
返回 下载 相关 举报
制作程世杰哈理工计算中心_第1页
第1页 / 共51页
制作程世杰哈理工计算中心_第2页
第2页 / 共51页
制作程世杰哈理工计算中心_第3页
第3页 / 共51页
制作程世杰哈理工计算中心_第4页
第4页 / 共51页
制作程世杰哈理工计算中心_第5页
第5页 / 共51页
点击查看更多>>
资源描述

《制作程世杰哈理工计算中心》由会员分享,可在线阅读,更多相关《制作程世杰哈理工计算中心(51页珍藏版)》请在金锄头文库上搜索。

1、制作:程世杰哈理工 计算中心Chengsjhrbust.edu 结构体的定义及引用结构体数组结构体与指针用指针处理链表共用体的概念枚举类型用typedef定义类型重 点结构体难 点结构体类型链 表结 构 体如一个学生的信息如一个学生的信息:学号学号、姓名、性别、年龄、成绩、地址等姓名、性别、年龄、成绩、地址等numnamesexagescoreaddr5001ZhoujielunM1996.5Harbinint num;char name20;char sex;int age;float score;char addr30;语言提供了这种数据结构:允许用户将不同类型的数允许用户将不同类型的数据

2、组合成一个有机的整体,这据组合成一个有机的整体,这些数据互相联系些数据互相联系;这种数据结构称为结构体结构体(structure)。一一. 定义一个结构体类型:定义一个结构体类型:struct 结构体类型标识符结构体类型标识符 类型标识符类型标识符1 1成员名成员名1 1; 类型标识符类型标识符2 2成员名成员名2 2; 类型标识符类型标识符n n成员名成员名n n;成成员员表表列列struct student int num; char name20; char sex; int age; float score; char addr30;;每个成员也叫结构体中的一个域结构体类型名定义一个反

3、映学生根本情况的结构类型,用以存储学生的相关信息。定义一个反映学生根本情况的结构类型,用以存储学生的相关信息。struct date /*日期结构类型:由年、月、日三项组成*/ int year; int month; int day; ;struct date int year,month,day; ;struct score/*成绩结构类型: 共4项组成*/ char no7; int score1; int score2; int score3; ; 定义一个结构体m,含三个不同类型的成员struct m int x; float y; char z; ;二二. . 定义结构体变量定义结

4、构体变量struct student int num; char name20; float score;;struct student y;struct 结构体类型标识符结构体类型标识符变量名列表变量名列表;int x; 结构体变量定义的三种方法结构体变量定义的三种方法、先定义结构体类型再定义变量名先定义结构体类型再定义变量名struct student int num; char name20; float score;;struct student stu1,stu2;结构体类型名结构体类型名 结构体变量名结构体变量名10001Zhang9210002Li97stu1stu2在定义了结构

5、体变量后,系统会在定义了结构体变量后,系统会为之分配内存单元。为之分配内存单元。sizeof(stu1)= 2+ 20+ 4 =26namenumscore2字节20字节4字节、在定义结构体类型的同时定义变量在定义结构体类型的同时定义变量struct 结构体类型标识符结构体类型标识符 类型标识符1成员名1; 类型标识符2成员名2; 类型标识符n成员名n;变量名列表变量名列表;struct student int num; char name20; float score;stu1, stu2;、直接定义结构体类型变量直接定义结构体类型变量struct 类型标识符1成员名1; 类型标识符2成员名

6、2; 类型标识符n成员名n;变量名列表变量名列表;( (可省略结构体类型名可省略结构体类型名可省略结构体类型名可省略结构体类型名) )struct int num; char name20; float score;stu1, stu2;三. 结构体变量的引用结构体变量名结构体变量名. .成员名成员名“.“. 成员运算符,在所有的运算符中优先级最高。成员运算符,在所有的运算符中优先级最高。struct student int num; char name20; float score;stu1, stu2;stu1.num=10001;stu1.score=95.5;stu1.name=Li

7、Ming;strcpystrcpy(stu1. .name, Li Ming);struct m int x; float y; char z; t;t.x=12;t.y=12.5;t.z=f;printf(“%d,%f,%c,t.x,t.y,t.z);2、不能将一个结构体变量作为一个整体进行输不能将一个结构体变量作为一个整体进行输入输出;入输出;printf(%d%s%f, stu1);scanf(%d%s%f, &stu1);只能对结构体中的各个成员分别进行输入输出只能对结构体中的各个成员分别进行输入输出printf(%d%s%f, stu1.num, stu1.name, stu1.sc

8、ore);scanf(%d, &stu1.num);gets(stu1.name);1、区分类型与变量:区分类型与变量:a、只能对变量赋值、存取或运算,而不能对只能对变量赋值、存取或运算,而不能对一个类型赋值、存取或运算;一个类型赋值、存取或运算;b、在编译时,对类型不分配内存空间,只对在编译时,对类型不分配内存空间,只对变量分配空间。变量分配空间。3、只有在对结构体变量只有在对结构体变量赋值赋值或或作为函数参数作为函数参数时才可以对一个结构体变量进行整体操作;时才可以对一个结构体变量进行整体操作;( (赋值时要求具有相同结构赋值时要求具有相同结构) )stu2=stu1;stu2.num=s

9、tu1.num;strcpy(stu2.name, stu1.name);stu2.score=stu1.score;void fun(struct student px) fun(stu1);4、对成员变量可以像普通变量一样进行各种运算对成员变量可以像普通变量一样进行各种运算sum=stu1.score+stu2.score;stu1.age+;结构体变量struct std_info char no7; char name9; char sex; struct date birthday; stu1; 结构体类型的嵌套定义5、如果成员本身又属于一个结构体类型,那么要用假设干个成员运算符,一

10、级一级的找到最低一级的成员。只能对最低一级的成员进行赋值、存取或运算;stu1.birthday.year=2002;struct date int year; int month; int day; ;struct date int year; int month; int day;struct studentint num; char name20; char sex; struct date birthday; char addr30;sizeof(struct student)=?596 成员也可以是指向本结构体类型的指针变量struct stu_info int num; char

11、name20; float score; struct stu_info *next; ;sizeof(struct stu_info)=?287、在定义结构体变量的同时,可以进行初始化在定义结构体变量的同时,可以进行初始化。struct student int num; char name20; char sex; char addr30;stu= 15001, , “Wang, , M, 123 Road harbin ;struct student int num; char name20; char sex; char addr30;stu;stu.num=15001;strcpy(s

12、tu.name,Wang);sex=M;strcpy(stu.addr,123 road Ha);A.struct dateB. int month;C. int day;D. int year;E. F. struct date tt;B. #define DATE struct date DATE int month; int day; int year; tt;C. struct int month; int day; int year; tt;D. struct date int month; int day; int year; tt;结构体的定义,哪个不正确?struct m in

13、t x; int y; float z; char p; test;struct menu char a; int b; long c; float d; mu=k,12,906,2.5;printf(“%dn”, );printf(“%cn”, );printf(“%fn”, );sizeof(test)=mu.bmu.amu.d9再定义一个与test同类型的变量facstruct m fac;12 结构体数组结构体数组数组的每个元素都是结构体类型的数据,它数组的每个元素都是结构体类型的数据,它们分别包含各个成员项。们分别包含各个成员项。1 1、先定义结构体类型,再定义结构体数组先定义结构体

14、类型,再定义结构体数组struct studentstruct student int num; float score;struct studentstruct student stu30stu30;2 2、定义结构体类型的同时定义结构体数组定义结构体类型的同时定义结构体数组struct student int num; float score;stu30;3 3、直接定义结构体数组直接定义结构体数组struct int num; float score;stu30;形式一: struct student int num; char name20; char sex; int age; ;s

15、truct student stu2;numnamesexagenumnamesexagestu0stu125B形式二: struct student int num; char name20; char sex; int age; stu2;结构体数组的初始化一般形式:一般形式:struct 结构体类型标识符结构体类型标识符结构体类型标识符结构体类型标识符类型标识符1成员名1;类型标识符2成员名2; 类型标识符n成员名n; 结构体数组= 数组元素0的各个初值, 数组元素1的各个初值, ;例:例:例:例:struct student int num; char name20; float sc

16、ore;stu3=10101,Li Ming, 88,10102,Zhang Jin,92, 10103, Wang Lin, 98.5;说明:说明:说明:说明:1 1、初始化时,数组元素的个数可以不指定,系统会根据初、初始化时,数组元素的个数可以不指定,系统会根据初值的结构体常量的个数来确定数组元素的个数;值的结构体常量的个数来确定数组元素的个数;struct student int num; char name20; float score;stu =10101,Li Ming, 88,10102,Zhang Jin,92, 10103, Wang Lin, 98.5;2 2、数组中各个元

17、素的初值用大括号、数组中各个元素的初值用大括号 、 括起来,同一数括起来,同一数组元素的各个成员变量的初值用逗号分隔。组元素的各个成员变量的初值用逗号分隔。或:struct student stu =10101,Li Ming, 88, 10102,Zhang Jin,92, 10103, Wang Lin, 98.5; 结构体数组应用举例假设有如下定义:struct aa long num; char name20;struct bb int age; struct aa first;stu2; 要给要给stu1输入输入18、990001、“wang zhi gang,写出所用到的语句;写出

18、所用到的语句;、要把、要把w、z、g变成大写,变成大写,如何实现?如何实现?、如何如何将将stu1中的名字复制到中的名字复制到stu0中的相应位置上?中的相应位置上?stu1.age=18;stu1.first.num=990001;strcpy(stu1.first.name, “wang zhi gang);stu1.first.name0-=32;stu1.first.name5-=32;stu1.first.name9-=32;strcpy(stu0.first.name,stu1.first.name);#include “stdio.h struct cmplx int x; in

19、t y; cnum2=1,3,2,7; main( ) printf(“%dn,cnum0.y*cnum1.x); cnum0.x=1cnum0.y=3cnum1.x=2cnum1.y=76结构体与指针结构体变量的指针结构体变量的指针就是该变量所占据的内存段的起始地址。就是该变量所占据的内存段的起始地址。指向结构体变量的指针变量1 1、指向结构体变量指针的定义:、指向结构体变量指针的定义:struct student int num; char name20; float score;struct student stu, *p;p=&stu;p p中存放着结构体变量中存放着结构体变量stus

20、tu在内存中的首地址在内存中的首地址注意:注意:注意:注意:不能用指向结构体变量的指针指向该结构体变量的不能用指向结构体变量的指针指向该结构体变量的不能用指向结构体变量的指针指向该结构体变量的不能用指向结构体变量的指针指向该结构体变量的某个成员某个成员某个成员某个成员。p=&stu.num;int *ip;ip=&stu.num;、stu.num、stu.name、stu.score、(*p).num、(*p).name、(*p).score、p-num、p-name、p-score2、访问结构体成员变量的三种方法:访问结构体成员变量的三种方法:访问结构体成员变量的三种方法:访问结构体成员变量

21、的三种方法:3、说明:说明:说明:说明:、“- 为指向运算符,是优先级最高的运算符;、成员运算符“.的优先级高于指针运算符“*,因此采用 “(*p).成员名 形式时,括号不能省略;、注意以下几种运算:p-num得到得到p p指向的结构体变量中的成员指向的结构体变量中的成员numnum的值的值p-num+得到得到p p指向的结构体变量中的成员指向的结构体变量中的成员num的值,的值,用完后该值加用完后该值加1 1+p-num使使p p指向的结构体变量中的成员指向的结构体变量中的成员numnum的值加的值加1 1#includemain()struct student long num; char

22、 name20; char sex; float score; ; struct student stu_1; struct student *p; p=&stu_1; stu_1.num=2003001; strcpy(stu_1.name,Li Tao); stu_1.sex=M; stu_1.score=90.5; printf(“%ld,%sn,stu_1.num,stu_1.name); printf(“%c,%.2fn,stu_1.sex,stu_1.score); printf(“%ld,%sn,p-num,p-name);printf(“%ld,%sn,(*p).num,(*p

23、).name);printf(“%c,%.2fn,p-sex,p-score);printf(“%c,%.2fn,(*p).sex,(*p).score);指向结构体数组的指针指向结构体变量的指针变量,可以指向结构体变指向结构体变量的指针变量,可以指向结构体变量,也可以指向同类型的结构体数组的元素。量,也可以指向同类型的结构体数组的元素。struct student int num; char name30; float score;stu30, *p;p=stu;p=&stu3;p=&stu2.num;p p只能指向一个只能指向一个只能指向一个只能指向一个struct studentstru

24、ct student类型的数据类型的数据类型的数据类型的数据( (某某某某个元素的的起始地址个元素的的起始地址个元素的的起始地址个元素的的起始地址) ),不能指向一个成员变量。,不能指向一个成员变量。,不能指向一个成员变量。,不能指向一个成员变量。注注注注意意意意、假设、假设p p的初值为的初值为stustu,p+1p+1后指向下一元素的起始地址;后指向下一元素的起始地址;(+p)-num先使先使先使先使p p自加自加自加自加1 1,然后得到它指向元素的,然后得到它指向元素的,然后得到它指向元素的,然后得到它指向元素的numnum成员值成员值成员值成员值+p-num使使使使p p指向的结构体变

25、量中的成员指向的结构体变量中的成员指向的结构体变量中的成员指向的结构体变量中的成员numnum的值加的值加的值加的值加1 1(p+)-num先得到先得到先得到先得到p-nump-num的值,然后使的值,然后使的值,然后使的值,然后使p p自加自加自加自加1 1,指向,指向,指向,指向stu1stu1p-nunm+使使使使p p指向的结构体变量中的成员指向的结构体变量中的成员指向的结构体变量中的成员指向的结构体变量中的成员numnum的值加的值加的值加的值加1 1、假设、假设p p已定义为指向结构体类型的数据,那么已定义为指向结构体类型的数据,那么p p只能指向相只能指向相应类型的变量或数组元素

26、,不能指向数组元素中的某一成应类型的变量或数组元素,不能指向数组元素中的某一成员;员;#includestruct s int x,*y; *p;int d5=10,20,30,40,50;struct s array5=100,&d0, 200,&d1,300,&d2, 400,&d3,500,&d4;x 100yx 200yx 300yX 400yx 500y1020304050d0d1d2d3d4array0array1array2array3array4printf(“%dn,(+p)-x);printf(“%dn,p-x+);printf(“%dn,+p-x);printf(“%dn

27、,*(*p).y);printf(“%dn,*p-y);printf(“%dn,+(*p-y);printf(“%dn,+*p-y);printf(“%dn,*+p-y); 100100 10 10101200200 21 2230 main() p=array; printf(“%dn,p-x); printf(“%dn,(*p).x);程序中固定不变。语言中不允许定义动态存储分配为有效地利用内存资源提供了手段。数组的长度是预先定义好的,在整个动态数组。实际的编程中,往往会发生这种情况,即所需的内存空间取决于实际输入的数据,而无法预先确定。对于这种问题,用数组的方法很难解决。为了解决上述问题

28、,语言提供了一些内存管理函数,这些内存管理函数可以按需要动态地分配内存空间,也可把不再使用的空间回收待用,常用的内存管理函数 调用形式:调用形式: ( (类型说明符类型说明符*) ) malloc(size)功能:在内存的动态存储区中分配一块长度为功能:在内存的动态存储区中分配一块长度为sizesize字节的连字节的连续区域。函数的返回值为该区域的首地址。续区域。函数的返回值为该区域的首地址。pc=(char *)malloc(100); 分配内存空间函数分配内存空间函数 calloc调用形式:调用形式: ( (类型说明符类型说明符*) )calloc(n,size)分配内存空间函数分配内存空

29、间函数 malloc功能:在内存动态存储区中分配功能:在内存动态存储区中分配n n块长度为块长度为“size“size字节的连字节的连续区域。函数的返回值为该区域的首地址。续区域。函数的返回值为该区域的首地址。( (类型说明符类型说明符*)*)用于强制类型转换。用于强制类型转换。 ps=(struct stu*)calloc(2,sizeof(struct stu);释放内存空间函数释放内存空间函数free调用形式:调用形式: free(void *ptr);free(pc);分配一块区域,输入一个学生数据main() struct stu int num; char *name; char

30、sex; float score; *ps; ps=(struct stu*)malloc(sizeof(struct stu); ps-num=102; ps-name=“Xiao xiao; ps-sex=M; ps-score=62.5; printf(Number=%dnName=%sn,ps-num,ps-name); printf(Sex=%cnScore=%fn,ps-sex,ps-score); free(ps);申请内存空间 使用内存空间释放内存空间 sizeof(struct stu)=?Number=102Name=xiaoxiaoSex=MScore=62.5链表的概念

31、问题的引出问题的引出链式结构链式结构关键词:数组、关键词:数组、n n个元素、连续内存空间个元素、连续内存空间数据结构中一种标记,相邻结点间连接方式数据结构中一种标记,相邻结点间连接方式链表链表具有表头和表尾的链接结构具有表头和表尾的链接结构C1680DNULLB1200A14601110head1110146012001680表头表尾例如,一个存放学生学号和成绩的结点为以下结构: struct stu int num; int score; struct stu *next; 前两个成员项组成数据域,后一个成员项next构成指针域,它是一个指向stu类型结构的指针变量。链表的根本操作:1.

32、建立链表;2. 结构的查找与输出;3. 插入一个结点;4. 删除一个结点;headp1p29910185.59910185.59910390headp1p299103909910785p1p29910185.5head99103909910785NULLp1p29910185.5head00#define NULL 0#define LEN sizeof(struct student)struct student long num; int score; struct student *next; int n;建立一个单向动态链表struct student *creat(void) stru

33、ct student *head; struct student *p1,*p2; n=0; head=NULL; p1=p2=(struct student *)malloc(LEN); scanf(“%ld,%d,&p1-num,&p1-score); while(p1-num!=0) n+; if(n=1)head=p1; else p2=p1; p1=(struct student *)malloc(LEN); scanf(“%ld,%d,&p1-num,&p1-score); p2-next=NULL; return(head); 程序演示共用体的概念有时候需要将几种不同类型的变量存

34、放到同一段内存单元中。有时候需要将几种不同类型的变量存放到同一段内存单元中。2000ichf可以把一个整型变量、一个字符型变量、一个实型变量放在同一个地址开始的内存单元中。即即使几个不同的变量共占同一段内存空间使几个不同的变量共占同一段内存空间。所谓所谓“共用体共用体(union)是指使几个不同的变量是指使几个不同的变量共占同一段内存的数据类型。共占同一段内存的数据类型。共用体的定义1、先定义共用体类型标识符,再定义变量、先定义共用体类型标识符,再定义变量union 共用体类型标识符共用体类型标识符 类型标识符1成员名1; 类型标识符2成员名2; 类型标识符n成员名n;union 共用体类型标

35、识符共用体类型标识符 变量名表;变量名表;union data int i; char ch; float f;union data a, b, c;2、直接定义共用体变量直接定义共用体变量union 共用体类型标识符共用体类型标识符 类型标识符1成员名1; 类型标识符2成员名2; 类型标识符n成员名n;变量名表变量名表;union data int i; char ch; float f;a, b, c;union int i; char ch; float f;a, b, c;3、共用体与结构体的定义形式相似,但含义不同:结构体变量所占的内存长度等于各成员所占的内存长结构体变量所占的内存长

36、度等于各成员所占的内存长度之和。度之和。(每个成员分别占有自己的内存)共用体变量所占的内存长度等于最长的成员的长度。共用体变量所占的内存长度等于最长的成员的长度。(每个成员分别占有自己的内存)sizeof(union data)=4共用体变量的引用1、引用形式为:、引用形式为:共用体变量名共用体变量名.成员名成员名union data int i; char ch; float f;a, b, c;a.i引用共用体变量引用共用体变量a a中的整型变量中的整型变量i ia.ch 引用共用体变量引用共用体变量a a中的字符变量中的字符变量chcha.f引用共用体变量引用共用体变量a a中的实型变量

37、中的实型变量f f2、注意:、注意:不能直接引用共用体变量,而只能引用共用体变量的成员不能直接引用共用体变量,而只能引用共用体变量的成员printf(%d, a);printf(%d, a.i);printf(%d, a.ch);3、共用体类型数据的特点:、共用体类型数据的特点:、同一内存段可以用来存放几种不同类型的成员,但在每一瞬时只能存放其中一种,而不是同时存放几种;也就是说,每一瞬时只有一个成员起作用每一瞬时只有一个成员起作用,其它的成员不起作用,即不是同时都存在和起作用。、共用体变量中起作用的成员是最后一次存放的成员共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有

38、的成员就失去作用;a.i=1;a.ch=a;a.f=1.5;、共用体变量的地址和它的各成员的地址是同一地址共用体变量的地址和它的各成员的地址是同一地址;&a, &a.i, &a.ch, &a.f都是同一地址、不能对共用体变量名赋值不能对共用体变量名赋值;也不能企图引用变量名来得到也不能企图引用变量名来得到成员的值成员的值;不能在定义共用体变量时进行初始化不能在定义共用体变量时进行初始化;union int i; char ch; float f;a=1, a, 1.5;a=1;m=a;、不能把共用体变量作为函数参数不能把共用体变量作为函数参数,也不能让函数带回共用,也不能让函数带回共用体变量,

39、但体变量,但可以使用指向共用体变量的指针可以使用指向共用体变量的指针;、共用体作为一种数据类型,可以在定义其它数据类型中使共用体作为一种数据类型,可以在定义其它数据类型中使用。用。可以将结构体变量的某一成员定义为共用体类型,也可以定义共用体数组。例:设有假设干人员的数据,其中有学生和教师。学生的数例:设有假设干人员的数据,其中有学生和教师。学生的数据包括:姓名、学号、性别、职业、班级。教师的数据据包括:姓名、学号、性别、职业、班级。教师的数据包括:姓名、教师号、性别、职业、职务。现要求把它包括:姓名、教师号、性别、职业、职务。现要求把它们放在同一表格中。们放在同一表格中。namenumsexj

40、obclass positionLi10101Ms501Wang5002Ftprofint num;char name20;char sex;char job;union int class; char position10;category;namenumsexjobclass positionLi10101Ms501Wang5002Ftprofstruct person int num; char name20; char sex; char job; union int class; char position10; category;per30;scanf(%c, &peri.job)

41、;if (peri.job=s) scanf(%d, &peri.category.class);else if (peri.job=t) gets(peri.category.position);#include#includestruct un int i; char name20; float score;main() struct un u; u.i=12; strcpy(u.name, “ZZ); u.score=89.5 printf( “%d,%s,%fn, u.i,u.name,u.score); unionunion12,ZZ,89.5000000, ,89.500000枚举

42、类型 枚举类型的定义所谓所谓“枚举是指将变量的所有取值一一列举出来,变枚举是指将变量的所有取值一一列举出来,变量的值只限于列举出来的值的范围内。量的值只限于列举出来的值的范围内。枚举类型变量的定义:1、先定义枚举类型标识符,再定义变量先定义枚举类型标识符,再定义变量enum 枚举类型标识符枚举类型标识符枚举元素枚举元素1, 枚举元素枚举元素2, , 枚举元素枚举元素n;enum 枚举类型标识符枚举类型标识符 变量列表;变量列表;enum personMan, Woman;enum person x;enum weekdaySun, Mon, Tue, Wed, Thu, Fri, Sat;en

43、um weekday workday, weekend;2、直接定义枚举变量直接定义枚举变量enum 枚举类型标识符枚举类型标识符枚举元素枚举元素1, 枚举元素枚举元素2, , 枚举元素枚举元素n变量列表变量列表;enum personMan, Womanx;enum weekdaySun, Mon, Tue, Wed, Thu, Fri, Sat workday, weekend;enum BOOLFALSE, TRUE;3、说明:说明:Sun、Mon、Sat等称为枚举元素或枚举常量,它们是用户自定义标识符。这些标识符并不自动的代表什么含义,用什么标识符代表什么含义,完全由程序员决定,并在程

44、序中作相应的处理。枚举变量的引用1、在编译时,对枚举元素按常量处理,故称枚举常量枚举常量。它们不是常量,不能对它们赋值不能对它们赋值。Sun=0;TRUE=1;2、枚举元素作为常量,它们是有值的。语言编译时按定语言编译时按定义时的顺序使它们的值为义时的顺序使它们的值为0、1、2、enum weekdaySun, Mon, Tue, Wed, Thu, Fri, Satworkday;workday=Mon;printf(%d, workday);3、可以在定义时改变枚举元素的值enum weekdaySun=7, Mon=1, Tue, Wed, Thu, Fri, Satworkday;en

45、um weekdaySun=7, Mon, Tue, Wed=0, Thu, Fri, Sat;4、枚举值可以用来做判断比较if (workday=Mon) if (workdaySun) 5、一个整数不能直接赋给一个枚举变量workday=2;workday=(enum weekday)2;workday=(enum weekday)(x-y);例:例:从键盘输入06的任意整数,0表示星期日,16分别表示星期一到星期六,要求编写程序输出对应的英文名称。enum weekdaySunday, Monday, Tuesday, Wednesday, Thursday, Friday, Satur

46、dayweek;scanf(%d, &i);switch(i) case 0: week=Sunday; break; case 1: week=Monday; break; case 2: week=Tuesday; break; case 3: week=Wednesday; break; case 4: week=Thursday; break; case 5: week=Friday; break; case 6: week=Saturday; break; switch(week) case Sunday: break; case Monday: break; case Tuesda

47、y: break; case Wednesday: break; case Thursday: break; case Friday: break; case Saturday: break; 类型标识符的自定义1、除了可以直接使用提供的标准类型名(int、char、float等)和自己定义的数据类型(结构体、共用体、指针、枚举类型)外,还可以用用typedef声明新的类型名来代替已有的声明新的类型名来代替已有的类型名类型名。typedef int INTEGERint i, *p;INTEGER i, *p;typedef float REALfloat x, y;REAL x, y;2、定

48、义类型标识符的方法:、按定义变量的方式写出定义体:、按定义变量的方式写出定义体:float x;、将变量名换成新的类型标识符:、将变量名换成新的类型标识符:REAL x;、在最前面加、在最前面加typedef:typedef REAL x;3、例:、定义含有定义含有10 个元素的整型数组:个元素的整型数组:、先按照定义数组的形式书写:int a10;、将变量名a换成自己指定的类型名:int ARRAY10;、在前面加上typedef:typedef int ARRAY10;int a10, b10;ARRAY a, b;、定义字符指针类型:定义字符指针类型:、char *p;、char *ST

49、RING;、typedef char *STRING;STRING p, ps10;、声明结构体类型:声明结构体类型:struct int num; char name20; float score;stu;struct int num; char name20; float score;STUDENT;typedef struct int num; char name20; float score;STUDENT;STUDENT stu30, *p;4、说明:说明:、自定义类型标识符可以是任意合法的标识符,习惯上常把用typedef定义的标识符用大写字母表示,以便与系统提供的标准类型标识符相

50、区别;、用typedef只能为已经存在的数据类型标识符另起一个新名,而不能创造一种新的数据类型;typedef int ARRAY10;、typedef与#define有相似之处:typedef int INTEGER#define INTEGER int作用都是用INTEGER代表int。#define是在编译之前进行处理的,只做简单的字符替换。typedef是在编译时处理的,实际上并不是做简单的字符替换。如:typedef int ARRAY10并不是用“ARRAY10去代替int,而是采用如同定义变量的方法那样来声明一个类型。、当不同的文件中涌到同一类型数据时(结构体、共用体等),常用t

51、ypedef声明一些数据类型,把它们单独放在一个文件中,需要用时用#include命令把它们包含进来;、使用typedef有利于程序的通用和移植;typedef int INTEGERtypedef long INTEGER1 1、编写函数、编写函数ReadInfoReadInfo读入读入1010名职工的编号整型名职工的编号整型、姓名字符串、联系、姓名字符串、联系 字符串放在字符串放在结构体数组结构体数组workwork中;编写函数中;编写函数WriteInfoWriteInfo输出这输出这1010名职工的记录;在主函数中分别调用上述两个名职工的记录;在主函数中分别调用上述两个函数,实现程序的功能。函数,实现程序的功能。本章作业本章作业2 2、设李红、王建、赵明三名同学某学年考了、设李红、王建、赵明三名同学某学年考了8 8门课,门课,要求分别统计出这要求分别统计出这3 3名同学该学年的总成绩,并按名同学该学年的总成绩,并按8 8门课总成绩的上下排序输出。门课总成绩的上下排序输出。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号