c语言第11章-结构体与共用体

合集下载

C语言第11章结构体

C语言第11章结构体

29
【例】30张选票,对三名侯选人之一投票选举,输 入得票人名字,按名字计数,输出最后选举结果。 #include "stdio.h" #define N 30 struct person { char name[20]; int count; };
Li
0 Zhang 0 Wang 0
led[0].name
第十一章 结构体与பைடு நூலகம்用体
本章目标
1.理解结构体,共用体的数据类型
2.学会定义结构体、共用体的数据类型 的变量 3.能够正确使用结构体、共用体的成员
§11.1
已了解的数据类型:
引言
整型 浮点型 字符型 数组
简单数据类型
用户定义的数据类型
特点:所有的元素都是同一种类型
指针型 存在的问题:难以处理较复杂的数据
18
圆点运算符
引用形式:结构体变量名 . 成员名 其中:成员运算符’ . ‟ : 一级,自左而右;
stu1.num 引用结构体变量stu1的num成员; 引用stu1的name成员(字符指针); [i] 引用name成员的第i个元素; stu1.birthday.y 只能对最低级成员进行引用;
二、定义完结构体后,定义结构变量并初始化 struct student x2={0002, "Li Ming ", 85.5};
16
§11.4 访问结构成员
访问结构变量实质上是引用其成员 有两种运算符可访问结构成员
17
struct date { int m; int d; iny y; }; struct student { long num; char name[20]; char sex; struct date birthday; float score; char tel[15]; } stu1, stu2;

C语言程序设计第十一章 结构体与共用体

C语言程序设计第十一章 结构体与共用体

11 结构体与共用体 (1)11.1 定义一个结构的一般形式 (1)11.2 结构类型变量的说明 (2)11.3 结构变量成员的表示方法 (4)11.4 结构变量的赋值 (4)11.5 结构变量的初始化 (5)11.6 结构数组的定义 (5)11.7 结构指针变量的说明和使用 (7)11.7.1 指向结构变量的指针 (7)11.7.2 指向结构数组的指针 (9)11.7.3 结构指针变量作函数参数 (10)11.8 动态存储分配 (11)11.9 链表的概念 (12)11.10 枚举类型 (14)11.10.1 枚举类型的定义和枚举变量的说明 (14)11.10.2 枚举类型变量的赋值和使用 (15)11.11 类型定义符typedef (16)11 结构体与共用体11.1 定义一个结构的一般形式在实际问题中,一组数据往往具有不同的数据类型。

例如,在学生登记表中,姓名应为字符型;学号可为整型或字符型;年龄应为整型;性别应为字符型;成绩可为整型或实型。

显然不能用一个数组来存放这一组数据。

因为数组中各元素的类型和长度都必须一致,以便于编译系统处理。

为了解决这个问题,C语言中给出了另一种构造数据类型——“结构(structure)”或叫“结构体”。

它相当于其它高级语言中的记录。

“结构”是一种构造类型,它是由若干“成员”组成的。

每一个成员可以是一个基本数据类型或者又是一个构造类型。

结构既是一种“构造”而成的数据类型,那么在说明和使用之前必须先定义它,也就是构造它。

如同在说明和调用函数之前要先定义函数一样。

定义一个结构的一般形式为:struct 结构名{成员表列};成员表列由若干个成员组成,每个成员都是该结构的一个组成部分。

对每个成员也必须作类型说明,其形式为:类型说明符成员名;成员名的命名应符合标识符的书写规定。

例如:struct stu{int num;char name[20];char sex;float score;};在这个结构定义中,结构名为stu,该结构由4个成员组成。

预处理命令与结构体练习题答案

预处理命令与结构体练习题答案

