最新.结构课件.ppt_第1页
最新.结构课件.ppt_第2页
最新.结构课件.ppt_第3页
最新.结构课件.ppt_第4页
最新.结构课件.ppt_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、第八章 结构Structures,2,回顾,目标,结构定义 声明结构变量 访问结构成员 掌握结构作为函数参数的用法,结构简介,问题:存储一个班级中 5 名学员的信息(学号、姓名、性别和成绩),C 语言引入了称为结构的数据存储方式,结构,结构成员,不是相同数据类型,定义结构2-1,struct structurename datatype variable1; datatype variable2; . ;,结构成员名,;,结构名,struct,student,int num;,char name20;,char sex;,定义结构,float score;,C 语言的数据类型,定义结构2-2,

2、struct student int num; char name20; char sex; float score; ;,num,name,sex,student,结构定义并不分配内存,结构定义一般放置在程序开始部分(头文件声明之后),score,结构定义仅描述了一个组合类型。所以还必须定义该类型的变量,才能在程序里使用,结构类型:struct 结构名。例:struct student,定义结构变量,struct student int num; char name20; char sex; float score; ; struct student stu1,stu2;,I. 先定义结构类

3、型,再定义结构变量,struct student int num; char name20; char sex; float score; stu1,stu2;,II.在定义结构类型同时定义结构变量,struct int num; char name20; char sex; float score; stu1,stu2;,III. 省略结构类型名,直接定义结构变量,声明一个类型为 student 结构的变量,将会为该变量分配内存,大小为其所有成员变量的大小之和。,8,typedef struct date int month; int day; int year DATE; DATE myb

4、irthday;,用typedef声明结构类型,用typedef声明结构类型,typedef struct student int num;/学号 char *name;/姓名 char sex;/性别 float score;/成绩 Stu; Stu student1, student2,9,变量成员的使用,结构体变量成员的使用:结构变量名.成员名 stu1.num stu2.score,struct student int num; char name20; char sex; float score; ; struct student stu1,stu2;,struct date int

5、 month; int day; int year; ;,嵌套结构,struct int num; char name20; char sex; struct date birthday; float score; stu1,stu2;,结构体变量中成员的使用:结构变量名.成员名 stu1.birthday.month,struct student student3=3,Yao Ming ,M,90.5;,结构变量的集体赋值,3,Yao Ming,M,集体赋值必须在定义结构变量的时候赋值(与其他类型类似); 赋值的顺序应与成员声明时的顺序一样; 允许赋值语句中的值的数目比结构成员数目少; 允许

