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;

第11章 结构体与共用休

第11章   结构体与共用休

定义结构体类型的同时定义结构体变量
一般形式:
struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; ……………. }变量名表列;
例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2;
num
25B
name sex age num
name sex age
stu[0]
stu[1]
结构体数组初始化
分行初始化: 结构体数组引用 顺序初始化: struct student struct student 引用方式: 结构体数组名[下标].成员名 { int num; 例 { int student struct num; 例 struct num; char { char name[20]; int name[20]; stu[1].age++; struct student { char num; int sex; char sex; name[20]; int age; num; {char name[20]; int int age; char sex; }; char sex; }; int char name[20]; age; struct student stu[ ]={{100,“WangLin”,„M‟,20, int char sex; age; struct student stu[ ]={100,“Wang Lin”,„M‟,20}, }stu[ ]={{……},{……},{……}}; {101,“LiGang”,„M‟,19, int age; }stu[ ]={{……},{……},{……}}; 101,“Li Gang”,„M‟,19}, strcpy(stu[0].name,”ZhaoDa”); {110,“LiuYan”,„F‟,19}; }str[3]; 110,“Liu Yan”,„域

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

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

第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语言第11讲--结构体和共用体

C语言第11讲--结构体和共用体
num a[0] a[1] a[2] name(20) score(4)
如:方式(2) 方式 struct student int score[4];}
{long num;char name[20];
结构体数组初始化
a[3]={{20030001,"zhang",89,90,91,92}, {20030002,"liu",68,69,70,71}, {20030003,"li",57,58,59,60} };
第十三讲 特殊数据类型
—— 结构体、共用体、 结构体、共用体、 枚举类型、 枚举类型、自定义类型
§11.1 结构体和共用体概述
数组可以存放一组相关的同类型数据, 数组可以存放一组相关的同类型数据,但是 一组相关的同类型数据 不能将不同类型的数据放入同一数组中。 不能将不同类型的数据放入同一数组中。 如果需要把一个学生的学号、姓名、性别、 如果需要把一个学生的学号、姓名、性别、 年龄、各门功课的考试成绩等不同类型的数 年龄、各门功课的考试成绩等不同类型的数 放在一个构造型数据类型中, 据放在一个构造型数据类型中,就需要另外 一种新的数据类型: 一种新的数据类型:结构体类型或者共用体 类型数据 数据。 类型数据。 一个结构体类型的变量中可以独立存放多种 类型的数据,一个共用体 共用体类型的变量中可以 类型的数据,一个共用体类型的变量中可以 共用同一段存储单元来存放不同类型的数据 来存放不同类型的数据。 共用同一段存储单元来存放不同类型的数据。
4
三、对结构体类型的说明
结构体类型与结构体类型变量是两个概念, 结构体类型与结构体类型变量是两个概念, 应区分结构体名与变量名。 应区分结构体名与变量名。 成员也可以是一个结构体变量。 成员也可以是一个结构体变量。

十一章 结构体与共用体

十一章 结构体与共用体

结构体与共用体一、选择题:1.已知赋值语句wang.year=2004;则wang的变量类型是()A. 字符或文件B. 整型或实型C. 共用或结构D. 实型或指针2.Turbo C中,以下类型数据在存储器中占的字节数为 ( ) struct test{ int x;float y;char z;} ;A. 2B. 3C. 6D. 73.以下语句中,成员data的正确引用方式为( ) struct node{ int data;char name[10];}stree;struct node *p=&stree;A. p.dataB. p->dataC. (*p)->dataD. stree->data4、当执行以下程序段时,输出的结果是。

()struct data{ char a; int b; float c; };printf(“%d”, sizeof(struct data));A. 1B. 2C. 4D. 75.下面程序段的运行结果是。

struct stu{ int num; char name[10]; float scrose ; };printf(“%d\n”, sizeof (struct stu ));(A)14 (B)12 (C)16 (D)36. 若有定义:typedef char* string;#define str char *int a=4;struct {int x, *y;}z={10, &a}, *p=&z;则下列不等价的是:A. string name, sign; 与 str name, sign;B. *p->y++ 与 *(p->y++)C. ++*p->y 与 ++(*p->y)D. ++p->x与++(p->x) ()二、填空题:1.已知赋值语句zhang.year=1985;可判断zhang是类型的变量;2.若有类型定义:“typedef union{int a; char b; double c;} share;”及声明:“float r;”,则表达式:sizeof(r)+sizeof(share)的值是:。

C语言-结构体与共用体

C语言-结构体与共用体

(1)“结构类型名”和“数据项”的命名规则,与变量 名相同。 (2)数据类型相同的数据项,既可逐个、逐行分别定义, 也可合并成一行定义。 例如,上例中的日期结构类型,也可改为如下形式: struct date {int year, month, day; }; (3)结构类型中的数据项,既可以是基本数据类型,也 允许是另一个已经定义的结构类型。 例如,上例中的结构类型std_info,其数据项“birthday” 就是一个已经定义的日期结构类型date。 (4)本书将1个数据项称为结构类型的1个成员(或分 量)。
/*主函数main()*/ main() { int i; /* 打 印 表 头 : " □" 表 示 1 个 空 格 字 符 * / printf("No.□□□□Name□□□□□Sex□Birthday\n"); /*输出三个学生的基本情况*/ for(i=0; i<3; i++) { printf("%-7s",student[i].no); printf("%-9s",student[i].name); printf("%-4s",student[i].sex); printf("%d-%d-%d\n",student[i].birthday.year, student[i].birthday.month, student[i].birthday.day); } }
11.2
定义结构体类型变量的方法
声明一个结构体类型的一般形式: struct 结构类型名 /* struct是结构类型关键字*/ {数据类型 数据项1; 数据类型 数据项2; …… …… 数据类型 数据项n; }; /* 此行分号不能少!*/

第11章结构体与共用体共39页PPT资料

第11章结构体与共用体共39页PPT资料

13.05.2020
10
#include<stdio.h>
#include<string.h>
struct person
{char name[20];
int count;
}leader[3]={"Li",0,"Zhang",0,"Fun",0}; void main()
{int i,j;
char leader_name[20];
➢在定义时初始化(eg11.1)
struct student { int num; char name[20]; char sex;
a.num=89031; a.sex=‘M’; name如何赋初值?
char addr[20];
}aa=;{89031,"Li Lin",'M',"123 Beijing Road"};
‘M’ 59B
18
87.5
stu[0]
“123 Beijing”
10102
“zhang fun” ‘M’ 19 99
“123 shanghai”
stu[1]
3)结构体数组的应用举例 例 11.2 对候选人得票的统计程 序。有3个候选人,每次输入一个 得票的候选人的名字,要求最后输 出各人的得票结果。
结构体类型
char sex;
short int age;
13.05.2020
float score;
struct student stu;
char addr[30];
};
1
➢ 结构体类型的形式:
struct 结构体名

C语言程序设计——结构体和共用体(完整版)

C语言程序设计——结构体和共用体(完整版)

printf(“name\tage\tjob\tclass/office\n”); for(i=0;i<PN;i++) {if(body[i].job==„s‟) printf(“%s\t%d\t%3c\t%d\n”,body[i].name, body[i].age,body[i].job,body[i].units.class); else printf(“%s\t%d\t%3c\t%s\n”,body[i].name, body[i].age,body[i].job,body[i].units.office); } }
birthday num name sex age month day year addr
§12.3结构体数组
结构体数组的每一个元素都是具有相同结构类型 的结构体变量。 例:struct student {int num; char name[20]; float score; }stu[3]; 其中,定义了一个结构体数组stu,共有3个元素, 每个元素都具有struct student的结构形式。
§12.6共用体
共用体(也称为联合)也是一种构造的数据类型。 共用体是将不同类型的数据组织在一起共同占用 同一段内存的一种构造数据类型。 例如,在校学生和教师都填写以下表格: 姓名 年龄 职业 单位 其中,职业分两类:教师和学生; 而单位一栏里,学生填写班级编号(整型类型), 教师填写某系某教研室(整型类型) 。
§12.7枚举数据类型
当某些变量仅由有限个数据值组成时,通常用枚 举类型来表示。 所谓枚举是指将变量的值一一列举出来,变量的 值只限于列举出来的值的范围内。如一周只有7天, 一年只有12个月等等。
注意:枚举类型是一种基本数据类型,而不是一 种构造类型。关键字为enum。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
30字节
…..
结构体类型定义描述结构 的组织形式,不分配内存
§11.2 结构体变量的定义
先定义结构体类型,再定义结构体变量
❖一般形式: struct 结构体名
例 struct student
{ 类型标识符 成员名;
{ int num;
类型标识符 成员名;
char name[20]; …………….
char sex; int age;
}birthday;
}stu;
§11.3 结构体变量的引用
引用规则
❖ 结构体变量不能整体引用,只能引用变量成员
引用方式: 结构体变量名.成员名
❖结构体嵌套时逐级成引员用(分量)运算符
优先级: 1 结合性:从左向右
例 例s{}tsrt例uu例s{}c1{tstr,iccifctssunnlu{}hhhttos{}icscsttur1bnaaattshtatunra2r,urrriitccifcttsaucurnngluu;hhhdiiisatorstcscnnnnttneu1mheaaaedctattntt;tunaa2,dxurrrniccifcsodts;annmgmmldyu;ta;hhhdtdsarrtosumsttneuaemy[eeaaaedce;otad3;nyaaa;2;xurrrnteod[tn;e0mregu;;2;dt[sarr;stn]ne2m[e0ehedce;t3;a0;xn];od[;0;m]2;trr;][e0e;3s;][t0;u21]0s;=p]t{r;uni1n1u0ti….mf1fb(s(,s“ist“…tur%tWsusut1tth1.ud1u..ans.1d,=n1aa%c.=ag.mosLnesycsruie,t+o.%numm+r+”2e(mc==;,)=o‘,s1%Mo)8nt0nu5td’;2th.,h,51.%=s;9cf1,bo8,%2ird7re;at.s;h5y\dn,“a”Dy,satyuLe1iaa)r;n”};(()) }stu1,stu2;
用无名结构体直接定义 变量只能一次
说明
❖结构体类型与结构体变量概念不同
例 struct { int
mdao类类tne型型th::;不不分能配赋内值存、;存取、运算;
❖in结t d构ay体; 可嵌套
变量:分配内存 变量:可以
❖in结t y构ear体; 成员名与程序中变量名可相同,不会混淆
}; str例uctstrsutucdt esnttudent { in{t innutmn;um;
charcnhaamr nea[m20e][;20]; strucsttrudcattedabtierthday; }stu; { int month;
int day; int year;
num name
birthday
month day year
birthday num name
month day year
};
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”};
}; struct 结构体名 变量名表列;
float score;
char addr[30];
};
struct student stu1,stu2;
定义结构体类型的同时定义结构体变量
一般形式: 例 struct student struct 结构体名
{ int num; { 类型标识符 成员名; char name[2类0]型; 标识符 成员名; 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;
成员类型可以是 基本型或构造型
例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; };
num name
sex age
score
addr

2字节 20字节 1字节 2字节
4字节
§11.5 结构体数组
结构体数组的定义
三种形式:
形式一: 形str式uc二t s:tudent 形ssstttr式rru{}{uu{}cs三cct;tttus:[siiccicciti2ccinnnntuhhhhnnuhh]ttttdaaaatt;daaaaerrrrnnaerrggnnnssnguunnseeuteeaaemmte;;amxxmm;xm;;;;s;;eeteu[[[22[22000]]];];;;
形式三:
struct
{ 类型标识符 成员名; 类型标识符 成员名;
……………. ห้องสมุดไป่ตู้结构体变量={初始数据};
例 struct { int num; char name[20]; char sex; int age; char addr[30]; }stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”};
构造数据类型
主讲:曹 莹
第十一章 结构体与共用体
§11.1 结构体
结构体是一种构造数据类型
用途:把不同类型的数据组合成一个整体------自定义数据类型
结构体类型定义
struct是关键字, 不能省略
struct [结构体名]
{ 类型标识符 成员名; 类型标识符 成员名;
……………. };
合法标识符 可省:无名结构体
§11.4 结构体变量的初始化
形式一: struct 结构体名
{ 类型标识符 成员名;
例 struct student
类型标识符 成员名; …………….
{ int num; };
char name[2st0ru];ct 结构体名 结构体变量={初始数据};
char sex;
int age;
char addr[30];
相关文档
最新文档