第11章结构体与共用体一、选择题(在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项填涂在答题卡相应位置上。

)11.1 C语言结构体类型变量在程序运行期间A)TC环境在内存中仅仅开辟一个存放结构体变量地址的单元B)所有的成员一直驻留在内存中C)只有最开始的成员驻留在内存中D)部分成员驻留在内存中考生答案: 正确答案: B11.2 下列各数据类型不属于构造类型的是A)枚举型 B)共用型 C)结构型 D)数组型考生答案: 正确答案: A11.3 当说明一个结构体变量时系统分配给它的内存是A)各成员所需内存量的总和 B)结构中第一个成员所需内存量C)成员中占内存量最大者所需的容量 D)结构中最后一个成员所需内存量考生答案: 正确答案: A11.4 设有以下说明语句typedef struct{ int n;char ch[8];} PER;则下面叙述中正确的是A)PER 是结构体变量名 B)PER是结构体类型名C)typedef struct 是结构体类型 D)struct 是结构体类型名考生答案: 正确答案: B11.5 已知有如下定义:struct a{char x; double y;}data,*t;,若有t=&data,则对data 中的成员的正确引用是A)(*t).data.x B)(*t).x C)t->data.x D)t.data.x 考生答案: 正确答案: B11.6 以下程序的运行结果是#include "stdio.h"main(){ struct date{ int year,month,day; } today;printf("%d\n",sizeof(struct date));}A)6 B)8 C)10 D)12考生答案: 正确答案: A11.7 设有如下定义:struck sk{ int a;float b;} data;int *p;若要使P指向data中的a域,正确的赋值语句是A)p=&a; B)p=data.a; C)p=&data.a; D)*p=data.a; 考生答案: 正确答案: C11.8 以下对结构体类型变量的定义中,不正确的是A)typedef struct aa{ int n;float m;} AA;AA tdl;B)#define AA struct aaAA { int n;float m;} tdl;C)struct{ int n;float m;} aa;struct aa tdl;D)struct{ int n;float m;} tdl;考生答案: 正确答案: C11.9 若有下面的说明和定义struct test{ int ml; char m2; float m3;union uu { char ul[5]; int u2[2];} ua;} myaa;则sizeof(struct test )的值是A)12 B)16 C)14 D)9考生答案: 正确答案: A11.10 以下程序的输出是struct st{ int x; int *y;} *p;int dt[4]={ 10,20,30,40};struct st aa[4]={ 50,&dt[0],60,&dt[0],60,&dt[0],60,&dt[0]};main(){ p=aa;printf("%d\n",++(p->x));}A)10 B)11 C)51 D)60考生答案: 正确答案: C11.11 有以下程序:#include <stdio.h>union pw{ int i;char ch[2];}a;main(){ a.ch[0]=13;a.ch[1]=0;printf("%d\n",a.i);}程序的输出结果是A)13 B)14 C)208 D)209 考生答案: 正确答案: A11.12 已知学生记录描述为:struct student{ int no;char name[20],sex;struct{ int year,month,day;} birth;};struct student s;设变量s中的“生日”是“1984年11月12日”,对“birth”正确赋值的程序段是A)year=1984;month=11;day=12;B)s.year=1984;s.month=11;s.day=12;C)birth.year=1984;birth.month=11;birth.day=12;D)s.birth.year=1984;s.birth.month=11;s.birth.day=12;考生答案: 正确答案: D11.13 有如下定义struct person{char name[9];int age;};struct person class[10]={"John",17,"paul",19,"Mary",18,"Adam",16,};根据上述定义,能输出字母M的语句是A)printf("%c\n",class[3].name);B)printf("%c\n",class[3].name[1]);C)printf("%c\n",class[2].name[1]);D)printf("%c\n",class[2].name[0]);考生答案: 正确答案: B11.14 下列程序的输出结果是struct abc{ int a, b, c, s; };main(){ struct abc s[2]={{1,2,3},{4,5,6}}; int t;t=s[0].a+s[1].b;printf("%d\n",t);}A)5 B)6 C)7 D)8考生答案: 正确答案: B11.15 若有下面的说明和定义,则sizeof(struct aa)的值是struct aa{ int r1; double r2; float r3;union uu{char u1[5];long u2[2];}ua;} mya;A)30 B)29 C)24 D)22考生答案: 正确答案: D11.16 有以下结构体说明和变量的定义,且指针p指向变量a,指针q指向变量b。

