C语言课件结构体与共用体_第1页
C语言课件结构体与共用体_第2页
C语言课件结构体与共用体_第3页
C语言课件结构体与共用体_第4页
C语言课件结构体与共用体_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

1、1结构体与联合结构体与联合21 1 结结 构构 体体存储一个班级中 5 名学员的信息(学号、姓名、性别和成绩)问题:I. 使用数组MaryJohnPeterRoseKateFMFMF01020304058978.56797.564解决方案:scorenumsexname不能建立数组间的关系II. 使用多维数组MaryJohnPeterRoseKateFMFMF01020304058978.56797.564C 语言不允许一个数组包含多种数据类型III. 使用结构体numnamesexscoreC 语言引入了称为结构体的数据存储方式“结构体” 是一种构造数据类型,是一种将不同数据类型的数据聚集在

2、一起,并用一个标识符来命名的数据结构3 struct structurenamedatatype variable1;datatype variable2;.;结构成员;结构名structstudentint num;char name20;char sex;float score;C 语言中的有效数据类型4struct student int num; char name20; char sex; float score;num name sexstudentscorev 结构定义必须以分号结束结构定义必须以分号结束v 结构名不代表结构体变量结构名不代表结构体变量v 结构体类型在编译时并不分

3、配内存空间结构体类型在编译时并不分配内存空间 5 struct student int num; char name20; char sex; float score;struct student student1,student2;I. 先定义结构,再声明结构变量先定义结构,再声明结构变量struct student int num; char name20; char sex; float score; student1,student2;II. 在定义结构类型的同时声明结构变量在定义结构类型的同时声明结构变量struct int num; char name20; char sex; f

4、loat score; student1,student2;III. 直接声明结构变量直接声明结构变量声明一个类型为声明一个类型为 student 结构的变量,将会为该变量分配内存,大结构的变量,将会为该变量分配内存,大小是大于或等于其所有成员变量的大小之和。小是大于或等于其所有成员变量的大小之和。 6 #define PERSON struct person PERSON char name10; int age; float wage; ; PERSON worker,manager,engineer;7struct date int month; int day; int year;st

5、ruct int num; char name20; char sex; struct date birthday; float score; student1,student2;8 main() int age; struct person char name10; int age; float wage; ; struct person worker,manager,engineer; 9 结构变量名结构变量名 . 结构成员名结构成员名 其中:其中:.是成员运算符是成员运算符分量运算符分量运算符点运算符点运算符 例:例: student1.num、student2.sex 例:例: 10

6、例:例:scanf(%s%d%d,&worker); scanf(%s%d%f,,&worker.age,&worker.wage); 例:例:sum=worker.wage+manager.wage+engineer.wage; strcpy(,);11 例:例:gets(); printf(%x,&worker); 例:例:(111)12 student1student1.num=1;strcpy(,Zhang Zi Liang“);stude

7、nt1.sex=M;printf(请输入成绩:请输入成绩:n);scanf(%f,&student1.score);1Zhang Zi Liang Mv 用输入语句或赋值语句来用输入语句或赋值语句来给给结构变量结构变量的各个成员的各个成员赋值赋值7878student2 = student1; student21Zhang Zi Liang M7813 内存student3struct student student3=3,Yao Ming ,M,90.5; 3Yao MingM赋值的顺序应与成员声明时的顺序一样;允许初始化语句中的值的数目比结构成员数目少。student3.numst

8、student3.sex90.5student3.score14#includestruct studentint num;/*学号*/char name20;/*姓名 */char sex;/*性别 */float score;/*成绩 */;void main() struct student stu1=1,李亚鹏,M,61; struct student stu2=2,周晶晶,F,92.5; struct student stu3=3,姚光明,M,59; printf(不及格学员的名单如下:n); if(stu1.score60) printf(%dt%st%ct%

9、5.2fn,stu1.num,,stu1.sex,stu1.score); if(stu2.score60) printf(%dt%st%ct%5.2fn,stu2.num,,stu2.sex,stu2.score); if(stu3.score=60 & stu2.score=60 & stu3.score=60) printf(没有不及格的学员。n);不及格学员的名单如下:3 姚光明 M 59.00stu11李亚鹏M78stu22周晶晶F92stu33姚光明M59(例题演示SG12112)152 2 结构体数组结构体数组stud0stud

