第10章 结构体与共用体.ppt
《第10章 结构体与共用体.ppt》由会员分享,可在线阅读,更多相关《第10章 结构体与共用体.ppt(56页珍藏版)》请在麦多课文档分享上搜索。
1、第10章 结构体与共用体,概述 结构体 共用体 枚举类型,2,结构简介,存储一个班级中 5 名学员的信息(学号、姓名、性别和成绩),问题:,I. 使用数组,解决方案:,score,num,sex,name,不能建立数组间的关系,II. 使用多维数组,C 语言不允许一个数组包含多种数据类型,III. 使用结构,C 语言引入了称为结构的数据存储方式,“结构” 是一种构造数据类型,它是由若干数据项组合而成的复杂数据对象,这些数据项称为结构的成员。,10.1 概述,结构体(structure)是用户自定义的一种数据类型,包含若干个类型不同的数据项。 用途:把不同类型的数据组合成一个整体。而分别用独立变
2、量来表示不能反映它们之间的内在联系。,例:定义一个结构体类型student,包含学号、姓名、性别、年龄、成绩、家庭地址。,10.1 概述,结构体类型的定义,struct 结构体名 类型标识符 成员名1;类型标识符 成员名2; ;,struct是关键字,不能省略,合法标识符 可省略:无名结构体,成员类型可以是基本类型或构造类型,必须有分号,5,定义结构,struct structurename datatype variable1;datatype variable2;. ;,结构成员,;,结构名,struct,student,int num;,char name20;,char sex;,定义
3、结构,float score;,C 语言中的有效数据类型,6,定义结构,struct student int num;char name20;char sex;float score; ;,num,name,sex,student,结构定义并不预留内存,结构定义放置在程序的开始部分,位于头文件声明之后,score,结构定义仅描述了一个结构的形式。如果要在程序里使用结构,需要声明结构变量。,struct date int year; int month;int day;,struct std_info int num ; char name20; char sex; float score;ch
4、ar addr30;struct date birthday;,日期结构体类型:由年、月、日三项组成,学生信息结构类型:由学号、姓名、性别、成绩、地址和生日共6项组成,10.1.1结构体变量的定义,间接定义法: 先定义结构体类型,后定义结构体变量,struct student int num ; char name20; char sex;int age; float score;char addr30; struct student stu1,stu2;,直接定义法: 在定义结构类型的同时,定义结构变量,struct student int num ; char name20; char s
5、ex;int age; float score;char addr30;stu1,stu2;,结构体类型名student可以不写,struct student int num ; char name20; char sex;int age; float score;char addr30;stu1,stu2;,stu1:,num name sex age score addr,stu1在内存中共占字节数: 2+20+1+2+4+30=59,10.1.3 结构体变量的引用,结构体变量的引用原则 结构体变量不能整体输入输出,要通过成员运算符“.”,逐个访问其成员,且访问的格式为:结构体变量.成员,
6、struct date int year; int month;int day; struct date birth;,printf(“%d,%d,%d“,birth); printf(“%d,%d,%d“,birth.year, birth.month,birth.day);,“.”是成员运算符,优先级最高,如果某成员本身又是一个结构类型,则只能通过多级的分量运算,对最低一级的成员进行引用。结构变量.成员.子成员.最低级子成员,引用结构变量student中的birthday成员的格式分别为: student.birthday.year student.birthday.month stude
7、nt.birthday.day,结构体变量的引用原则,struct std_info int num ; char name20; char sex; float score;struct date birthday;student;,struct date int year; int month;int day;,num name sex score birthday,student:,对最低一级成员,可像同类型的普通变量一样,进行相应的各种运算。,结构体变量的初始化,一般形式结构体类型名 结构体变量=初值表; 说明 若某成员本身又是结构体类型,则该成员的初值为一个初值表 初值的数据类型,应
8、与结构变量中相应成员的类型一致,struct std_info int num ; char name20; char sex; float score;struct date birthday;; struct std_info student=102, “Zhangsan“, M, 85,1980,9,20 ;,struct student int num;char name20;char sex;float score; ; struct student student1,student2;,struct student student1=1,“Yao Ming “,M,90.5;,1,
9、Yao Ming,M,赋值的顺序应与成员声明时的顺序一样;允许初始化语句中的值的数目比结构成员数目少。,student1.num,student1.name,student1.sex,90.5,student1.score,结构变量初始化,student2.num=1; student2.name=“Zhang Zi Liang“; student2.sex=M; printf(“请输入成绩:n“); scanf(“%f“,结构变量赋值,1,Zhang Zi Liang,M,用输入语句或赋值语句来给结构变量的各个成员赋值,78,78,student3 = student2;,1,Zhang Z
10、i Liang,M,78,问题描述: 根据学员的成绩,输出不及格学员的详细信息。,使用结构示例,#include struct student int num;/学号char *name;/姓名char sex;/性别float score;/成绩 ; void main() static struct student stu1=1,“李亚鹏“,M,61; static struct student stu2=2,“周晶晶“,F,92.5; static struct student stu3=3,“姚光明“,M,59; printf(“不及格学员的名单如下:n“);if(stu1.score
11、=60 ,不及格学员的名单如下:,3 姚光明 M 59.00,1,李亚鹏,M,78,2,周晶晶,F,92,3,姚光明,M,59,struct std_info int num ; char name20; char sex; struct date birthday;;main() struct std_info stu=102, “Zhangsan“, M, 1980,9,20 ; printf(“Num: %dn“,stu.num); printf(“Name: %sn“,stu.name); printf(“Sex: %cn“,stu.sex); printf(“Birthday: %d
12、-%d-%dn“,stu.birthday.year,stu.birthday.month, stu.birthday.day); ,例 定义一个结构变量stu,用于存储和显示一个学生的基本情况。,struct std_info stu; scanf(“%d%s %c%d%d%d“, &stu.num,stu.name,&stu.sex,&stu.birthday.year,&stu.birthday.month,&stu.birthday.day);,10.2结构体数组,定义:结构数组的每一个元素,都是结构类型数据,均包含结构类型的所有成员。,struct student int num ;
13、 char name20; char sex; int age;float score;; struct student stu3 ;,stu0 stu1 stu2,结构体数组初始化: 结构体类型名 结构体数组名n初值表1,初值表2,.,初值表n;,struct student int num ; char name20; char sex; int age;float score;; struct student stu3101,“Lilin“,M,18,87.5,102,“Zhanghua“,M,18,99,103,Wuli“,F,19,78.5 ;,例定义结构类型struct std_i
14、nfo,定义一个结构数组stu,用于存储和显示三个学生的基本情况。,struct date int year; int month;int day; struct std_info int num ; char name20; char sex; struct date birthday; stu3=102,“Zhangsan“,M,1980,9,20, 105,“Lisi“,M,1980,8,15, 112,“Wangwu“,F,1980,3,10 ;,main() int i;printf(“No. Name Sex Birthdayn“);for(i=0; i3; i+) printf(
15、“%-7d“,stui.num);printf(“%-9s“,stui.name);printf(“%-4c“,stui.sex);printf(“%d-%d-%dn“,stui.birthday.year, stui.birthday.month,stui.birthday.day); ,程序运行结果: No. Name Sex Birthday 102 Zhangsan M 1980-9-20 105 Lisi M 1980-8-15 112 Wangwu F 1980-3-10, 统计后选人选票,struct person char name20;int count; leader3=“
16、Lian”,0,“ABian”,0,”Song“,0; 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+)printf(“%5s:%dn“,leaderi.name,leaderi.count); ,10.3 指向结构体类型数据的指针,指向结构体变量的指针,结构体变量在内存中的起始地址称为结构体变量的指针。,struct studen
17、t int num ; char name20; char sex; int age;float score;; main() struct student stu;struct student *p=,struct student int num ; char name20; char sex; int age;float score;; main() struct student stu;struct student *p=,引用结构体变量成员的三种形式:,结构体变量.成员名 stu.num (*p).成员名 (*p).num p-成员名p-num,若struct student stu;
18、 struct student *p=&stu;则,结构体成员运算符“.“和“-“的比较: 二者的优先级相同,自左向右结合 运算符“.“前面只能是结构体变量名或(*p) 运算符“-“前面只能是指向结构体的指针变量名,不能是其它变量名stu-num,分析下列表达式: p-num p-num+ +p-num,设有以下语句: struct stint n;struct st *next; static struct st a3=5, 则表达式( )的值是6。 A.p+-n B.p-n+ C.(*p).n+ D.+p-n,D,指向结构体数组的指针,struct student int num ; ch
19、ar name20; char sex; int age;; struct student stu3101,“Lilin“,M,18,102,“Zhanghua“,M,18,103,Wuli“,F,19, ;struct student *p=stu;main() for( ; pnum,p-name,p-sex); ,说明: 如果指针变量p指向结构体数组,则p+1指向结构体数组的下一个元素,而不是当前元素的下一个成员。 如果指针变量p指向一个结构变量(或结构数组),就不能再使之指向结构体变量(或结构数组元素)的某一成员。p=stu; p=stu.name; (+p)-num (p+)-num
20、,下面程序的输出结果为( )。 struct st int x; int *y; *p; int dt4=10,20,30,40; struct st aa4=50, A.10 B.50 C. 51 D.60 20 60 60 70 20 21 21 31,dt,aa,x,y,&dt0 &dt1 &dt2 &dat3,p,p+,用结构体变量和指向结构体的指针作函数参数,用结构体类型数据作为函数参数有以下三种形式: 用结构体变量的成员作参数 用法与普通变量作参数相同,值传递 用结构体变量作参数 函数的实参和形参必须都是结构体变量,程序效率低,不主张用 用指向结构体变量的指针作参数提高运行效率,1
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 10 结构 共用 PPT
