版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第 9 章结构体和共用体 12( 07) -博雅研究谷 -让信息技术更容易教学,在信息技术学习中更有效第 9 章结构和公地学习目标?掌握结构类型和变量的定义和初始化?掌握结构变量引用 ?掌握结构和数组、指针、函数等的组合。掌握常见身体变量的定 义和参考?理解结构和共享空间的内存分配机制前几章学习的数据类型是分散的, 相互独立的。例如,int a和char b被定义为两个没有内部联系的变量。然而,在现实生活和工作中,经 常需要处理一些密切相关的数据,例如描述公司员工的姓名、部门、 职位、电话号码和电子邮件地址。因为这些数据类型不同,所以很难 仅通过上一章学习的基本类型和数组来统一管理这些数据。为
2、此, C 语言提供了另外两种构造类型, 即结构和公共体。 本章将详细解释这 两种构造类型。9.1 结构类型和结构变量结构类型定义结构是一种集成不同类型数据的结构数据类型。每个数据都被称为 结构类型的成员在程序设计中, 当使用结构类型时, 必须首先描述结 构类型的组成。结构类型定义如下 : 结构类型名称 ;数据类型成员名称 1;数据类型成员名称 2;数据类型成员名称 n;在上述语法结构中,“ struc是定义结构类型的关键字,后跟定义的“结构类型名称 ”。在“结构类型名称 ”下的括号中,定义了结构类型的 成员项,每个成员由 “数据类型”和“成员名称”组成例如,为了描述一组学生信息, 信息由学生编
3、号 (数字 )、姓名 (姓名)、 性别(性别)、年龄(年龄)、地址(地址)等组成。我们可以使用以下语句 来定义一个名为 “学生”的结构类型 :1学归 -使信息技术教学更简单,信息技术学习更有效结构学生 ;整数;char name10;迷人的性;国际年龄;char 地址30;在上述结构类型的定义中, 结构类型学生由 5 个成员组成, 即人数、 姓名、性别、年龄和地址值得一提的是,结构类型中的成员也可以是结构变量。例如,出生 日期信息被添加到学生信息中。具体代码如下 : 结构日期 ; 结构学生 整数;char name10;迷人的性;结构生日;年份;国际月;国际日; stu 1 ;在上面的代码中,
4、我们首先定义了结构类型 Date,它由三个成员组 成:年、月和日。然后定义结构变量 stul,其中成员生日是日期结构类型学生的类型结构如图 9-1 所示numnamemesexexyearyearbydaydaydaydaymonthmonthyday图 9-1 结构类型学生类型结构注:1,结构类型定义以关键字 struct 开头,后跟结构类型的名称,其命名规则与变量名相同。2,在定义了一个结构类型之后, 并不意味着立即分配一个存储单元 来存储每个数据成员, 它只是告诉编译器结构类型是由哪些数据类型 的成员组成的,每个成员占用多少字节,以什么格式,并把它们作为 一个整体来处理3,结构类型定义末
5、尾括号后的分号是必不可少的4,结构类型的成员可以是结构变量, 但不能是其自身结构类型的变 量结构变量的定义前一节只定义了结构类型,它只相当于一个模型,其中没有特定的数据, 系统不会为其分配内存空间。 为了在程序中使用结构类型的数据, 应 定义结构类型的变量,并在其中存储 2博雅研究谷 -使信息技术教学更简单, 信息技术学习更有效地输入特定数据。以下是定义结构变量的三种方法1。首先定义结构类型,然后定义结构变量,就可以定义结构变量。定义结构变量的语法格式如下 :结构类型名称结构变量名称;例如:structure studenty1,student 2;以上示例定义了结构类型变量 stul和stu
6、2,当变量stul和stu2具有结构特征时,它们各自存储一组基本类型变量,如图 9-2 所示张三张三 李云满满满满满女 23232525北京上海图 9-2 变量 stu 1 和 stu 2的存储结构。从图9-2可以看出,变量stul和stu2分别占据连续的存储空间2.定义结构类型时定义结构变量与第一种方法具有相同的功能,其语法格式如下 :结构类型名称 数据类型成员名称 1;数据类型成员名称 2;数据类型成员名称 n; 结构变量名称列表;例如:struct student int num ; char name10;迷人的性; stu1 、stu2在定义结构类型student时,上面的代码还定义
7、了结构类型变量stul和stu2变量stu1和stu2中包含的成员的数据类型是相同的3,结构变量的直接定义除了上述两种方法外,我们还可以用以下语法直接定义结构变量 : struct 数据类型成员名称1;数据类型成员名称2; 数据类型成员名称 n;结构变量名称列表;例如:3博雅研究谷 -使信息技术更容易教学,对信息技术学习更有效 结构int num; char name10;迷人的性; stu1、stu2上面的代码也定义了结构变量 stul和stu2,但是以这种方式定义的 结构没有类型名,我们称之为匿名结构。结构类型是用户定义的数据类型。它不会在编译时为结构类型分配空间,就像前面描述的简单数据类
8、型一样。 只有当它被用来定义一个 变量时,结构变量才会被分配结构类型所需大小的存储单元结构变量的内存分配一旦定义了结构变量,系统将为其分配内存结构变量占用的内存大小是根据字 节对齐机制分配的。字节对齐意味着字节按照一定的规则排列在空间 中。一般来说,字节对齐满足以下两个原则 :(1)结构的每个成员变量相对于该结构的第一个地址的偏移量是基本数据类型 (不包括结构、数组等 )大小的整数倍。 )的成员变量;如果没有,编译器将在成员之间添加填充字节接下来通过一个案例打印每个成员变量的地址,如示例 9-1 所示例9-11 #include 2 /直接定义结构变量 3 struct 4 5 6 7 8 c
9、har a;双 b; int c;短 d;10 void main()11 12 13 14 15 17 成 员 变 量 b 的 地成员变量 d 的地成 员变量 a 的地址址成员变量 c 的地址址:dn成员变量d的地址:% d n | 16)4博雅研究谷 -使信息技术更容易教信息技术, 更有效地学习信息技术图 9-3 运行结果从图 9-3 可以看出,结构变量中成员变量的地址被打印出来。结构变量s中每个成员占用的内存如图9-4所示图 9-4 的结构变量中每个成员占用的内存。接下来,根据图 9-3 和9-4,逐步分析每个成员变量的地址?成员变量 A 的地址是 3703968,也是结构变量 S 的第
10、一个地址; ?成员变量 B 的地址是 3703976,与结构变量的第一个地址的偏移 量是 8 字节。这是因为是成员变量 B 的基本数据类型,它是双精度的,并且它的偏移量应该是8的倍数(sizeof(double),所以变量A用7个字节填充;?成员变量 C 的地址是 3703984,与结构变量第一个地址的偏移量 是 16,这是变量 A 和变量B占用的内存大小之和,正好是 4的倍数(sizeof(int);?成员变量D的地址是3703988,与第一个地址的偏移量是20字节。 它是变量A、B和C占用的个内存大小的总和,正好是2的倍数(sizeof(short)(2)结构的总大小是该结构最宽的基本类型
11、成员大小的整数倍。如果 不够,编译器将在最后一个成员后添加填充字节。通过实例9-1的分析,结构变量S的内存大小可以计算为22,但这 不符合字节对齐的第二个标准。 示例 9-1 中的结构变量的内存大小将 如下例 9-2 所示打印。例 9-21 #包括 2 结构 3 4 5 6 7chara;双 b; int c; 短 d;8 s;9 void main()10 11 12 内存中结构变量s的大小:dn运行结果如图 9-5 所示5博雅研究谷 -使信息技术更容易教信息技术, 更有效地学习信息技术图 9-5 运行结果从图 9-5 可以看出,结构变量 s 的内存大小是 24 字节,而不是 22 字节这是
12、因为结构的总大小应该是最宽基类型的成员大小的整数倍 成员变量中最宽的基本类型的大小为 8(双倍),因此在 d 之后填充 2 字节,结构变量s占用的内存大小为24字节内存分配如图9-6所示占用1字节来填充7字节s成员aa占用8字节成员bb占用4字节 成员cc占用2字节来填充2字节成员dd图9-6结构s占用总内存大小应该注意,如果结构中有结构类型变量,如结构中的char类型数组成员,则其偏移量基于数组中的元素类型,即偏移量是 1 的倍数 (sizeof(char)对于int类型的数组,偏移量是 4的倍数(sizeof(int) 关于结构变量的分配,不同的编译器有不同的分配规则。读者可以 理解。在实
13、际应用中,sizeof()运算符可用于快速找到结构变量的大小。结构变量的初始化由于结构变量存储一组不同类型的数据,初 始化结构变量的过程实际上就是初始化结构中每个成员的过程根据 定义结构变量的不同方式,有两种初始化结构变量的方法。1。定义结构类型和结构变量时初始化结构变量。具体例子如下结构学生 整数;char name10;迷人的性;斯图= 20140101。上述代码在定义结构变量 stu 时初始化了它的成员 2.定义结构类型 后,初始化结构变量。具体例子如下 :结构学生 ;结构学生数 = 20140101 , 整数;char name10;迷人的性;在上面的代码中,首先定义了一个结构类型St
14、uden,然后在定义结构变量时初始化它的成员6博雅研究谷 -让信息技术更容易教学,对信息技术学习更有效?注意 :当初始化一部分成员变量时,如果只有一部分成员被初始化,前一个成员应该被初始化,后 一个成员可以是自由的, 因为当分配成员变量时, 编译器在成员之间 进行匹配, 而不是根据数据类型自动匹配一些成员可以被初始化, 然 后打印出来,如例 9-3 所示。例 9-3# includes tructstudent int num ; char name10;迷人的性;斯图= 20140101,' M ; void main()printf(printf( printf( )运行如图 9-
15、7 所示图 9-7 运行结果如图9-7所示,在结构变量stu中只分配了 num和sex,但当输出所 有成员的值时,“ M被分配给name, sex没有值对结构变量 的引用定义并初始化结构变量以使用结构变量中的成员在 C 语言 中,引用结构变量成员的方式如下 :结构变量名。成员名称;例如,以下语句用于引用结构变量 stul中的num成员:stu 1 . num; 为了帮助大家更好地掌握结构变量的使用,通过一个案例输出结构 变量中所有成员的值,如例 9-4所示。例 9-41 # INCLUDE 2 # INCLUDE 3 STRUCT STUDENT 4 7博雅研究谷 -使信息技术教学更简单,信息
16、技术学习更有效5 6 7 ;8 void main()9 10 12 13 struct 学生二 24;char name50;国际年龄;的运行结果如图 9-8 所示图 9-8 运行结果从图 9-8 中可以看出,结构变量中的成员名称和年龄的值被输出9.2 结构数组 结构变量可以存储一组数据,如学生的序列号、姓名、性别和其他 数据如果有 10 个学生的信息需要存储,可以使用一系列结构。与前 面解释的数组不同, 结构数组中的每个元素都是结构类型的, 它们都 是具有几个成员的项。 本节将详细解释结构数组的定义、 引用和初始 化方法。结构数组的定义假设一个班有 20 名学生。如果我们需要描述这 20
17、个学生的信息, 我们可以定义一个长度为 20 的学生类型数组。就像定义结构变量一 样,我们可以用三种方式定义结构数组 stu1。首先定义结构类型,然后定义结构数组。具体例子如下:结构学生 ;结构学生 20;整数;char name10;迷人的性;2。定义结构类型时定义结构数组。具体例子如下 : 结构学生 整数;char name10;迷人的性;斯图斯20;8博雅研究谷 - 为了使信息技术更容易教学和在信息技术学习中更有效3,直接定义结构数组,具体示例如下 :struct int num; char name10;迷人的性;斯图斯20;9.2.2 结构数组的初始化 结构数组的初始化类似于数组的初
18、始化,通过给元素赋值来完成。由于结构数组中的每个元素都是一个结构变量, 因此在为每个元素赋 值时,需要将它的成员的值依次放在一对大括号中。以为例,定义一个学生结构数组, 该数组有 3 个元素,每个元素有 num、 name、sex 三个成员,可以用以下两种方式初始化学生结构数组1 ,首先定义结构数组类型,然后初始化结构数组。具体例子如下 : 结构学生 ;结构学生 3 = 20140101 ,20140102 , 20140103, ;整数;char name10;迷人的性;2。定义结构数组时初始化结构数组。具体例子如下:结构学生 整数;char name10;迷人的性;20140102,201
19、40103, ;学生3 = 20140101 。- 当然,这样初始化结构数组时,可以不指定结构数组的长度,编译时 系统会根据初始化值自动确定结构数组的长度。 例如,以下初始化方 法也是合法的 结构学生 整数;char name10;迷人的性;9博雅研究谷 -让信息技术更容易教学,在信息技术学习中更有效 学生 = 20140101 ,20140102,20140103, ;引用结构数组引用 结构数组引用结构数组元素。因为每个结构数组元素都是一个结构 变量,所以结构数组元素的引用方式与结构变量相似。 其语法格式如 下:数组元素名。成员名称;例如,要引用第 9.2.2 小节中结构数组学生的第一个元素
20、的 num 成 员,可以使用以下方法 :学生0。num为了帮助读者更好地掌握结构数组的引用,下面的示例用于输出结构数组的所有成员,如示例 9-5 所示。例 9-51 #包括 2 #包括 3 #结构学生 4 5 67 ;8 void main()9 10 11 12 13 14 15 struct Student s2= (int I = 0 ; I printf( char name50;学生间差异;的运行结果如图 9-9 所示图 9-9 运行结果在例9-5中,首先定义长度为2的结构数组s,并初始化数组中的元素然后,使用 for 循环,依次输出 0和1中的成员值9.3 结构指针变量在第 6 章
21、学习指针时,指针指向基本数据类型事实上,指针也可以 指向结构, 这被称为结构指针变量。 它的用法和一般的指针没什么不 同。本节将详细解释结构指针变量。10博雅学习谷 -让信息技术更容易教信息技术, 更有效地学习信息技术结构指针变量在使用结构指针变量之前,首先需要定义结构指针。结构指针的定 义方式与通用指针相似。 例如,下面的语句定义了一个学生类型指针struct student s = struct student * p =在上面的代码中,定义了一个结构指针p。通过“8 void main()9 10 11 12 13 strut 学生 s = struct 学生 * p =prin tf(
22、 charname50;学生间差异;的运行结果如图 9-10 所示图 9-10 运行结果在示例9-6中,首先定义结构类型变量 S,并将变量S中的成员名 称初始化为张三, 并将 studentID 初始化为 20140000 然后, 定义一个 结构指针p,并将p指向s的地址。最后,通过p->name访问成员名 和 studentID 的值从图 9-10 可以看出,也可以使用结构指针来访问结 构变量中的成员。结构数组指针指针可以指向结构数组,即结构数组的起始地址分配给指针变量。 这个指针是结构数组指针。例如,下面的语句定义了一个Student 结构数组和该数组的指针结构学生学习 1 10 ,
23、 * p =在上面的代码中, p 是一个学生结构数组指针,从定义上看,它与结 构指针没有什么不同,只是指结构数组为了帮助读者更好地掌握结构数组指针的用法,下面以一个案例来 演示如何使用结构数组指针11博雅学习谷 使信息技术教学更简单,信息技术学习更有效地输 出多个学生的信息,如例 9-7 所示。例 9-71 #包括 2 #包括 3 结构学生 4 5整数;6 char name20; 7迷人的性;8岁;9 斯图3= 10 201401001, 11 201401002, 12 201401003, 13 void main()1415 strut student * p;16 printf( 1
24、7 for(p = stu ;“p用于获取成员的值如图9-11所示,程序输出结构数组 stu 中所有元素的成员值9.4 函数之间的结构类型数据传输 不仅可以传输简单的变量、数组、指针和其他类型的数据,还可以 在函数之间传输结构类型数据本节将详细解释函数之间结构类型数 据的传输。9.4.1 结构变量作为函数参数 结构变量用作函数参数的方式与普通变量相似,两者都需要确保调 用函数的参数类型与被调用函数的参数类型相同当结构变量用作函 数参数时,它们也是值传递。结构成员变量的值在调制函数中改变,127 文科谷 -使信息技术教学更简单, 信息技术学习更有效。 主调制功能不受影响。如例 9-8 所示,例
25、9-81 #包括 2 结构学生 3 4 56 ;7虚空变化(结构学生)8 9 10 11 12虚空主()13 14 15 16 17 结构学生变更(学生) ;printf( str copy(stu-> name, stu . studentid = 2; char name50;学生 间差异;的运行结果如图 9-12 所示图 9-12 示例 9-8 中的运行结果定义了一个用于更改数据的cha nge()函数,该函数需要接收结构类型的参数从代码的第 15 行可以看出,当结构变量作为参数传递给函 数时,参数的传递方式与普通变量相同。在主函数中调用cha nge()函数后,主函数结构中成员的
26、值没有改变。结构数组作为函数参数 函数不仅可以传递一般结构变量,还可以传递结构数组接下来,使 用一个案例来演示如何使用结构数组作为传递数据的函数参数, 如示 例 9-9 所示。例 9-91 #包括 2 strut student 3 4 56 ;7 void printInfo( 结构学生 ), int 长度)8 9for(int I = 0 ; I13文科谷 -让信息技术更容易教学。提高信息技术学习效率10 11 12 13 14 15 Void Main()16 17Struct 学生3= 18 19 20 21 Printlnfo(学生,3); printf( printf() 运行结果
27、如图 9-13 所示。图 9-13 运行实例 9-9 中的结果,因为其长度不能直接通过数组获得,因此,在定义的 printfInfo() 函数中,需要传递两个参数,一个是结构数组,另一个是数组的长度 收到传递的数组名和长度后, printfInfo() 函数使用 for 循环输出结构 数组中的所有成员结构指针用作函数参数 结构指针变量,以存储结构变量的第一个地址,因此当指针作为函 数参数传递时, 它实际上是结构变量的第一个地址。 如果结构成员的 值在调制函数中改变, 则主调制函数中的结构成员的值也将改变。 如 实施例 9-10 所示例 9-101 #包括 2 strut student 3 4
28、 56 ;7 void change(strut Student * stu)8 9 10 11 12 void main()str copy(stu-> name stu-> studentID = 2; char name50; 学生间差异;14博雅研究谷 -让信息技术更容易教学,更有效地学习13 14 15 16 17 struct student = change(printf(运行结果如图 9-14 所示)图 9-14 运行结果在示例9-10中,定义了一个change()函数来更改数据。该函数需要 接收结构指针类型的参数。 由于结构指针用作函数参数, 因此需要传 递结构变
29、量的第一个地址。 因此,在代码的第 15行,传递了“函”数。在上述语法格式中,“ unior是定义公共体类型的关键字,后面是定 义的“公共体类型名称 ”。在“公共体类型名称 ”下的括号中,定义了公 共体类型的成员项,每个成员由 “数据类型”和“成员名称”组成例如,下面的代码 :union data int m;浮动 x ; char c; ;15博雅研究谷 -让信息技术更容易教学,更有效地进行信息技术学习上述代码定义了一个名为 data 的通用主体类型,它由共享相同存储 空间的三种不同类型的成员组成公共体变量的定义 公共体变量的定义类似于结构变量的定义。如果要定义公共体变量a和b的两种数据类型
30、,可以采用以下三种方法1。首先定义公共体类型,然后定义公共体变量。具体示例如下 : 联合数据 int m ;浮点 x;char c; ;工会数据 a, b;2。定义了公共体变量,同时定义了公共体类型。具体示例如下 : 联合数据 int m; 浮动 x; char c; a , b;3,直接定义公共体类型变量,具体示例如下 :union int m; 双 x。char c; a , b;以上三种方法都是用来定义公共体变量 A 和 B 的,它们与结构变量 的定义相同。?再学一个技巧 :共享空间的内存分配共享空间的内存分配必须符合如下两个标准 :1,共享空间的内存必须大于或等于其成员变量中的大数据类
31、型 (包括基本数据类型和数组 )的大数据类型小数据类型2,共享空间的内存必须是最宽基本数据类型的整数倍, 否则必须填充字节接下来,通过对两个常见物体的记忆分析来解释上述标准。(1)成员变量都是基本数据类型的公共项,特别是union int m;浮动 x; char c; a ;16博雅研究谷 -使信息技术教学更容易,信息技术学习更有效。公地 a 的内存大小如图 9-15 所示 结构可变头地址最大基本数据类型浮点大小 :4 字节 图 9-15 公共体 a 的内存大小公共体a的内存大小是最大数据类型(即int和float)占用的字节数, 因此公共体 a 的内存大小为 4 字节(2)成员变量包含数组
32、类型的公共体,如下所示union int m;浮动 x ; char c; char name5; b。公共体b的内存大小如图9-16所示。结构的可变头地址字符名称 5占用的字节大小 :5字节 3填充字节 图 9-16 公共体 b 的内存大小公共体 b 的内存大小是根据最大数据类型字符名称 5分配的,字符名称5占用5个字节公共体B的内存大小也必须是最宽的基本数据 类型的整数倍,因此它填充了 3 个字节,总共 8 个字节。读取器可以 通过sizeof()验证公共体变量的内存大小共享卷变量的初始化和引用 在定义共享卷变量时只能初始化一个成员的类型值,这也与其内存 分配相对应公共体变量的初始化方法如
33、下 :union公共体类型名称公共体变量二一个成员的类型值 从上述语法格式来看,虽然只能给一个成员赋值,但必须用大括号 括起来例如,以下语句用于初始化数据类型的公共体变量 a 17人文艺术谷 -使信息技术更易于教学,对信息技术学习更有效联合数据 a = 8 ;完成公共体变量的初始化后,可以引用公共体中的成员。公共体变 量的引用方法类似于结构。 例如,下面的代码定义了一个公共体变量 和一个公共体指针联合数据int m;浮动 x ; char c; ;union data a,*p=如果要引用公共体变量中的 m 个成员,可以使用以下方法 :a . m; /引用公共体变量 A 中的成员 mp->
34、;m /,引用公共体指针变量 p 指向的变量成员 m ,应该注意的是,虽然公共体变量的引用方法与结构的引用方法相 似,但两者是有区别的。 主要区别在于,在程序执行的任何特定时刻, 结构变量的所有成员同时驻留在结构变量占用的内存空间中, 而公共 体变量只有一个成员驻留在公共体变量占用的内存空间中接下来, 通 过实例进行验证,如实例 9-11 所示。例 9-111 #包括 2 个联合数据 3 4 5 6 ;7 void main()8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 printf( s address % p n printf( s addr
35、ess % p n printf( s address % p n union Data d; /定义一个联合 d.i = 15printf( printf( printf(d . j = a );printf( printf( printf( int I ; char j;的运行结果如图 9-17 所示18博雅研究谷 -为了使信息技术教学更容易,信息技术学习更有效图 9-17 操作结果在示例9-11中,定义了数据类型的公共体积变量 d。有两个变量I 是整型的, j 是字符型的。当我被赋给 15时,此时结构 d 中只有一个 值15。I的值、j的值和结构变量d的值在相应的存储器中实际上是 相同的
36、值。当 j 的值是字符 a 时,那么此时在存储器中只有对应于 d 的字符a,并且I、j和d的值是97最后,打印D、丨和J的地址,这 三个地址是相同的, 这进一步解释了公共体变量在任何时候在内存中 都应该只有一个成员值。9.6 TypeDef-别名数据类型在前面的章节中,由 C 语言提供的各种数据类型和用户声明的结构、 共享空间、指针类型等。被解释了。除了这些数据类型, C 语言还允 许用户使用typedef关键字来别名现有的数据类型使用typedef关键字 可以方便程序迁移并减少对硬件的依赖。 接下来,将详细解释 typedef 关键字。使用typedef关键字的的语法格式如下 :typede
37、f数据类型别名;在上述语法格式中, 数据类型包括基本数据类型、 构造的数据类型、指针等。接下来,将详细解释这些项目。1,别名基本类型,别名int类型使用typedef关键字,示例代码如下:typedef int ZX ; ZX 世,j, k;上面的语句定义int数据类型为ZX,那么ZX可以用来定义程序中的整数变量2.别名数组类型使用 typedef 关键字来别名数组。示例代码如下 :typedef char NAME10 ;名称类别 1,类别 2;上面的语句 定义了一个可以包含 10 个字符的字符数组 NAME ,并使用 NAME 定义了两个字符数组 class1和class2,它们相当于ch
38、ar class110和char class2103,别名结构别名结构类型学生使用 typedef 关键字,示例代码如下 :typedef结构学生intnum; char name10;19博雅研究谷 -让信息技术更容易教学,更有效地进行信息技术学习char sex STU。STU stul 上面的陈述定义了学生类型的结构 STU,STUDU1 语句等效于 structure student1 ;句子应该注意的是,使用typedef关键字只是别名现有类型,而不是定义 新类型有时宏定义可以用来替换 typedef的函数,但是宏定义是通过 预处理完成的,而 typedef 是在编译时完成的,这使得
39、使用 typedef 更加灵活。9.7 高级案例发现学生平均分数在学习了结构和普通体的相关知识后,下面是计算平均分数以加深 对结构的理解的案例。具体要求如下 :?一个小组有三个学生。 每个学生选修四门课程 (与三个学生相同的 课程)?在程序中输入 3个学生的 4门课程的分数,程序自动计算 4 门课 程的分组平均分数,然后用代码实现上述功能,如例 9-12 所示。例9-121 # define _ CRT _ secure _ no _ warnings 2 # include 3 # include 45 typedef structstu 67 910 Void Main()11 12 13
40、 14 15 16 17 18 19 20 21 22 23 24 25 26 27 /将三名学生的每个科目的成绩相加, 得出 (j = 0) 的平均分数 j int i ,j; 浮动总和 = 0,平均值;斯图3; /定义一个包含3个元素的结构数组/从键盘输入学生的姓名和分数(I = 0; I请输入%d名学生的姓名和四门课程的成绩 : n scanf( for(j = 0 ; j scanf(char name20; /学生姓名浮动分数4; 4门课程,8 STU ;20博雅研究谷 -让信息技术更容易教学,更有效地学习28 29 30 31 32 33 34 35 36 37 系统(for(I = 0 ; I
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 养老院老人入住手续制度
- 养老院老人安全保障制度
- 向命运挑战课件
- 城市经济学城市化教学课件
- 救生员入职合同(2篇)
- 2024年度生物安全试剂采购与储备合同3篇
- 2024年农业设施维修及保养承包合同样本3篇
- 2025年大兴安岭货运从业资格证模拟考试题目
- 2025年塔城货物运输驾驶员从业资格考试系统
- 2025年阜阳货运从业资格证试题库及答案
- 物流行业疫情应急处理及防控措施预案
- 江南大学《自然语言处理》2022-2023学年第一学期期末试卷
- 食品安全知识培训
- 期末试题-2024-2025学年语文六年级上册统编版
- 狼蛛课件教学课件
- 成品油运输 投标方案(技术方案)
- 2024年世界职业院校技能大赛中职组“法律实务组”赛项考试题库(含答案)
- 青岛科技大学《宪法学》2021-2022学年期末试卷
- 2024-2030年中国水利工程行业发展规划投资战略分析报告
- 常见消防安全隐患图解精美
- 生物化学习题库+参考答案
评论
0/150
提交评论