C语言 第十一章 结构体与共用体

C语言 第十一章  结构体与共用体

第十一章结构体与共用体一、选择题1.【C】分析:C题目中是使用了typedef struct NODE,那么我们一定要指导tepydef就是替代的意思。

所以是用OLD来替代struct NODE作为结构体的类型。

同时我们要记住这里的NODE是可以省略的。

2.【B】分析:本题是考查结构体的定义。

A选项是我们一定要记住的,C选项中的x、y、z是写在结构体里面,所以它们都是结构体的成员,D选项中我们知道struct ex的组合是结构体的类型,这两个缺一不可。

选项B中的example是结构体变量名,一般在右大括号后面的是结构体变量名。

3.【B】分析:INTEGER p等价于int *p。

所以B是正确的。

INTEGER *q等价于int **q。

4.【C】分析:在本题中TT为结构体名,用关键字typedef对结构体进行说明,CIN一个具体的结构体类型名等价于struct TT, 可以用CIN来直接定义结构体变量,而不用再写struct。

A:答案不能用TT直接定义结构体变量,一般格式为(struct TT 结构体变量名);B:答案概念错误,D:答案CIN不是结构体变量,是一个具体的结构体类型名。

5.【C】分析:本题和第一题类似,也是对结构体定义的typedef的考查,B中ST不是结构体类型了,被NEW替代了,选项D中我们知道NEW是一个结构体类型,所以不是结构体变量,当出现了typedef struct 这样的定义时,在右括号出现的NEW就是结构体类型,不是结构体变量了。

6.【A】分析:由于typedef struct S 是替换的意思,所以本题目中是用T来代替struct S这个结构体类型,所以T的左右等于了struct S的作用了,也就是可以用T来定义结构体变量,如T born 中的born就是结构体变量。

当然,struct S就失去了原来的作用,不可以用来作结构体类型了。

7.【C】分析:考查的是结构体变量的赋值,data是一个结构体变量,data是用两个域的,一个是a,一个是b。

c语言-结构体与共用体

c语言-结构体与共用体
4字节
30字节
…..
结构体类型定义描述结构 的组织形式,不分配内存
c语言-结构体与共用体
11.2 定义结构体类型变量的方法
方法一:先声明结构体类型再定义变量名
一般形式
struct 结构体名
{ 类型标识符 成员名; 类型标识符 成员名; …………….
};
struct 结构体名 变量名表列;
c语言-结构体与共用标
理解为什么使用结构 定义结构 声明结构变量 访问结构成员 掌握结构作为函数参数的用法
c语言-结构体与共用体
11.1 概述
引入:
数据的基本类型:整、实、字符。 数组是构造类型:每个元素为同一类型
有些问题仅用基 本类型和数组来 描述是无法实现 的?
c语言-结构体与共用体
第11章 结构体与共用体
概述 定义结构体类型变量的方法 结构体变量的引用 结构体变量的初始化 结构体数组 指向结构体类型数据的指针 共用体 用typedef定义类型
c语言-结构体与共用体
回顾
基本数据类型:整型、实型、字符型等; 构造类型:数组、结构体、公用体 数组:有序数据的集合,每一个元素都属 于同一个数据类型。
结构体变量的初始化形式二:
struct 结构体名 {
类型标识符 成员名; 类型标识符 成员名;
……………. }结构体变量={初始数据};
例 struct student { int num; char name[20]; char sex; int age; char addr[30]; }stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”};
返回
举例:如学生情况
Num Name sex

c语言结构体与共用体

c语言结构体与共用体