10、1stud29 例:定义一个班例:定义一个班30个学生的姓名、性别、年龄和成绩个学生的姓名、性别、年龄和成绩 struct student int num; char name20; char sex; float score; ; struct student stud30;numnamesexscore1Liyangw852Tangyim91 16或:或:struct student char name15; char sex; int age; float score; stud30;17 例:例: stud11.score 例:例:(113)18 例:例:struc

11、t student char name15; char sex; int age; float score; ; struct student stud=li,w,19,85,tang,m,19,90;19 例例1:设有三个候选人,统计得票结果设有三个候选人,统计得票结果 (114) 例例2:构造通信录的程序,完成数据的输入、输出、删除构造通信录的程序,完成数据的输入、输出、删除 (116)203 3 结构与函数结构与函数( (略略) ) 例:将一个复数的直角坐标转换成极坐标例:将一个复数的直角坐标转换成极坐标 (117) 例:例:(118) 例:例:教材教材P165 例例6-3214 4 结

12、构指针结构指针 该结构体变量占据内存段的起始地址该结构体变量占据内存段的起始地址 例:例:struct person char name15; int age; float wage; ; struct person worker,*p;223. 结构指针的赋值结构指针的赋值 结构指针变量名结构指针变量名=&结构体变量名结构体变量名; 例:例:p=&worker;4. 利用结构指针访问结构成员利用结构指针访问结构成员 1) (*结构指针变量名结构指针变量名).结构成员变量名结构成员变量名 例:例:gets(*p).name); (*p).age=20; (*p).wage=50

13、0; 注:指针前后的括号不能少注:指针前后的括号不能少23 结构指针变量名-结构成员变量名 例:例:gets(p-name); p-age=20; p-wage=500; 注:注:对非结构指针进行操作时,仍然必须用对非结构指针进行操作时,仍然必须用.运算符运算符 结构体变量名结构体变量名.成员名成员名 (*结构指针变量名结构指针变量名).结构成员变量名结构成员变量名 结构指针变量名结构指针变量名-结构成员变量名结构成员变量名24 +p-age 结构成员结构成员age的值加的值加1 &p-age 代表的是代表的是age的地址的地址 p-age+ p指向的结构体变量中的成员指向的结构体变量

14、中的成员age的值,用的值,用完该值后使其加完该值后使其加1 例:例:(119)25 例:例:struct person char name15; int age; float wage; ; struct person worker15; struct person *p; p = work;p“zhao”22358.79“qian”40500.00p+1worker0worker1 261. p+1是指向下一个数组元素的地址是指向下一个数组元素的地址 例:设:例:设:p=worker; 则:则:(+p)-age 在访问在访问age前使前使p加加1 2. p不能指向某一数组中的某一成员不能指

15、向某一数组中的某一成员 例:例:p=&worker0.age; 3. 如果地址类型不相同,可进行强制类型转换如果地址类型不相同,可进行强制类型转换 例:例:(struct person *)&; 例:例:(1110) 例:例: (1111)27 例:例: (1112) 285 5 结构函数和结构指针函数结构函数和结构指针函数 从键盘输入星期几的代码从键盘输入星期几的代码(06),输出该日的航班号和到,输出该日的航班号和到达城市达城市 (1115) 29 从键盘输入星期几的代码从键盘输入星期几的代码(06),输出该日的航班号和到达,输出该日的航班号和到达城市

16、城市 (1116)306 6 共用体共用体( (联合联合) ) 例:例:union data int i; char ch; ; 31 例:例:union data int i; char ch; value; 例:例:union data int i; char ch; ; union data value;32 例:例:union int i; char ch; value;33 例:例:value.i=100; value.ch=A; 例:例:union data *ptr; ptr=&value; ptr-i=100; ptr-ch=A;34 1. 1. 共用体变量共享同一段内

17、共用体变量共享同一段内存空间存空间, ,所占内存空间等于它所占内存空间等于它最长成员的长度。最长成员的长度。 2. 2. 共用体变量的地址和各成共用体变量的地址和各成员的地址都是同一地址员的地址都是同一地址 3. 3. 不能对共用体变量进行初不能对共用体变量进行初始化始化chiunion data int i; char ch; value;354. 共用体和结构体可以相互嵌套共用体和结构体可以相互嵌套 例:定义一个有关记录书籍、杂志、文章方面信息的共用体例:定义一个有关记录书籍、杂志、文章方面信息的共用体 union entry struct book char author15; char title20; book; struct article char author15; char title20; char journal20; artic; info;36访问的方式:访问的方式:1)

温馨提示

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

评论

0/150

提交评论