C语言程序设计第6章

上传人:油条 文档编号:48812285 上传时间:2018-07-20 格式:PPT 页数:53 大小:250KB
返回 下载 相关 举报
C语言程序设计第6章_第1页
第1页 / 共53页
C语言程序设计第6章_第2页
第2页 / 共53页
C语言程序设计第6章_第3页
第3页 / 共53页
C语言程序设计第6章_第4页
第4页 / 共53页
C语言程序设计第6章_第5页
第5页 / 共53页
点击查看更多>>
资源描述

《C语言程序设计第6章》由会员分享,可在线阅读,更多相关《C语言程序设计第6章(53页珍藏版)》请在金锄头文库上搜索。

1、C C语言程序设计语言程序设计第6章 结构与联合类型 6.1 结构与联合类型的概述 6.2 结构类型 6.3 链表及其操作 6.4 位域与联合类型 6.5 枚举类型6.1 结构与联合类型的 概述 结构类型是什么? 由多个元素构成的集合,这些元素的每一个均有独立的变量名,采取按名访问方 式,每个元素可以定义为不同的类型,称数据项。数据项的类型可以是基本类型 ,也可以是构造类型 示例:在C语言中,用结构类型描述上述数据结构的格式如下: struct student char no6;char name10;char sex;int grade4; ; 6.1 结构与联合类型的 概述 联合类型是什么

2、? 联合类型的定义格式与结构类型相似,但其成员变量 的内存分配方式不同,联合类型的所有成员不论其类 型和大小,均共享使用同一块内存单元 下图可帮助读者理解不同成员共享内存的方法: 6.1 结构与联合类型的 概述 例如,要进行学生情况调查,大学生的调查项目为专业,而中学生的调查项目为身高,其 它项目均相同,这时可以使用联合方式来实现。 调查表格式如下:C语言可利用联合类型表格式中的共项栏目:专业/身高项目,定义方法如下: struct survey char name10;.union char major20;int height; item; ;6.2.1结构类型与结构变 量 结构类型结构可

3、以使用typedef定义为类型,具体格式如下: typedef struct 成员定义列表 结构类型名; 注:保留字struct后也可以取类型名,这主要用于递归定义中 示例:typedef struct int year, month, day; Date; Date d1,d2,d3; d1.year=2000; d2.month=3; d3.day=15; 注:d1,d2,d3为Date类型的变量6.2.1结构类型与结构变 量 结构变量的定义 有三种方式:1)先定义类型再定义变量 typedef struct 成员定义列表 结构类型名; 结构类型名变量名=初始化值表; 2)在定义类型的同时

4、定义变量 struct 结构类型名 成员定义列表 变量名表; 3)不定义类型直接定义结构变量 struct 成员定义列表 变量名表; 注:定义变量时没有给出结构类型名,该结构类型只能定义一次结构变量6.2.1结构类型与结构变 量 示例: 1)typedef struct char no6;char name10;char sex;int grade4; student; student a=“02001“,“David“,M,80,75,85,80; 2)struct student char no6;char name10;char sex;int grade4; a, b; 3)struc

5、t char no6;char name10;char sex;int grade4; a, b;6.2.2 结构变量的基本 操作 结构变量的使用可以从两种情况考虑:1使用结构变量中的成员 使用结构变量中的成员的格式:结构变量名.成员变量名 例如:strcpy(a.no,“02001“); a.age=30; a.birthday.month=3; (a.birthday.year)=1985; (a.birthday).day=2; 2直接使用结构变量 结构变量可以作为一个整体使用,主要的操作有:复制和作为函数参数。 例如:struct student a=“02001“,“john“,b=

6、“02002“,“john“;if(a!=b) a=b; 6.2.2 结构变量的基本 操作 例61 编写程序完成结构变量的输入输出(一) #include typedef struct int month,day,year; Date; typedef struct char no6;char name10;Date birthday; Student; Student stud;/*全局变量*/ void main() char ch;do printf(“Function Menun“);printf(“=n“);printf(“1. Input Datan“);printf(“2. Ou