•{ • 成员表列 • }变量名表列; • 三、直接定义结构类型变量 • 其一般形式为: • struct • { • 成员表列 • }变量名表列; • 即不出现结构体名。
• 关于结构体类型,有几点要说明: • 1.类型与变量是不同的概念,不 要混同。对结构体变量来说,在定义时 一般先定义一个结构体类型,然后定义 变量为该类型。只能对变量赋值、存取 或运算,而不能对一个类型赋值、存取 或运算。在编译时,对类型是不分配空 间的,只对变量分配空间。 • 2.对结构体中的成员(即"域"), 可以单独使用,它的作用与地位相当于 普通变量。关于对成员的引用方法见$ 10.3。
• 花括弧内是该结构体中的各个成员(或 称分量),由它们组成一个结构体。例 如,上例中的n.sex等都是成 员。对各成员都应进行类型说明,即 • 类型标识符 成员名 • 也可以把“成员表列”称为“域表”。 每一个成员称为结构体中的一个域。成 员名定名规则与变量名同."结构体”这 个词是根据英文单词structure译出的。 许多C语言书把structure直译为“结 构”。作者认为译作“结构”会与一般 含义上的“结构”混淆(例如,数据结 构、程序结构)。
• 结构体变量的地址主要用于作函数参数, 传递结构体的地址。 • $10.4 结构体变量的初始化 • 过去许多C版本规定,只有当结构 体变量为全局变量或静态变量时,才能 进行初始化。不能对动态局部变量进行 初始化。新版本无此限制。 • 一、对外部存储类型的结构体变 量进行初始化。 • [例10.1] •
• struct student • {1ong int num; • char name[20」; • char sex; • char addr[20」; • }a={89031,li Lin, 'M’,"123beijing Road”};

C语言编程:第十一章结构体与共用体

C语言编程:第十一章结构体与共用体
• 例如:表示一个学生的有关信息(学号,姓名,性 别 年龄,总分,地址),其具体数据情况如图所 示: num name sex age score addr
10010 Li Fun M 18 87.5 Bejing
Zhang Sumin (South China Agriculture University Computer Department ,Guangzhou 510640) zsmhome@
Zhang Sumin (South China Agriculture University Computer Department ,Guangzhou 510640) zsmhome@
11.3 结构体变量的引用
结构体变量的引用应该遵循以下原则 • 1)不能将一个结构体变量作为一个整体进行输入和
2)结构体名同标识 符命名规则;
3)分号不能省略
4)成员列表又称“域表”,每个成员也称为域。
5)指定一个结构体类型相当于指定了一个模型,它无 数据,系统对其不分配实际内存单元。
Zhang Sumin (South China Agriculture University Computer Department ,Guangzhou 510640) zsmhome@
struct { int num;
char name[10]; char sex;
int age; float score; char addr[30]; } student1,student2;
(3)
Zhang Sumin (South China Agriculture University Computer Department ,Guangzhou 510640) zsmhome@

C语言程序设计课件0911结构体与共用体

C语言程序设计课件0911结构体与共用体
typedef struct { int year, month, day; } Date; typedef struct { int num; char name[20], sex, addr[30]; float score; Date birthday; 这时定义结构体变 } Student; 量就不要写struct了。 Student st1, st2;
指向结构体变量的指针


格式:struct 结构体名 * 指针名; struct Item w={“friend”, 7}; struct Item *p; 上例可合并为: struct Item w={“friend”, 7}, *p;
指向成员运算符


可用指向结构体变量的指针来访问其成员, 这时要用到”指向成员运算符“,例如: struct Item w={“friend”, 7}, *p=&w; printf(“word=[%s], freq=%d\”, p->word, p->freq); // 此时等价于: w.word, w.freq 指向成员运算符与成员运算符的优先级都 是1,都是自左至右结合。
结构体类型的嵌套
struct Date { int year, month, day; }; struct Student { int num; char name[20], sex, addr[30]; float score; struct Date birthday; };
用typedef定义结构体类型名
结构体数组的定义
与结构体变量的定义方式类似,也有三种方 式,只需指明是数组即可。例如:

struct Item ws[3]; struct Item {char word[12]; int freq;} ws[3]; struct {char word[12]; int freq;} ws[3];
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

