1、大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型 第9章 构造数据类型9.1 结构体9.2共用体9.3枚举9.4自定义数据类型大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型9.1结构体结构体9.1.1 结构体的定义9.1.2 结构体变量说明9.1.3 结构体变量的引用9.1.4 结构体数组9.1.5 结构体与函数9.1.6 指向结构体变量的指针9.1.7 动态存储分配9.1.8
2、结构体与链表大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型9.1 结构体概述 在前面章节所见到的程序中,大多数的数据都是独立的,没有内在联系的。比如:int a,b;float c,d;char name20;但在实际生活和工作中,很多不同类型的数据是存在内在联系的。比如学生基本信息。大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型学号num姓名name性别sex年龄age成绩score家庭住址addr1001LiXiaoM1989.0hunan1002JinF1890.0beijing1003FengF1960.5guangxi1
3、004RongM1874.5qinghai提问提问:输出分数最高的学生的成绩?输出分数最高的学生的成绩?大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型main()int i,num,age;float score;char sex,name20,addr30;int max=0;for(i=1;i=4;i+)scanf(“%d%d%f”,&num,&age,&score);scanf(“%c”,&sex);gets(name);gets(addr);if(maxscore)max=score;printf(“%fn”,max);大学大学C/C+语言程序设计语言程
4、序设计 第第9章章 构造数据类型构造数据类型缺点:1.变量过多,同一学生的各个数据无联系,没有整体概念,不便管理;2.操作不便(如更新数据)很明显,我们需要一种能把一个学生的各种信息构成一个整体的构造性数据结构。但目前学过的数组、指针都不合适。使用结构体类型可以处理组合数据大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型结构体类型结构体类型 “结构体结构体”是一种构造类型,它是由若干是一种构造类型,它是由若干“成员成员”组成的。组成的。每一个成员可以是每一个成员可以是基本数据类型基本数据
5、类型或者或者构造类型构造类型。struct 结构体名结构体名 类型标识符类型标识符 成员名;成员名;类型标识符类型标识符 成员名;成员名;.;成员类型可以是基本型或构造型struct是是关键字关键字,不能省略不能省略合法标识符可省:无名结构体一、结构的定义 大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型struct student int num;char name20;char sex;int age;float score;char addr30;;学号num姓名name性别sex年龄age成绩score家庭住址addr1001LiXiaoM1989.0hu
6、nan1002JinF1890.0beijing1003FengF1960.5guangxi1004RongM1874.5qinghaistruct student 为构造的结构体大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型9.1.2 结构体变量说明结构体变量说明 例例 struct student int num;char name20;char sex;int age;float score;char addr30;struct student stu1,stu2;1.先定义结构
7、体类型,再定义结构体变量 一般形式:struct 结构体名结构体名 类型标识符类型标识符 成员名;成员名;类型标识符类型标识符 成员名;成员名;.;struct 结构体名结构体名 变量名表列变量名表列;stu1,stu2为结构体变量大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型2.定义结构体类型的同时定义结构体变量定义结构体类型的同时定义结构体变量一般形式:struct 结构体名结构体名 类型标识符类型标识符 成员名;成员名;类型标识符类型标识符 成员名;成员名;.变量名表列;变量名表列;例例 struct student int num;char name20
8、;char sex;int age;float score;char addr30;stu1,stu2;大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型3.直接定义结构体变量直接定义结构体变量一般形式:struct 类型标识符类型标识符 成员名;成员名;类型标识符类型标识符 成员名;成员名;.变量名表列;变量名表列;例例 struct int num;char name20;char sex;int age;float score;char addr30;stu1,stu2;用用无名结构体无名结构体直接定义直接定义变量变量只能一次只能一次大学大学C/C+语言程序设
9、计语言程序设计 第第9章章 构造数据类型构造数据类型大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型例:结构体变量存储。例:结构体变量存储。struct student int num;char name20;char sex;int age;float score;char addr30;struct student stu1;struct student结构体类型定义描述结构的组织形式结构体类型定义描述结构的组织形式,不分配内存不分配内存;结构体变量结构体变量stu1分配内存,分配内存,占占63个字节个字节namenumsexscoreaddr4字节4字节20
10、字节1字节4字节30字节.age大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型4.结构体可嵌套。比如下列数据:学号num姓名name出生年月日birthday1001LiXiao1989.12.11002Jin1989.11.121003Feng1989.2.11004Rong1990.5.7用什么类型表示合适?大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型struct date int month;int day;int year;struct student int num;char name20;struct date bi
11、rthday;stu;numnamebirthdaymonthdayyearstruct student int num;char name20;struct date int month;int day;int year;birthday;stu;numnamebirthdaymonthdayyear大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型结构体课堂练习结构体课堂练习1:1.当定义一个结构变量时,系统分配给它的内存是()。A.各成员所需内存量的总和 B.结构中第一个成员所需内存
12、量C.成员中占内存量最大的容量 D.结构中最后一个成员所需内存量2已知:struct int k;char c;float a;test;则sizeof(test)的值是()。A6 B7C8 D9DA大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型3.如下说明语句,则下面叙述不正确的是()。struct stu int a;float b;stutype;A)struct是结构类型的关键字B)struct stu是用户定义的结构类型C)stutype是用户定义的结构类型名D)a和b都是结
13、构成员名C大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型成员成员(分量分量)运算符运算符优先级优先级:1结合性结合性:从左向右从左向右引用方式:结构体变量名结构体变量名.成员名成员名例 struct student int num;char name20;char sex;int age;float score;char addr30;stu1,stu2;stu1.num=10;stu1.sex=M;stu1.score+=stu2.score;stu1.age+;9.1.3 结构体变
14、量的引用结构体变量的引用引用规则 结构体变量不能整体引用不能整体引用,只能引用变量成员成员大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型 可以将一个结可以将一个结构体变量赋值给另一个结构体变量构体变量赋值给另一个结构体变量 结构体嵌套时结构体嵌套时逐级引用逐级引用例 struct student int num;char name20;struct date int month;int day;int year;birthday;stu1,stu2;stu1.birthday.year
15、=2010stu1=stu2;9.1.3 结构体变量的引用结构体变量的引用引用规则大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型4.已知学生记录描述为:struct student int no;char name20;char sex;struct int year;int month;int day;birth;s;设结构变量s中的“birth”应是“1985年10月1日”,则下面正确的赋值方式是()。A)year=1985 B)birth.year=1985 month=10 b
16、irth.month=10 day=1 birth.day=1C)s.year=1985 D)s.birth.year=1985 s.month=10 s.birth.month=10 s.day=1 s.birth.day=1D大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型学号num姓名name性别sex年龄age成绩score家庭住址addr1001LiXiaoM1989.0hunan1002JinF1890.0beijing1003FengF1960.5guangxi1004RongM1874.5qinghai结构体例结构体例1:输出下面数据中分数最高的学
17、生姓名与分数?输出下面数据中分数最高的学生姓名与分数?第一步:如何输入每个学生的信息?第一步:如何输入每个学生的信息?方式二:初始化方式一:赋值大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型struct stu int num;char name20;char sex;int age;float score;char addr30;stu1,stu2;main()stu1.num=1001;strcpy(stu1.name,LiXiao);scanf(%c%d%f,&stu1.sex,&stu1.age,&stut1.score);strcpy(stu1.add
18、r,hunan);方式一、结构体变量的赋值方式一、结构体变量的赋值 大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型struct student int num;char name20;char sex;int age;float score;char addr30;struct student stu1=1001,LiXiao,M,19,89.0,“hunan”;struct student int num;char name20;char sex;int age;float scor
19、e;char addr30;stu1=1001,LiXiao,M,19,89.0,“hunan”;方式二、初始化方式二、初始化大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型学号num姓名name性别sex年龄age成绩score家庭住址addr1001LiXiaoM1989.0hunan1002JinF1890.0beijing1003FengF1960.5guangxi1004RongM1874.5qinghai结构体例结构体例1:输出下面数据中分数最高的学生姓名与分数?输出下面数据中分数最高的学生姓名与分数?程序如下:大学大学C/C+语言程序设计语言程序设计
20、 第第9章章 构造数据类型构造数据类型#include#includestruct stu int num;char name20;char sex;int age;float score;char addr30;stu1=1001,LiXiao,M,19,89.00,hunan,stu2=1002,Jin,F,18,90.00,beijing,stu3=1003,Feng,F,19,60.50,guangxi,stu4=1004,Rong,M,18,74.50,qinghai;初始化数据main()float maxscore=0;char maxname30;if(maxscorestu1
21、.score)maxscore=stu1.score;strcpy(maxname,stu1.name);if(maxscorestu2.score)maxscore=stu2.score;strcpy(maxname,stu2.name);if(maxscorestu3.score)maxscore=stu3.score;strcpy(maxname,stu3.name);if(maxscorestu4.score)maxscore=stu4.score;strcpy(maxname,stu4.name);printf(姓名:%s 最高分:%fn,maxname,maxscore);每个学生
22、信息虽然包含不同类型数据,但每个学生的属性都是一样的。可以用数组表示。大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型 9.1.4 结构体数组结构体数组结构体数组的定义三种形式:形式一:struct student int num;char name20;char sex;int age;struct student stu2;形式二:struct student int num;char name20;char sex;int age;stu2;形式三:struct int num;c
23、har name20;char sex;int age;stu2;numnamesexagenumnamesexagestu0stu125B大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型结构体数组初始化顺序初始化:struct student int num;char name20;char sex;int age;struct student stu=100,“Wang Lin”,M,20,101,“Li Gang”,M,19,110,“Liu Yan”,F,19;分行初始化:str
24、uct student int num;char name20;char sex;int age;struct student stu=100,“Wang Lin”,M,20,101,“Li Gang”,M,19,110,“Liu Yan”,F,19;全部初始化时维数可省结构体数组引用引用方式:结构体数组名下标.成员名 stu0.num stu1.name大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型学号num姓名name性别sex年龄age成绩score家庭住址addr1001LiXiaoM1989.0hunan1002JinF1890.0beijing100
25、3FengF1960.5guangxi1004RongM1874.5qinghai结构体例结构体例1:输出下面数据中分数最高的学生姓名与分数?输出下面数据中分数最高的学生姓名与分数?程序修改如下:大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型#include#includestruct stu int num;char name20;char sex;int age;float score;char addr30;stu4=1001,LiXiao,M,19,89.00,hunan,1002,Jin,F,18,98.00,beijing,1003,Feng,F,1
26、9,60.50,guangxi,1004,Rong,M,18,74.50,qinghai;数组初始化main()float maxscore=0;char maxname30;int i;for(i=0;i4;i+)if(maxscorestui.score)maxscore=stui.score;strcpy(maxname,stui.name);printf(姓名:%s 最高分:%fn,maxname,maxscore);大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型姓名name选票countLi0Zhang0Wang0结构体例结构体例2:10人投票,请统计
27、3个候选人的选票情况。程序如下:大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型#include#include struct person char name20;int count;leader3=li,0,zhang,0,wang,0;数组初始化void 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+;pri
28、ntf(n);for(i=0;i3;i+)printf(%5s:%dn,leaderi.name,leaderi.count);大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型结构体课堂练习结构体课堂练习2:1有如下定义:struct person char name9;int age;struct person class10=Johu,17,Paul,19,Mary,18,Adam,16;根据上述定义,能输出字母M的语句是()。A、printf(%cn,class3.name);B、
29、printf(%cn,class3.name1);C、printf(%cn,class2.name1);D、printf(%cn,class2.name0);D大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型2下面程序的运行结果是()。#include stdio.hmain()struct cmplx int x;int y;cnum2=1,3,2,7;printf(dn,cnum0.y/cnum0.xcnum1.x);A0B1 C3D6D大学大学C/C+语言程序设计语言程序设计 第第
30、9章章 构造数据类型构造数据类型大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型9.1.5 结构体与函数结构体与函数 1结构体变量作为函数的参数结构体变量作为函数的参数 结构体变量作为函数参数时,形参与实参的结构体变量类型应当完全一致,函数调用时直接将实参结构体变量的各个成员的值全部传递给形参结构体变量。大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型【例9.7】用函数实现数组元素输出。#includestdio.h”struct stu int num;c
31、har name20;char sex;float score;student5=1001,LiXiao,M,89.00,1002,Jin,F,90.00,1003,Feng,F,60.50,1004,Rong,M,74.50,1005,ZhuJi,F,55.00;void print(struct stu s)/定义print函数 printf(%d%s%c%fn,s.num,s.name,s.sex,s.score);void main()int i;for(i=0;i成员名成员名结构体变量名结构体变量名.成员名指向运算符优先级:1结合方向:从左向右例 指向结构体的指针变量例 int n;
32、int *p=&n;*p=10;n=10大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型#include struct stu int num;char name20;char sex;float score;student1=1001,LiXiao,M,89.00,*pstu;void main()pstu=&student1;printf(“%dn%sn,(*pstu).num,(*pstu).name);printf(“%cn%.2fnn,(*pstu).sex,(*pstu).s
33、core);printf(“%dn%sn,pstu-num,pstu-name);printf(“%cn%.2fnn,pstu-sex,pstu-score);struct stu int num;char name20;char sex;float score;stu1,stu2,*pstu1=&stu1;struct stu*pstu2;pstu2=&stu2;/指针变量pstu2指向stu2 stu1.num=101;(*pstu1).num=101大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据
34、类型构造数据类型结构体课堂练习结构体课堂练习3:1有定义如下:struct sk int a;float b;data,*p;如果p=&data;则对于结构变量data的成员a的正确引用是()。A(*).data.aB(*p).a Cp-data.aDp.data.aB大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型2已知:struct st int n;struct st next;static struct st a3=1,&a1,3,&a2,5,&a0,p;如果下述语句的显示是4,
35、则对指针p的赋值是()。printf(“%d”,+(p-next-n);Ap=&a0;Bp=&a1;Cp=&a2;Dp=&a3;A大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型3若有以下定义和语句:struct student int age;int num;struct student stu3=1001,20,1002,19,1003,21;void main()struct student*p;p=stu;则以下不正确的引用是()。A(p+)-num Bp+C(*p).num D
36、p=&stu.ageD大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型4.有以下程序:#include struct stu int num;char name10;int age;void fun(struct stu*p)printf(%sn,(*p).name);main()struct stu students3=9801,Zhang,20,9802,Wang,19,9803,Zhao,18;fun(students+2);输出结果是 。A、Zhang B、Zhao C、Wang
37、 D、18B大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型9.1.7 动态存储分配动态存储分配 下列数组定义正确吗?int n=10;int n=10;int an;int an;错,不允许用变量表示数组长度 但是在实际的编程中,经常可能出现所需的内存空间取决于实际输入的数据的情况。也就是需要动态地分配内存空间。语言提供动态内存管理函数动态内存管理函数大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型函数形式:(类型说明符*)malloc(size)功能:在
38、内存的动态存储区中分配一块长度为“size”字节的连续区域。(类型说明符*)用于强制类型转换。函数的返回值为该区域的首地址(指针形式)首地址(指针形式)。1.分配内存空间函数mallocpc=(char*)malloc(100);分配100个字节的内存空间,并强制转换为字符数组类型,函数的返回值为指向该字符数组的指针,把该指针赋予指针变量pc。大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型函数形式:(类型说明符*)calloc(n,size)功能:在内存动态存储区中分配n n块块长度为“size”size”字节字节的连续区域。函数的返回值为该区域的首地址。2.分
39、配内存空间函数 calloc ps=(struct stu*)calloc(2,sizeof(struct stu);其中的sizeof(struct stu)是求stu的结构长度。因此该语句的意思是:按stu的长度分配2块连续区域,强制转换为stu类型,并把其首地址赋予指针变量ps。大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型函数形式:free(void*ptr);功能:释放指针ptr所指向的内存空间。如:free(pc);free(ps);3.释放内存空间函数free以上3个函数均包含在头文件stdlib.h中#include 大学大学C/C+语言程序设计
40、语言程序设计 第第9章章 构造数据类型构造数据类型大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型9.1.8结构体与链表结构体与链表 链表是指将若干个数据项按一定的原则连接起来的表。其中每一个数据称为节点。链表连接的原则是:前一个节点指向下一个节点;那么结构体与链表有什么关系呢?大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型struct entrystruct entry int value;/int value;/存放整数存放整数 struct entr
41、y struct entry*next;/next;/指向指向entryentry结构的结构的;100 200 300节点一节点二节点三怎样表示节点以及节点之间的关系?大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型创建链表 struct entry n1,n2,n3;执行下列语句可使n1结构的next指针指向n2结构。n1.next=&n2;下列语句可加入n3节点。n2.next=&n3;n1.valuen1.nextn2.valuen2.next 100 200n1.valuen1.nextn2.valuen2.nextn3.valuen3.next 100
42、200 300大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型【例例9.79.7】#include#includemain()main()struct entrystruct entry int value;int value;struct entry struct entry*next;next;struct entry struct entry n1,n2,n3;n1,n2,n3;int i;int i;n1.value=100;n1.value=100;n2.value=200;n2.value=200;n3.value=300;n3.value=300;n
43、1.next=&n2;n1.next=&n2;n2.next=&n3;n2.next=&n3;i=n1.next-value;i=n1.next-value;printf(printf(%dn,i);,i);printf(printf(%dn,n2.next-value);,n2.next-value);结果输出:结果输出:200200300300大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型n1.valuen1.nextn2.valuen2.nextn3.valuen3.next链表结点的删除链表结点的删除语句:n1.next=n2.next;或n1.next
44、=&n3;链表结点的插入链表结点的插入n1.valuen1.nextn2.valuen2.nextn3.valuen3.nextn2_3.valuen2_3.next语句:n2_3.next=&n3;n2.next=&n2_3大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型链表练习:1、设有以下语句:struct st int n;struct st*next;static struct st a3=5,&a1,7,&a2,9,0,*p;p=&a0;则表达式()的值是6。A、p+-n B
45、、p-n+C、(*p).n+D、+p-nD大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型9有以下结构体变量的定义,如图所示,指针p指向变量a,指针q指向变量b,则不能把节点b链接到节点a之后的语句是()。struct node char data;struct node *next;a,b,*p=&a,*q=&b;Aa.next=q;Bp.next=&b;C.p-next=&b;D(*p).next=q;B大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型大
46、学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型2、分析以下程序的输出结果。#include#include#include struct STUD int no;char*name;int score;main()struct STUD st1=1,Mary,85,st2;st2.no=2;st2.name=(char*)malloc(sizeof(10);strcpy(st2.name,Smith);st2.score=78;printf(%sn,(st1.scorest2.score?st1.name:st2.name);Mary大学大学C/C+语言程序设计语
47、言程序设计 第第9章章 构造数据类型构造数据类型大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型3、分析以下程序的输出结果。#include#include struct STUD int no;struct STUD*next;main()struct STUD*p,*q;int i;p=q=(struct STUD*)calloc(3,sizeof(struct STUD);for(i=1;ino=i*100;for(i=1;ino);printf(n);100 200300大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型大学大学
48、C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型9.3共用体共用体 编号no姓名name性别sex职业prof 学号 num职务title1LiXiaoM学生201701012JinF学生201701023FengF教师讲 师4RongM教师副教授 设有下列若干人员的数据,请用相应数据结构表示:可以看出,学生和教师所包含的最后一列数据是不同的,怎样表示这样的数据结构?共用体大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型 共用体(union)把几种不同类型的值存放在
49、同一内存区域中,例如,把一个整型值和字符值放在同一区域中,既能以整数存取,又能以字符存取。大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型定义一个共用体类型的一般形式为:union 共用体名 成员列表;;成员表中含有若干成员,成员的一般形式为:类型说明符类型说明符 成员名成员名例2:union data int i;char ch;float f;一、共用体的定义一、共用体的定义例1:union prof int i;char title 10;大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型二、共用体变量的说明 共用体变量的说明和结
50、构变量的说明方式相同,也有三种形式。先定义,再说明先定义,再说明 定义同时说明定义同时说明 直接说明直接说明 union data int i;char ch;float f;union data a,b;union int i;char ch;float f;a,b;union data int i;char ch;float f;a,b;大学大学C/C+语言程序设计语言程序设计 第第9章章 构造数据类型构造数据类型union data int i;char ch;float f;a,b;图9.11 共用体存储结构三、共用体的存储结构三、共用体的存储结构 共用体变量的占用内存空间的大小等于成