二级计算机等级考试。C语言
第7章 结构体、联合体和枚举类型《 C 语 言 程 序 设 计 》(Visual C++ 6 0 环 境 ) .
本章导读结构体、联合体、枚举类型都是用户自己定义的数据类型, 这些类型的数据是用户根据实际需要来组织的。结构体和 联合体都是构造类型的数据,枚举类型是基本类型的数据。
本章主要知识点(1)结构体类型数据的定义,结构变量的说明及引用方法 结构指针的定义、使用以及结构指针在C程序中的应用—— 链表的建立、输出、删除与插入等操作 (2)联合体类型数据的定义,联合变量的说明及引用方法 (3)枚举类型数据的定义,枚举变量的说明及引用方法 (4)了解自定义类型的概念和类型定义方法及应用返回本书目录
二级计算机等级考试。C语言
第7章 结构体、联合体和枚举类型《 C 语 言 程 序 设 计 》(Visual C++ 6 0 环 境 ) .
7.1 结构体 7.2 联合体
7.3 枚举类型7.4 自定义类型
7.5 综合实训返回本章导读
二级计算机等级考试。C语言
7.1 结构体《 C 语 言 程 序 设 计 》(Visual C++ 6 0 环 境 ) .
7.1.1 结构体与结构变量 7.1.2 结构成员的引用7.1.3 结构数组 7.1.4 结构指针与链表返回本章目录
二级计算机等级考试。C语言
7.1.1 结构体与结构变量《 语 言 程 序 设 计 》(Visual C++ 6 0 环 境 ) .
“结构体”是一种构造类型,是由数目固定,类型相同或不同的 若干有序变量组成的集合。组成结构体的每个数据都称为结构 体的“成员”,或称“分量”。
C
1.结构体类型的声明 2.结构变量的定义 3.结构体类型与结构变量返回本节目录
二级计算机等级考试。C语言
1.结构体类型的声明《 C 语 言 程 序 设 计 》(Visual C++ 6 0 环 境 ) .
声明一个结构体类型的一般形式为: struct <结构体名(也称为结构体标记)> { 成员表列(也称为域表) }; 应注意在括号后的分号是不可少的。成员表列由若干个成员组 成,每个成员都是该结构体的一个组成部分。对每个成员也必须 作类型说明,其形式为: <类型说明符> <成员名>; 成员名的命名应符合C语言标识符的书写规定,结构体成员名可 与程序中其它变量同名,互不干扰。
返回7.1.1目录
二级计算机等级考试。C语言
2.结构变量的定义《 C 语 言 程 序 设 计 》(Visual C++ 6 0 环 境 ) .
对于已经声明的结构体类型,就可有对应于该类型的“结构类型变量”, 简称为“结构变量”。定义结构变量有以下三种方法: (1)先声明结构体类型,再定义结构变量 即在先前声明的结构体类型后加上以下形式: struct <结构体名> <结构变量表列>; (2)在声明结构体类型的同时定义结构变量 即被定义的结构变量直接在结构体类型声明的“}”后给出。一般形式为: struct <结构体名> { 〈成员表列〉 }〈结构变量表列>; (3)直接定义结构变量 即省略结构体名。一般形式为: struc
t { <成员表列> }<结构变量表列>;
返回7.1.1目录
二级计算机等级考试。C语言
3.结构体类型与结构变量《 C 语 言 程 序 设 计 》(Visual C++ 6 0 环 境 ) .
结构体类型与结构变量的最大区别在于:结构变量占有一定的内 存空间,而结构体类型只是一种数据类型的结构描述,并不占用内 存空间。 struct box { float length; float width; float height; }; 它表明struct box结构体类型由大括号中所列的一些数据项组成,共 需占用4x3=12个字节。 在此之后,若进行结构变量的定义如: struct box box1; 表明box1为struct box结构体类型变量,它占用了12个字节的内存单 元。返回7.1.1目录
二级计算机等级考试。C语言
7.1.2 结构成员的引用《 语 言 程 序 设 计 》(Visual C++ 6 0 环 境 ) .
对结构变量的访问是通过对结构变量各个成员的访问来进行的, 结构变量成员描述为:<结构变量名>.<成员名> 在引用中应遵循以下原则: (1)如果成员本身又是一个结构体类型时,则必须逐级找到最 低一级的成员才能使用。 (2)对成员变量的使用与普通变量完全相同,可根据其类型进 行相应的运算。 (3)可以引用成员的地址,也可以引用结构体变量的地址。 (4)允许将一个结构变量直接赋值给另一个具有相同结构的结 构变量。
C
【例7.1】返回本节目录
二级计算机等级考试。C语言
例7.1(1)《 C 语 言 程 序 设 计 》(Visual C++ 6 0 环 境 ) .
【例7.1】利用结构体对三名学生的学号、姓名、性别、成绩进行输入与输出。 程序名为l7_1.cpp。 #include "stdio.h" struct stu { long int num; char name[20]; char sex; float score; }student1,student2={960002,"Zhang hong li",'W',98},student3;/*对student2初始化*/ main() { student1.num=960001; /*对student1各成员赋值*/ scanf("%s",); student1.sex='M'; student1.score=65; student3=student1; /*对student3直接赋值*/
返回7.1.2目录
二级计算机等级考试。C语言
例7.1(2接上页)《 C 语 言 程 序 设 计 》(Visual C++ 6 0 环 境 ) .
printf("\n%ld\t%20s\t%c\t%f",student1.num,,student1.sex, student1.score); printf("\n%ld\t%20s\t%c\t%f",student2.num,,student2.sex, student2.score); printf("\n%ld\t%20s\t%c\t%f",student3.num,,student3.sex, student3.score); } 运行情况如下: 输入:Lilin< CR > 960001 Lilin M 65 960002 Zhang hong li W 98 960001 Lilin M 65
程序演示
返回7.1.2目录
二级计算机等级考试。C语言
[例7.1]程序演示
返回例题
返回7.1.2目录
二级计算机等级考试。C语言
7.1.3 结构数组《 语 言 程 序 设 计 》(Visual C++ 6 0 环 境 ) .
数组元素是结构体类型数据,这时的数组就是结构数组。
C
1.结构数组的定义 2. 结构数组的初始化 【例7.2】返回本节目录
二级计算机等级考试。C语言
1.结构数组的定义《 C 语 言 程 序 设 计 》(Visual C++ 6 0 环 境 ) .
结构数组的定义方法和结构变量相似,只需说明它为数组类型即可。 例如: struct stu { int num; char name[20]
; char sex; float score; }; struct stu student[3]; 也可以直接定义一个结构数组或省略结构体名。
返回7.1.3目录
二级计算机等级考试。C语言
2.结构数组的初始化《 C 语 言 程 序 设 计 》(Visual C++ 6 0 环 境 ) .
对结构数组可以进行初始化,它的作用在于把成批的数据传递 给结构数组中的各个元素。 初始化的一般形式为: struct <结构体名> <结构数组>[n]={<初始表列>}; 其中,n为元素的个数。在初始表列中,以一个元素内容为单位, 用一对“{}”括起来,各元素之间用“,”分隔。 当对数组中的全部元素初始化时,也可将“[ ]”中的数组元素个 数省略。在编译时,系统会根据给出初值的结构体常量的个数 来确定数组元素的个数。 数组的初始化也可以先声明结构体类型,然后再定义数组为该 结构体类型,并在定义数组时初始化。
返回7.1.3目录
二级计算机等级考试。C语言
【例7.2】(1)《 C 语 言 程 序 设 计 》(Visual C++ 6 0 环 境 ) .
【例7.2】计算学生的平均成绩并统计出不及格的人数。程序名为l7_2.cpp。 #include "stdio.h" struct stu { long int num; char name[20]; char sex; float score; }student[3]={{200001,"Li li",'W',99},{200002,"Wang hai",'M',85}, {200003,"Liu ying",'W',50}}; main() { int i,n; float average,sum; n=0; sum=0;
返回7.1.3目录
二级计算机等级考试。C语言
【例7.2】(2上接1)《 C 语 言 程 序 设 计 》(Visual C++ 6 0 环 境 ) .
for(i=0;i<3;i++) { sum+=student[i].score; if(student[i].score<60) n+=1; } printf("sum=%f\n",sum); average=sum/3; printf("average=%f\ncount=%d\n",average,n); } 运行情况如下: sum=234.000000 average=78.000000 count=1.
程序演示
返回7.1.3目录
二级计算机等级考试。C语言
【例7.2】程序演示
返回例题
返回7.1.3目录
二级计算机等级考试。C语言
7.1.4 结构指针与链表《 C 语 言 程 序 设 计 》(Visual C++ 6 0 环 境 ) .返回本节目录
1.结构指针
2.链表
二级计算机等级考试。C语言
1.结构指针《 C 语 言 程 序 设 计 》(Visual C++ 6 0 环 境 ) .
我们把指向结构体的指针称为结构指针,它是一个指针变量。 结构指针变量说明的一般形式为: struct <结构体名> *<结构指针变量名>; 这样说明的含义是:一规定了指针的数据特性;二为结构指针 本身分配了一定的内存空间。 结构指针变量必须要先赋值后才能使用,赋的值应是一个地址 值。 有了结构指针变量,就能更方便地访问结构变量的各个成员。 其访问的一般形式为: <(*结构指针变量)>.<成员名> 或为: <结构指针变量>-><成员名>
返回7.1.4目录
二级计算机等级考试。C语言
1.结构指针《 C 语 言 程 序 设 计 》(Visual C++ 6 0 环 境 ) .
在结构指针的使用中可分为以下几种情况:
(1)指向结构变量 (2)指向结构数组 (3)结构指针作函数参数返回7.1.4目录
二级计算机等级考试。C语言
(1)指向结构变量《 C 语 言 程 序 设 计 》(Visual C++ 6 0 环 境 ) .
当使用结构指针指向一个结构变量时,指针变量中
的值就是所指 向的结构变量的首地址。 这三种用于表示结构成员的形式是完全等效的。 ①结构变量.成员名 ②(*结构指针变量).成员名 ③结构指针变量->成员名 请注意分析下面几种运算: s->n 得到s指向的结构变量中的成员n的值 s->n++ 得到s指向的结构变量中的成员n的值,用完该值后使 它加1 ++s->n 得到s指向的结构变量中的成员n的值使之加1
【例7.3】返回1目录