形式三:
struct
{ 类型标识符 成员名; 类型标识符 成员名;
……………. }结构体变量={初始数据};
例 struct { int num; char name[20]; char sex; int age; char addr[30]; }stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”};
用无名结构体直接定义 变量只能一次
说明
❖结构体类型与结构体变量概念不同
类型:不分配内存;
变量:分配内存
类型:不能赋值、存取、运算; 变量:可以
❖结构体可嵌套
❖结构体成员名与程序中变量名可相同,不会混淆
例 {st例rui❖ncstt结tmrdu构oacntt体eths类;tud型e及nt 变量的作用域与生存期
定义结构体类型的同时定义结构体变量
一般形式:
struct 结构体名
{ 类型标识符 成员名; 类型标识符 成员名;
……………. }变量名表列;
例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2;
直接定义结构体变量
一般形式:
struct
{ 类型标识符 成员名; 类型标识符 成员名;
……………. }变量名表列;
例 struct { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2;
c语言第11章-结构体与共用体
struct student a;num
name
例 struct student
sex
{ int num;
age
char name[20];
char sex;
score
int age;
float score;
char addr[30];
addr
};
…..

2字节 20字节 1字节 2字节
{intindtayn;um;
intcyheaarr;name[20];
}; struct date
struct {stuidnet nmtonth; { int numi;nt day;
birthday
num name num namemonth
dbairythdayyear
char naimntey[2e0a]r;;
{ int num; { int num;
char name[20]; char name[20];
char sex;
char sex;
int age;
int age;
float sco30]; char addr[30];
};
};
struct student stuS1T,sUtDu2E;NT stu1,stu2;
4字节
30字节
结构体类型定义的作用域
结构体类型定义描述结构 的组织形式,不分配内存
❖ 11.2 结构体变量的定义
先定义结构体类型,再定义结构体变量
❖一般形式:
struct 结构体名
{
类型标识符 成员名;
类型标识符 成员名;
例 #define……S…T…U…D.ENT struct student 例 struct student ST}s;tUruDctE结N构T体名 变量名表列;
struct student stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”};
形式二:
struct 结构体名
{ 类型标识符 成员名; 类型标识符 成员名;
……………. }结构体变量={初始数据};
例 struct student { int num; char name[20]; char sex; int age; char addr[30]; }stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”};
}st}us1tu,s1tu,s2tu; 2;
❖ 11.4 结构体变量的初始化
形式一:
struct 结构体名
{ 类型标识符 成员名; 类型标识符 成员名;
……………. }; struct 结构体名 结构体变量={初始数据};
例 struct student { int num; char name[20]; char sex; int age; char addr[30]; };
month day year
stru}cbtirdthadteayb; irthday;
}stu;}stu;
❖ 11.3 结构体变量的引用
引用规则
❖ 结构体变量不能整体引用,只能引用变量成员
引用方式: 结构体变量名.成员名
例 例
ss{}{stt例rrt❖❖uuu{ cc1可结stt,{}iiitnccifcscsnnccifcbrn以构nlluhhohtthhhhotttissturtrcaaaaaaaaanuntitt将体a2aiinnuhutrrtrnnrtrrrucu例g;gtudddstttsmsa一嵌nmsaseenmmneaeccedyedadt;d;;例a;anyunoo个套exaxdom;dam;mtdrtr;a;yrnrse{}ete[结时[e;rseett33;;rh[nt[2[0u0su构逐{}2;2t0s]c]t100;;rtt]体级u,iu];]snccifcs成优结;;nlct1shhhottus变引ttu员先合s,t1iaaaantnccifctsua2=unupl级性(trrru量用hhhotnt分1{2sgr;tud1isumsa=aaaa::nn.ten0从a量2embuc赋s1etdtrrru1f;;atg;n(oid左xu)d,s“rsam“运m%et值1nrt;eWcred向he;;[;a算dnoeax3ndd;给,右mtnar%;[0符rae2m([Ls]ey另3;0;ie,n.%[0]m2”;一,m]c)‘0s;M,osto%]ut个s’nun;s,1dt1t1tut.hu,9hs.结%1a1,c.8=i…g.sffonb7,(构ec1%rsui….deo+r5t2mtuas+r+h,体.e“\1;y.==;dnD==s1a”8a变=,t0ysu5Ls;t2i.utya5量u.e1sn;2(a)c”);}ro);re(;())
相关文档
最新文档