得程序设设 20023
C语言程序设计 2002 年 第 八 章 结构与联合
第八章结构与联合 C的构造类型: 1)数组,(2)结构,(3)联合。 在实际事务处理中,一些对象有多个属性,如学生成绩档案处 理,学生是被处理的基本对象,有多个属性: (a)学号(长整数或字符串)、(b)姓名(字符串) (c)性别(枚举常量或字符)、(d)年龄(整数或短整数) (e)各科成绩(单精度浮点数数组) 表示这些属性的数据构成一个学生的数据记录。由于数据记录 的每个数据成员的类型不相同,不能用数组表示,但可以用 个结构变量来表示,全班学生则用一个结构数组表示。 结构变量来实现将多个不一定相同类型的数据集成在一起表示 个数据对象,其各个成员代表数据对象的各个属性
第八章 结构与联合 C的构造类型: (1)数组, (2) 结构, (3) 联合。 在实际事务处理中,一些对象有多个属性,如学生成绩档案处 理,学生是被处理的基本对象,有多个属性: (a) 学号(长整数或字符串)、(b) 姓名(字符串) 、 (c) 性别(枚举常量或字符)、(d)年龄(整数或短整数) (e) 各科成绩(单精度浮点数数组)、…… 表示这些属性的数据构成一个学生的数据记录。由于数据记录 的每个数据成员的类型不相同,不能用数组表示,但可以用一 个结构变量来表示,全班学生则用一个结构数组表示。 结构变量来实现将多个不一定相同类型的数据集成在一起表示 一个数据对象,其各个成员代表数据对象的各个属性
8.1结构的说明的引用 8.1.1结构的说明 结构说明任务就是定义结构的类型和用定义的结构类型来 说明结构变量。 、结构类型的定义形式 存储类型区分符 struct结构名{结构成员说明表}; 例: struct stud{/定义一个能表示学生属性的结构类型* long num char name 10: char sex; short age int score4;四门课程的成绩*
8.1 结构的说明的引用 8.1.1 结构的说明 结构说明任务就是定义结构的类型和用定义的结构类型来 说明结构变量。 一、结构类型的定义形式 存储类型区分符 struct 结构名{结构成员说明表}; 例:struct stud{ /*定义一个能表示学生属性的结构类型*/ long num; char name[10]; char sex; short age; int score[4]; /*四门课程的成绩*/ };
二、结构类型的变量说明 (A)先定义类型,后说明变量: struct stud studentI student2 (B)定义类型的同时说明变量: struct stud{/定义一个能表示学生属性的结构类型 long num char name[10 char sex: short age: int score|4;四门课程的成绩* 3 student, student2
二、结构类型的变量说明 (A) 先定义类型,后说明变量: struct stud student1,student2; (B) 定义类型的同时说明变量: struct stud{ /*定义一个能表示学生属性的结构类型*/ long num; char name[10]; char sex; short age; int score[4]; /*四门课程的成绩*/ } student1,student2;
(C)定义匿名结构类型的同时说明变量,该类型仅能使用 次: struct{/定义一个能表示学生属性的结构类型 long num; char name 10: char sex: short age: int score4];/四门课程的成绩* 3 studentI, student2
(C)定义匿名结构类型的同时说明变量,该类型仅能使用一 次: struct { /*定义一个能表示学生属性的结构类型*/ long num; char name[10]; char sex; short age; int score[4]; /*四门课程的成绩*/ } student1,student2;
三、结构变量的初始化 struct stud i long num; char name 10e char sex: short age int score4];/四门课程的成绩* } studentI={98183341;“ zhang san”,m’,18,{80,90,78,86}}; struct stud student2={98183342;“Lisi”,m’,18,{85,91,88,87}; 注意:初值表中各初始化表达式的类型应与定义成员的类型 对应
三、结构变量的初始化 struct stud { long num; char name[10]; char sex; short age; int score[4]; /*四门课程的成绩*/ } student1={98183341;“zhang san”,’m’,18,{80,90,78,86}}; struct stud student2={98183342;“Li Si”,’m’,18,{85,91,88,87}}; 注意:初值表中各初始化表达式的类型应与定义成员的类型一 一对应
8.1.2结构的引用 、引用结构变量 (1)同类型的结构变量可以相互赋值。 例 struct stud sl=98183341, Zhang san",'m, 18,, 78, 869 struct stud s2={98183342,“Lisi,m3,18,85,91,88,87},s3; s3=s1;sl=s2;s2=s3; 注:s1={98183341;“ zhang san”,m’,18,{80,90,78,86};非法语句
8.1.2 结构的引用 一、引用结构变量 (1) 同类型的结构变量可以相互赋值。 例: struct stud s1= {98183341,“zhang san”,’m’,18,{80,90,78,86}};, struct stud s2=={98183342,“Li Si”,’m’,18,{85,91,88,87}},s3; s3=s1;s1=s2;s2=s3; 注:s1= {98183341;“zhang san”,’m’,18,{80,90,78,86}};非法语句
student &student num 4字节 &student num (2)结构变量可以取 name10字节 地址。 student name 结构变量也分配连续存 student 储单元,例 s1字节 &student. age age2字节 truct stud student student score score4*4字 &student score 0l
(2) 结构变量可以取 地址。 结构变量也分配连续存 储单元,例: struct stud student; num 4字节 name 10字节 sex(1) 1 字节 age 2 字节 score 4*4 字 节 student &student &student.num student.name &student.sex &student.age student.score &student.score[0]
成员选择运算符“及结构的引用 形式:结构变量名成员名 struct stud si, sInum=98183341; scanf(“ld”,& sInum) strcpy( sI name,“ zhang san”); scanf(“%s”,sl.name) Slsex- m, scant(%c”,&sl.sex); sIage=18: scanf(%hd, &sl age) sl score[0=80 scanf("%d, &sl score 0D; SI score I=87; scanf(“%d”,& sI score[1]); sI score[2=90; scanf( %d", &sl score 2D); sI score3=95; scanf(%d, &sl score 3 D;
二、成员选择运算符‘.’及结构成员的引用 形式: 结构变量名.成员名 struct stud s1; s1.num= 98183341; scanf(“%ld”,&s1.num); strcpy(s1.name,“zhang san”); scanf(“%s”,s1.name); s1.sex=’m’; scanf(“%c”,&s1.sex); s1.age=18; scanf(“%hd”,&s1.age); s1.score[0]=80; scanf(“%d”,&s1.score[0]); s1.score[1]=87; scanf(“%d”,&s1.score[1]); s1.score[2]=90; scanf(“%d”,&s1.score[2]); s1.score[3]=95; scanf(“%d”,&s1.score[3]);
二、嵌套的结构 结构成员可以是结构,形成结构的嵌套形式。 strout date char month name 4; Iint day; int year; struct studi long num; char name 10l; char sex: struct date birthday; int score 4;)
二、嵌套的结构 结构成员可以是结构,形成结构的嵌套形式。 strcut date{ char month_name[4]; int day; int year; } struct nstud{ long num; char name[10]; char sex; struct date birthday; int score[4]; }