7、tput Datan“);printf(“0. Exitn“);ch=getch();switch(ch) case 1: readdata();break; /*输入数据到结构变量stud*/case 2:writedata();break; /*显示结构变量stud中数据*/ while(ch!=0); 6.2.2 结构变量的基本 操作 例61 编写程序完成结构变量的输入输出(二) void readdata()int y,m,d;printf(“Please input student detail:n“);printf(“=“);printf(“Student NO:“);scanf(

8、“%s“, stud.no);printf(“Student Name:“);scanf(“%s“,stud.name);printf(“Birthday(Year,Month,Day):“);scanf(“%d,%d,%d“,stud.birthday.year=y;stud.birthday.month=m;stud.birthday.day=d;printf(“OK!“); void writedata() int y,m,d;printf(“Student detail:n“);printf(“=“);printf(“Student NO:%sn“, stud.no);printf(“

9、Student Name:%sn“,stud.name);y=stud.birthday.year;m=stud.birthday.month;d=stud.birthday.day;printf(“Birthday:%d-%d-%dn“,y,m,d);printf(“=n“); 6.2.2 结构变量的基本 操作 例如:自定义函数实现了结构变量的比较操作 注:使用结构变量的直接比较,字符串只会比较地址,不会 比较串内容,因此需要自编比较函数 #include int comp(struct student d1,struct student d2) if(strcmp(d1.no,d2.no)

10、=0/*返回真*/else return 0;/*返回假*/ 6.2.3结构指针与结构 数组 结构指针 结构类型变量的成员在内存中是连续存放的,该段内存的开始地址称为结构指针 ,可以像定义整型指针变量一样定义结构指针变量来保存。 结构指针变量的定义struct 结构类型名 成员定义列表 * 指针变量名=初始指针值; 例如:struct student char no6;char name10; a , b , * p= 6.2.3结构指针与结构 数组 结构指针变量访问成员格式:结构指针变量-成员变量名 例如:p-no p-name q-no q-name 或者,采取类似于结构变量访问成员的方式

11、:(*p).no (*p).name (*q).no (*q).name 注:1)由于*运算优先级比成员运算(.)低,所以需要园括号改变优先级。 2)不同结构的指针变量不能直接赋值,应该进行显式的类型转换 例如:q=(struct student *)r;/*r与q不是同一结构类型的指针变量*/6.2.3结构指针与结构 数组 例6.3 用结构指针形参实现例6.1(一) void readdata(Student * pstud) /*定义结构指针变量作为形参,可返回结果*/ int y,m,d;printf(“Please input student detail:n“);printf(“=“

12、);printf(“Student NO:“);scanf(“%s“, pstud-no);printf(“Student Name:“);scanf(“%s“,pstud-name);printf(“Birthday(Year,Month,Day):“);scanf(“%d,%d,%d“,pstud-birthday.year=y;pstud-birthday.month=m;pstud-birthday.day=d;printf(“OK!“); void writedata(Student *pstud) /*定义结构指针变量作为形参,可节省空间*/ int y,m,d;printf(“S

13、tudent detail:n“);printf(“=“);printf(“Student NO:%sn“, pstud-no);printf(“Student Name:%sn“,pstud-name);y=pstud-birthday.year;m=pstud-birthday.month;d=pstud-birthday.day;printf(“Birthday:%d-%d-%dn“,y,m,d);printf(“=n“); 6.2.3结构指针与结构 数组 例6.3 用结构指针形参实现例6.1(二) #include typedef struct int month,day,year;

14、Date; typedef struct char no6;char name10;Date birthday; Student; /*没有定义全局变量stud*/ void main() char ch;Student stud;do printf(“Function Menun“);printf(“=n“);printf(“1. Input Datan“);printf(“2. Output Datan“);printf(“0. Exitn“);ch=getch();switch(ch) case 1: readdata(break;/*以结构变量a的地址作实参*/case 2:write

15、data(break; while(ch!=0); 6.2.3结构指针与结构 数组 例6.4 含指针成员的结构变量的复制 #include #include #include struct student char *no;char *name; ; void copydata(struct student *src, struct student *dest) /*dest为二级指针*/ struct student *temp=(struct student *)malloc(sizeof(struct student); temp-no=(char *)malloc(strlen(src-no)+1); temp-name=(char *)malloc(strlen(src-name)+1);strcpy(temp-no,src-no);strcpy(temp-na

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

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