6、结构变量赋值给相同类型的结构变量。,student3.num,,student3.sex,90.5,student3.score,student1.num=1; =Zhang Zi Liang; student1.sex=M; printf(请输入成绩:n); scanf(%f,结构变量个体赋值,1,Zhang Zi Liang,M,用scanf语句或赋值语句来给结构变量的各个成员赋值,78,78,student2 = student1;,1,Zhang Zi Liang,M,78,问题描述: 定义结构类型,输入下面学员的详细信息。,使用结构

7、示例,1,李亚鹏,M,78,2,周晶晶,F,92,3,姚光明,M,59,#include typedef struct student int num;/学号 char name10;/姓名 char sex;/性别 float score;/成绩 STU; void main() STU stu1,stu2,stu3; scanf(%d%s %c%f, ,14,结构类型的大小,结构类型所占内存空间大小计算原则 每个成员相对于首地址的偏移量是该成员基本类型大小的整数倍 结构体总大小为最宽基本类型成员的整数倍,struct student int num; char name10; char s

8、ex; float score; ; struct student stu;,15,结构类型的大小,结构类型所占内存空间大小计算原则 每个成员相对于首地址的偏移量是该成员基本类型大小的整数倍 结构体总大小为最宽基本类型成员的整数倍,struct student int num; char name10; float score; char sex; ; struct student stu;,16,结构类型的大小,结构类型所占内存空间大小计算原则 每个成员相对于首地址的偏移量是该成员基本类型大小的整数倍 结构体总大小为最宽基本类型成员的整数倍,struct student int num; c

9、har name10; double score; char sex; ; struct student stu;,17,结构类型的大小,结构类型所占内存空间大小计算原则 每个成员相对于首地址的偏移量是该成员基本类型大小的整数倍 结构体总大小为最宽基本类型成员的整数倍,struct student int num; char name10; double score; char sex; ; struct student stu;,void main() int n; n=sizeof(struct student); printf(“%dn”,n); ,计算数据类型大小,struct stu

10、dent int num; char* name; char sex; float score; stu30;,结构数组,用结构数组来表示具有相同结构的一个群体。 例如,存储一个班有30个学员的信息。,定义了一个结构数组stu1,共有30个元素,stu0stu29。每个数组元素都具有struct student的结构类型。,19,问题描述: 定义结构类型,输入下面学员的详细信息。,使用结构数组示例,1,李亚鹏,M,78,2,周晶晶,F,92,3,姚光明,M,59,#include #define N 2 typedef struct student int num;/学号 char name1

11、0;/姓名 char sex;/性别 float score;/成绩 STU; void main() STU stuN; int i; for(i=0;iN;i+) scanf(%d%s %c%f, ,20,结构指针变量,一个指针当用来指向一个结构时, 称之为结构指针变量。 结构指针变量中的值是所指向的结构变量的首地址。 结构指针变量声明的一般形式为: struct 结构名 *结构指针变量名 通过结构指针可以访问该结构变量的成员,一般形式为: (*结构指针变量).成员名 或者 结构指针变量-成员名,struct student int num; char *name; char sex; f

12、loat score; stu=1,张宾,F,55,*pstu;,若pstu=,21,结构指针变量,一个指针当用来指向一个结构时, 称之为结构指针变量。 结构指针变量中的值是所指向的结构变量的首地址。 结构指针变量声明的一般形式为: struct 结构名 *结构指针变量名 通过结构指针可以访问该结构变量的成员,一般形式为: (*结构指针变量).成员名 或者 结构指针变量-成员名,#include struct student int num; char *name; char sex; float score; stu=1,张宾,F,55,*pstu; void main() pstu= ,结

13、构作为函数参数,可以将结构作为参数传递给函数,也可以定义返回结构值的函数。 结构作为函数参数方法: 将整个结构作为参数值传递给函数。 将结构指针变量做函数的参数。,把结构作为整体来处理,但作用方式和效果不同。,问题描述: 求已知两个复数的和。 分析: 两个复数a+ib和c+id的和为: x+iy 其中:x=a+c y=b+d,#include struct complex double re;/实部 double im;/虚部 ; struct complex add(struct complex,struct complex); void main() struct complex x=6.

14、5,8.9,y=7.1,9.4; struct complex z; z=add(x,y); printf(和为:%5.2lf+i%5.2lfn,z.re,z.im); ,整个结构作为参数,演示,struct complex add(struct complex a,struct complex b) struct complex c; c.re=a.re+b.re; c.im=a.im+b.im; return c; ,传递结构时实际上是传值调用,即,将结构变量的每个成员值逐个传送。,24,问题描述: 求已知两个复数的和。 分析: 两个复数a+ib和c+id的和为: x+iy 其中:x=a+

15、c y=b+d,#include struct complex double re;/实部 double im;/虚部 ; struct complex add(struct complex *,struct complex *); void main() struct complex x=6.5,8.9,y=7.1,9.4; struct complex z; z=add( ,结构指针做为参数,演示,struct complex add(struct complex *a,struct complex *b) struct complex c; c.re=a-re+b-re; c.im=a-

16、im+b-im; return c; ,用指针变量作函数参数进行传送时由实参传向形参的只是结构的地址。,25,共用体类型,共用体类型定义与使用,union data int i; char c; float a; ;,void main() union data d1; d1.i=5; d1.c=#; d1.a=6.5; /最后赋值有效性 printf(%dn%cn%.1fn,d1.i,d1.c,d1.a); ,26,枚举类型,枚举类型定义与使用,enum weekday sun,mon,tue,wed,thu,fri,sat; /枚举元素分别代表整数0-6,void main() enum

17、weekday a; /枚举变量a只能赋予集合中的某个值 a=sun; printf(%dn,a); a=fri; printf(%dn,a); ,27,动态内存分配,若已知变量、数组、结构的数量时,可以静态分配内存。例如:int a10; 有时,程序需要灵活设置所需空间大小,不能初始化确定。 动态内存分配和释放函数:malloc和free 包含在#include void *malloc(int size) void free(void *p),28,动态内存分配,#include #include void main() int i,n; int *a; printf(请输入元素个数:); scanf(%d, ,总结2-1,定义一个结构,需要给出各个成员的类型及名称。 结构定义仅描述了

温馨提示

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

评论

0/150

提交评论