第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
4、 score; char 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 ; ch
5、ar name20; char sex; 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
7、student.birthday.month student.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 s
9、tudent student1=1,“Yao Ming “,M,90.5;,1,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,用输入语句或赋值语句来给结构变量的各个成
10、员赋值,78,78,student3 = student2;,1,Zhang Zi 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,“姚光明“
11、,M,59; printf(“不及格学员的名单如下:n“); if(stu1.score=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); pr
12、intf(“Sex: %cn“,stu.sex); printf(“Birthday: %d-%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结构体数组,定义:结构数组的每一个元素
13、,都是结构类型数据,均包含结构类型的所有成员。,struct student int num ; 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,“Zhang
14、hua“,M,18,99,103,Wuli“,F,19,78.5 ;,例定义结构类型struct std_info,定义一个结构数组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;
15、 printf(“No. Name Sex Birthdayn“); for(i=0; i3; i+) printf(“%-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 198
16、0-3-10, 统计后选人选票,struct person char name20; int count; leader3=“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);
17、,10.3 指向结构体类型数据的指针,指向结构体变量的指针,结构体变量在内存中的起始地址称为结构体变量的指针。,struct student 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=,引用结构体变量成
18、员的三种形式:,结构体变量.成员名 stu.num (*p).成员名 (*p).num p-成员名 p-num,若struct student stu; struct student *p=&stu;则,结构体成员运算符“.“和“-“的比较: 二者的优先级相同,自左向右结合 运算符“.“前面只能是结构体变量名或(*p) 运算符“-“前面只能是指向结构体的指针变量名,不能是其它变量名 stu-num,分析下列表达式: p-num p-num+ +p-num,设有以下语句: struct stint n;struct st *next; static struct st a3=5, 则表达式( )
19、的值是6。 A.p+-n B.p-n+ C.(*p).n+ D.+p-n,D,指向结构体数组的指针,struct student int num ; char 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指向结构体数组的下一个元素,而不是当前元素的下一个成员。 如果指针变
20、量p指向一个结构变量(或结构数组),就不能再使之指向结构体变量(或结构数组元素)的某一成员。 p=stu; p=stu.name; (+p)-num (p+)-num,下面程序的输出结果为( )。 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+,用结构体变量和指向结构体的指针作函数参数,用结构体类型数据作为函数参数有以下三种形式: 用结构体变量的成
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 10 结构 共用
链接地址:https://www.31doc.com/p-3122308.html