《C语言程序设计》第八章 结构体、共同体和枚举
结构体、联合体、枚举
联合体与结构体类似,但联合体所有成员 共享同一块内存空间,因此同一时间只能 存储其中一个成员的值。
枚举编程实践
定义枚举类型
使用`enum`关键字定义枚举类 型,指定枚举中各个常量的名
称和值。
创建枚举变量
定义枚举类型后,可以创建该 类型的变量,用于存储枚举常 量中的一个值。
使用枚举常量
在程序中使用枚举常量时,可以 直接使用其名称,编译器会自动 将其转换为对应的整数值。
特点
联合体的所有成员共 享同一块内存空间, 其大小等于最大的成 员。
联合体的成员可以是 任何数据类型,包括 基本数据类型、结构 体、数组等。
联合体中的成员不能 同时被访问,即同一 时间只能使用其中一 个成员。
联合体的作用
0102Βιβλιοθήκη 03节省内存空间由于联合体的所有成员共 享同一块内存空间,因此 可以节省内存空间。
结构体的创建与初始化
01
stu2.age = 21;
02
stu2.score = 90.5;
03
// 输出结构体变量的值
结构体的创建与初始化
要点一
printf("Student 1
Name = %s, Age = %d, Score = %.1fn", , stu1.age, stu1.score);
联合体
联合体允许在相同的内存位置存储 不同的数据类型,但一次只能使用 其中之一。适用于节省空间或实现 特殊的数据处理逻辑。
枚举
枚举用于定义一组命名的整型常量, 适用于表示一组相关的值或状态。
优缺点对比
优点
可以包含多个不同类型的数据,方便数据管理和操作;提高了代码的可读性和可维护性。
结构体、共用体和枚举型
优缺点比较
优点
节省内存空间;可以方便地处理多种数据类型。
缺点
由于所有成员共享同一块内存空间,因此每次只能使用其中一个成员;使用不 当可能导致数据丢失或混乱。
优缺点比较
优点
增加了代码的可读性和可维护性;提供了类型检查,减少了 错误的可能性。
缺点
相对于整数类型,枚举型的处理速度较慢;占用内存空间相 对较大。
枚举型
枚举型通常用于定义一组命名的 整数值,这些值可以增加代码的 可读性和可维护性。例如,可以 使用枚举型来定义一周中的天数 或一个月中的月份。
优缺点比较
优点
可以方便地组合和管理多个不同类型 的数据;提供了数据的封装和隐藏, 增加了代码的安全性;可以方便地传 递和返回多个值。
缺点
相对于基本数据类型,结构体的处理 速度较慢;占用内存空间相对较大。
共用体在节省内存空间中的应用
节省存储空间
共用体允许在相同的内存位置存储不同的数据类型,通过共享内 存空间来节省存储空间。
实现多态性
共用体可以在不同的上下文中表示不同的数据类型,从而实现一 种多态性的效果。
处理异构数据
当需要处理不同类型的数据时,可以使用共用体来统一表示这些 数据,简化数据处理的过程。
实现多态性
通过共用体,可以在相同 的内存空间中存储不同类 型的数据,从而实现多态 性。
方便数据处理
在某些情况下,使用共用 体可以更方便地处理数据。
共用体的声明与定义
声明
定义
初始化
访问成员
注意事项
在C语言中,可以使用 `union`关键字来声明一 个共用体。例如: `union Data { int i; float f; char str[20]; };`
C语言的结构体和共同体
num
{ int num;
name
char name[20]; sex
char sex;
age
int age;
float score; char addr[30]; score
};
addr
…
2字节 20字节 1字节 2字节
4字节
30字节
…..
s等省结tr都略构uc只。体t s是类tu其型de中定nt的义应成的作员作为,用一且域个s类tru型结的ct整及构组体“体织},类形”n后型式um的定,不,“n义;分am描”配不e述[内2能0结存] 构
C语言教学幻灯片版பைடு நூலகம்八章 结构体、共用体和枚举类型
第八章 结构体、共用体和枚举类型
8.1 结构体 8.2 共用体 8.3 枚举类型 8.4 用typedef定义类型
1
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
8.1 结构体
8.1.1 结构体类型声明
结构体是一种构造数据类型
用途:把不同类型的数据组合成一个整体-------自
类c型ha标r 识na符me[20]成; 员名; 类c型ha标r s识ex符; 成员名;
in…t a…ge…; ……. }变量名表flo列at;score;
char addr[30]; }stu1,stu2;
7
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
8.1 结构体
• 直接定义结构体变量
– 一般形式:
例strsutcrtuct { { int num; 类c型ha标r 识na符me[20]成; 员名; 类c型ha标r s识ex符; 成员名; int…a…ge;………. }变量名表flo列at;score; char addr[30]; }stu1,stu2;
第八章结构体联合与枚举
第八章结构体、联合与枚举第八章结构体、联合与枚举8.1 概述到目前为止,我们已经学过的数据类型有整型、字符型和实型等基本类型,也学过了数组――一种构造类型数据,数组中的各个元素属于同一种类型。
但在实际应用中,一组数据并不是都由相同性质的数据构成,而常常是由一些不同类型的数据构成。
譬如要统计某班学生成绩,需要知道学生的姓名、成绩,姓名与成绩是两种不同类型的数据。
又如通讯录中有姓名、地址、邮政编码、电话等不同类型的数据。
若用数组来解决问题,则会将这些互相联系的数据割裂开来,不便于引用。
为此,C语言允许用户根据需要自行构造出一种被称为“结构体”的数据类型。
结构体是一种较为复杂而又非常灵活的构造型的数据类型。
一个结构体类型的数据可以由若干个称为成员(或域)的成分组成。
不同的结构体类型其成员不同。
对于一个具体的结构体而言,其成员的数量是固定的,这一点与数组相同,但该结构体中各成员的数据类型可以不同,这是结构体与数组的重要区别。
8.2 结构体类型定义结构体类型定义的一般形式为:struct 结构体名{ 类型名1 结构成员名1; 类型名2 结构成员名2; ??类型名n 结构成员名n; }; 其中:⑴ struct是关键字,是定义结构体类型的标志。
不能省略,表示这是一个“结构体”类型。
⑵ 结构体名是用户定义的结构体类型名,其命名规则同变量名。
⑶ 类型名1~n说明了结构成员的类型。
⑷ 结构成员名1~n为用户定义的一个或多个结构成员的名称,其命名规则同变量名。
多个同类型的成员彼此用逗号分隔。
通常将上面定义形式中{}中的部分称之为成员表列,也叫域表。
注意:结构体类型的声明是以分号(;)结尾的。
例如: struct student {int num;char name[20]; char sex; int age;float score[4]; };211表明定义了一个struct student结构体类型,成员有num,name,score等。
第08章 结构体、共用体和枚举类型
8.2 共用体
• “共用体”(又称联合)与“结构”有一些相似之处。 但两者又有本质上的不同。在结构中各成员有各自独 立的存储空间,结构变量的总存储空间是各成员存储 空间之和。而在“共用体”中,各成员共享一段存储 空间,一个共用体变量的存储空间等于各成员中存储 空间最多的成员的存储空间。 • 应该说明的是, 这里所谓的共享不是指把多个成员同 时装入一个共用体变量内,而是指该共用体变量可被 赋予任一成员值,但每次只能赋一种值,赋入新值则 冲去旧值。一个共用体类型必须经过定义之后,才能 把变量说明为该共用体类型。
【例8.8】结构指针变量的使用方法举例。 #include "stdio.h" struct stu {int num; char *name; char sex; float score; } boy1={102,"Zhang San",'M',88},*pstu; main() { pstu=&boy1; printf("Number=%d\nName=%s\n",boy1.num,); printf("Sex=%c\nScore=%f\n\n",boy1.sex,boy1.score); printf("Number=%d\nName=%s\n",(*pstu).num,(*pstu).name); printf("Sex=%c\nScore=%f\n\n",(*pstu).sex,(*pstu).score); printf("Number=%d\nName=%s\n",pstu->num,pstu->name); printf("Sex=%c\nScore=%f\n\n",pstu->sex,pstu->score); }
8章 c语言程序设计 结构体,共用体与枚举类型
当通过指针变量引用结构体成员时,若表达式中含有++,-等运算符时,应根据运算符优先级来确定表达式含义。例: ++ p-> score 相当于++( p-> score),结果使score加1。 (++ p)-> score 则再访问成员score之前,使p加1。 例:struct abc {char a[20]; int *pt; }p; pt是结构体类型中的成员,则表达式*p->pt引用的是pt所 指存储单元; *p->pt++是再引用了pt所指存储单元后,使 指针pt加1;( *p->pt)++使pt所指向的单元的值加1;而 *p ++ ->pt在访问了pt所指存储单元后,p加1。
例:struct std_info {char name[9]; char sex[3]; float score; struct date birthday; }stud,arr[5],*p; p=& stud; (1)若要引用结构体类型变量stud 中score成员项,可写成: stud. score p-> score *(p). score arr[1] .score /*通过结构体变量引用*/ /*通过指针变量引用*/ /*通过指针变量引用*/
2.将一个结构体变量作为一个整体赋给另一具有相同类型的 结构体变量 例:struct {char name[15]; int num; }stud1,stud2={“wangfang”,01}; 执行赋值语句: stud1=stud2; 则stud2中把每个成员的值依次赋给stud1中对应的同名成员。 C不允许把一个结构体变量作为一个整体进行输入和输出。 例: scanf(“%d”,& stud1); printf(“%d”,stud1);都是错误的 结构体变量有多个不同类型的数据项,必须逐个用相应的格 式像普通变量一样输入和输出。 scanf(“%s,%d”, stud1. name ,& stud1.num); 注意name[15]是数组,数组名本身就是地址。
C语言结构体,枚举,联合体详解
C语⾔结构体,枚举,联合体详解⽬录1.什么是结构体、枚举、联合体2.定义结构体2.1 包含结构体成员变量、variable2.2 tag、结构体成员变量2.3 ⽤结构体声名变量2.4 ⽤typedef 创建新类型2.5 两个结构体相互包含2.6 结构体变量初始化2.7 结构体指针3.枚举3.1 定义⽅式3.2 为什么⽤枚举3.3 枚举变量的定义3.4 实例3.5 枚举实际⽤途4.联合体4.1 与结构体区别4.2 定义总结1.什么是结构体、枚举、联合体结构体(struct)是由⼀系列具有相同类型或不同类型的数据项构成的数据集合,这些数据项称为结构体的成员。
如下⾯的student结构体包含三个成员,分别是name、num、age。
枚举(enum)是C语⾔的⼀种特殊类型。
当我们在编程中遇到定义⼀些固定长度或范围的数值时,可以考虑使⽤枚举类型。
使⽤枚举可以让我们的程序可读性更强、看起来更加直观。
举个例⼦,如果我们在编程中需要使⽤数字06分别表⽰星期⽇星期六,程序的可读性就不⾼,我们需要翻⼿册或者看程序注释才能知道每个数字具体代表什么意思。
如果我们使⽤枚举呢,基本上不需要看注释或⼿册就可知晓其⼤意。
联合体是⼀种结构。
它的所有成员相对于基地址的偏移量都是0。
此结构空间要⼤到⾜够容纳最宽的成员。
其对其⽅式适合其中所有成员。
123456// 创建结构体struct student{char *name; // 学⽣名字int num; // 学⽣学号intage; // 学⽣年龄};2.定义结构体12struct tag{ 成员变量...}variable;通常,tag 、结构体成员变量、variable 这3个部分⾄少要出现2个2.1 包含结构体成员变量、variable1234struct {char name[100];int age;}s1;//s1相当于对这个结构体声明了⼀个变量,可以在程序中直接调⽤s1相当于声明的全局变量。
四川大学《c语言程序设计》课件-第8章 结构体与共用体
90 83 72 82
2 林平之
男 1999
78 92 88 78
3 岳灵珊
女 1999
89 72 98 66
4 任盈盈
女 1999
78 95 87 90
结构体的解决方法
struct STUDENT
{ int studentID;
/*每个学生的序号*/
char studentName[10];/*每个学生的姓名*/
};
结构体变量的指针
struct STUDENT
{
int
studentID;
char
studentName[10];
char
studentSex[4];
struct date timeOfEnter;
int
scoreComputer;
int
scoreEnglish;
int
scoreMath;
int
结构体的内存占用
double 占用内存字节数 = 8 struct 类型用内存字节数 = ? 是所有成员变量的内存总和吗?
用运算符sizeof获得结构体大小 sizeof(变量或表达式) sizeof(类型)
struct number
{ short i; char ch;
float f;
};
printf("%d\n", sizeof(struct number));
struct STUDENT *pStu; /*定义结构体指针*/
pStu = &stu;
通过stu和成员运算符访问结构体成员
– stu. studentID = 1;
通过pStu和指向运算符访问结构体成员
C程序设计ch11.结构体、联合共用体与枚举类型
初始化:
struct students { int no; char name[15]; char sex; float aver; } stu[20]={{101, “Wan CX”, „m‟, 93.42}, {102, “Liao WF”, „f ‟, 85.68}, ……}; name
Wan CX Liao WF …
num name sex score[0] score[1] score[2] … score[9] aver
stu[0] stu[1] … stu[20]
[例] 计算学生的平均成绩。 num name sex score[0] score[1] score[2] … score[9] aver 1401 25BF f 89.5 93.5 86.0 … 78.0 88.42 stu[0] 注意结构成员数据的输入方法: 1402 A5D6 m 99.0 98.0 90.0 … 88.5 93.68 stu[1] 一律采用字符串方式输入,再利用函数转换数据类型。 … … … … … … … … … … void main() { 1420 6D58 int m k, j; 76.5 float 65.0 … 56.0 65.37 stu[20]char s[80]; sum; 74.0
#include <stdio.h> struct students { int num; // 学号 char *name; // 姓名 char sex; // 性别 float score[10]; // 10门课程成绩 float aver; } stu[20]; // 用于存放20个学生的成绩表
成绩表
struct scores { char grade[20]; long number; char name[20]; float os; float datastru; float compnet; };
结构体与共用体-枚举
枚举常量是枚举类型的成员,每个枚举常量都有一个整数值与之对应,默认从0 开始,也可以显式指定。
枚举变量
枚举变量的声明
使用枚举类型名称声明枚举变量,例如`enum Color color;`。
枚举变量的赋值
枚举变量只能赋值为枚举常量列表中定义的整数 值或对应的枚举常量名称。
枚举变量的使用
嵌套共用体
嵌套共用体是一个共用体内部包含另一个共 用体或结构体的情况。
共用体变量
声明
共用体变量的声明方式与结构体 变量类似,需要使用共用体类型 名来定义变量。
访问
访问共用体变量的成员需要使用 成员访问运算符(.),且每次只 能访问一个成员。
01
02
定义
共用体变量是用来存储共用体类 型数据的变量。
03
结构体与共用体-枚举
目录
• 结构体概述 • 共用体概述 • 枚举概述 • 结构体、共用体与枚举的关系 • 结构体、共用体与枚举的应用实例 • 总结与展望
01
结构体概述
定义与特点
01
结构体是一种用户自定义的数据类型,允许将不同类型的数据 组合成一个有机的整体。
02
结构体中的数据可以是基本数据类型,也可以是其他结构体类
未来发展趋势预测
01 02
结构化数据处理
随着大数据时代的到来,处理结构化数据变得越来越重要。结构体作为 一种表示结构化数据的数据类型,将在数据处理和分析领域发挥越来越 重要的作用。
内存优化
共用体可以在相同的内存位置存储不同的数据类型,从而节省内存空间。 在内存资源紧张的情况下,共用体的使用将变得更加重要。
04
当需要提高代码的可读性和可维护性时,可以使用枚举类型来代替一 些硬编码的常量值。
C++ 结构体,共同体和枚举
结构体类型变量的引用 1、不能对结构体变量整体赋值或输出,只能分别对各个成 员引用。 错误 cin>>student1; 必须用成员名引用
cin>>student1.num;
student1.num=100;
可以将一个结构体变量整体赋给另外一个相同类型的结构 体变量。 student2=student1; 2、嵌套的结构体变量必须逐层引用。 student1.birthday.day=25; 3、结构体变量中的成员可以同一般变量一样进行运算。 student1.birthday.day++; student1.score+=60; 10
int age;
}; struct person class[10]={ “Jone”,17, “Paul”,19, “Mary”,18, “Adam”,16 }; A) cout<<class[3].name<<endl; 输出:Adam B) cout<<class[3].name[1]<<endl; 输出:d
char sex;
char addr[30];
};
分号不能少
3
定义结构体类型变量的方法 一、先定义结构体类型再定义变量名
struct student { int num; 结构体类型只是一种数据 char name[20]; 类型,不占内存空间,只 char sex; 有定义结构体类型变量时 int age; 才开辟内存空间。 float score; char addr[30]; }; struct student student1, student2;
{ int num; char name[20]; char sex; } stu[3]={ {1011, "Li Lin",'M'}, {1012,"Wang Lan",'F'}, {1013,"Liu Fang",'F'};
C语言 第八章 结构体
共用体
3)直接定义联合变量 union {
int i;
float f; }num; 说明:(1)共用体变量的所有成员占有同一段内存,所占内存空 间是其成员中字节数最大的成员占有的字节数。
(2)共用体变量中可以定义许多不同类型的成员,但同一时刻只
有一个成员的数据有效。
共用体
4.共用体变量初始化 初始化时,只能对第一个成员的数据类型初始化。 例:union data num={10}; 正确 union data num={10,25.4}; 错误
结构体变量
方法三:定义结构体类型的同时定义结构体变量,省略结构体类型名
struct DATE{ int year; int month; int day;}; struct {
long int number;
char name[8]; int age;
char *sex;
struct DATE birthday; }stu1,stu2;
数据类型
数据类型
成员名1;
成员名2;
//成员表
……
};
结构体类型
2.结构体类型的定义: 说明: (1) struct是关键字,标识一个结构体类型定义的开头 (2)“结构体类型名”是表示该结构体类型的名称的标识符,可
类比int、char
(3)“成员表”是构成结构体类型的成份,由一个或多个成员构
成,每个成员有自己的成员名。各成员数据类型可以不同,既可以
枚举类型
3.枚举变量定义
方式一:类型和变量分开定义 enum WEEKDAY{Sun,Mon,Tue,Wed,Thu,Fri,Sat};//定义枚举类型 enum WEEKDAY w;//定义枚举变量w
《C语言程序设计》第8章结构体、共用体与枚举类型
name
sex
age
…
stu
p
通过指针访问结构体变量的成员
① 结构变量名.成员名(名字引用); ② 结构指针->成员名(指针引用); ③ (*结构指针).成员名(将指针转化为名字引用);
struct student { int num; char name[20]; char sex; int age; }stu; struct student *p=&stu;
例
3.说明
8.6 typedef的使用
功能:用自定义名字为已有数据类型命名 简单形式: typedef type newname;
类型定义语句关键字
已有数据类型名
用户定义的类型名
例 typedef int INTEGER; typedef float REAL;
INTEGER a,b,c; REAL f1,f2;
num
name
sex
age
…ቤተ መጻሕፍቲ ባይዱ
2字节
20字节
1字节
2字节
int x;
x
a
struct student t;
可多次使用struct student 来定义变量
2.定义结构体类型的同时定义结构体变量
用无名结构体直接定义变量只能一次
struct student t;
struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; ……………. }变量名表列;
成员(分量)运算符 优先级: 1 结合性:从左向右
stu1.num=10; stu1.score=85.5; stu1.score+=stu2.score; stu1.age++;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{ max=stud[ i ].score;temp= i;} p=stud + temp; printf ( “\n The maximum score:\n” ); printf ( “No:%d \nname:%s\nscore:%4.1f\n”,p->num,p->name,
p->score );
}a ;
main() { a.ch[ 0 ]=13;
a.ch[ 1 ]=0;
printf (“%d\n”,a.i );
}
A. 13
B. 14
C. 208
D. 209
8.10 下面对 typedef 的叙述中不正确的是( )。 A.用 typedef 可以定义各种类型名但不能用来定义变量 B.用 typedef 可以增加新类型 C.用 typedef 只是将已存在的类型用一个新的标识符来代表 D.使用 typedef 有利于程序的通用和移植
对后一种举例如下: struct student {┇
}; struct student stud,arr[3],*p; 结构体变量的引用有三种形式:
106
第八章
结构体、共同体和枚举
1. 结构体变量名.成员名 2. (*指针变量名).成员名 3. 指针变量名->成员名 其中圆点(.)称为成员运算符,箭头(->)称为结构 指向运算符,C 语言中,圆点运算符和箭头运算符都是优先 级最高的运算符。 结构体变量的输入和输出,它必须按成员项逐个地输入 或输出,不能将结构体变量作整体地输入或输出。 共用体类型,是指将不同的成员项存放于同一段内存单 元,共用体的大小与其组成成员中字节数最大的那个成员相 同。共用体变量的定义与引用类似于结构体变量的定义与引 用。枚举类型指明这种类型的变量取值只能是指定的若干个 枚举常量之一。每个枚举常量代表一个具体的值。 用 typedef 可定义新的类型名来代替已有的类型名。其方法如下: 1. 先按定义变量的方法写出定义体; 2. 将变量名换成新类型名; 3. 在最前面加上 typedef; 4. 用新类型名去定义变量。
A. 1
B. 2
C. 8
D. 11
8.3 根据以下定义,能打印出字母 M 的语句是( )。 st ruct person { char name[9 ]; int age; };
struct person class[ 10 ]={“John”,17,“Paul”,“Mary”,18, “Adam”,16};
8.5 实验 结构体、共用体和枚举
z 实验目的与要求
1、 掌握结构体类型变量的定义和使用; 2、 掌握结构体类型数组的概念和使用; 3、 掌握共用体的概念和使用; 4、 掌握枚举类型的概念。
z 实验内容和步骤
(1)输入并运行以下程序
main( ) {union {char i[2];
int k; }m; m.i[ 0 ]=3; m.i[ 1 ]=0; printf ( “%d\n”,m.k );
z 实验分析与讨论 z 根据实验过程书写实验报告上交老师检查
8.6 习题参考答案
8.1.C
8.2. D
8.7. C
8.8. B
8.13.
8.3. D 8.9. A
main()
8.4. D 8.10.B
8.5. D 8.11.C
8.6. D 8.12.B
{ struct study
{ int mid; int end; int average;
C. 3
D. 6
8.5 以下 scanf 函数调用语句中对结构体变量成员的不正确引用是( )。
struct pupil { char name[ 20 ];
int age; int sex; } pup[ 5 ],*p; p=pup; A. scanf(“%s”,pup[ 0 ].name); B. scanf(“%d”,&pup[ 0 ].age); C. scanf(“%d”,&(p->sex)); D. scanf(“%d”,p->age);
{ union { long a; int b; char c;
} m;
110
第八章
结构体、共同体和枚举
printf(“%d\n”,sizeof(m));
}
A. 2
B. 4
C. 6
D. 8
8.9
下面程序的运行结果是( )。
#include“stdio.h”
union pw { int i;
char ch[ 2 ];
选项 A,表达式的含义是使 p->b 的值加 1。
选项 B,表达式(p++)->b 的值为 p->b,第一个+ + 运算使 p->b 增加 1,整个表达式的值是增 1 后的 p->b 所指 单元的值。在该表达式计算后,p 增 1。
选项 C,解此表达式要用到运算符的结合性。计算时表 达式等同于*(p->b),计算后,根据(+ +)运算符的右结合 性,先使 p->b 增 1,再取其所指单元的值。
} 程序中定义 stud 为 struct student 类型的数组,p 为指向 struct student 类型数据的指针变量,第一个 for 循环输入 10 个 学生的数据,在第二个 for 循环中,先使变量 max 的值等于 stud[ 0 ].score(即第一个学生的成绩),然后用 max 与其余 9 个学生的成绩相比,若后者大于 max,则将大者放入 max,并 记下此时的 i 值(由变量 temp 保存)。接着使 p=stud + temp, 即将 p 定位于成绩最高者的那个数组元素处。最后输出 p 所指 的元素中各个成员的值。 z 例题 8-2 对于下述说明,表达式( )不能使变量 p->b 的值加 1。
8.3 典型例题
z 例题 8-1 有 10 个学生,每个学生包括学号,姓名,成绩, 要求找出成绩最高者的姓名和成绩。程序如下:
main ( )
{ struct student {int num; char name[15]; float score;; };
struct student stud[10],*p; int i,temp=0; float max; for( i=0;i<10;i+ +)
8.6 设有以下语句:
struct st { int n;
struct st *next; }; static struct st a[ 3 ]={ 5,&a[ 1 ],7,&a[ 2 ],9,’\0’ },*p; p=&a[ 0 ]; 则以下表达式的值为 6 的是()。 A. p+ +->n B. p->n+ + C. ( *p ).n+ + D. + +p->n
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 ]);
struct st
{int a;
int *b;
}*p;
A. + +p->b
B. *+ +( ( p+ +)->b )
C *p->b+ +
D ( * ( p+ +)->b )++
解:本题应注意运算符的优先级和结合性。C 语言中,(.) 和(->)是最高级别的运算符,而(*)和(+ +)的结合性 是自右至左。
scanf ( “%d %s %f”,&stud[ i ].num,stud[ i ].name,&sdud[ i ].score ); max=stud[ 0 ].score; for( i=1;i<10;i+ + )
if ( stud[ i ].score > max )
107
第八章
结构体、共同体和枚举
A. struct 是结构体类型的关键字
B. struct stu 是用户定义的结构体类型 C. stutype 是用户定义的结构体类型名 D. a 和 b 都是结构体成员名
8.2 若有以下定义:
struct data { int i;
char ch ;
double f ; } b; 则结构体变量占用的内存字节数是( )。
8.4 下面程序的运行结果是( )。 main( ) { struct cmplx {int x; } cnum[ 2 ]={ 1,3,2,7 }; printf(“%d\n”,cnum[ 0 ].y/cnum[ 0 ].x*cnum[ 1 ].x);
109
第八章
结构体、共同体和枚举
}
A. 0
B. 1
选项 D,表达式类似于(*x)+ +,其值为 x 指向单元的 值。计算后使该值增 1,但 x(即 p-> b)并未增值。
答案:D。
108
第八章
结构体、共同体和枚举
8.4 习题
8.1 设有以下说明语句
struct stu { int a;
float b; } stutype; 则下面的叙述不正确的是( )。
8.7
以下对 C 语言中共用体类型数据的叙述正确的是( )。
A. 可以对共用体变量名直接赋值
B. 一个共用体变量中可以同时存放其所有成员