1
C语言程序设计
1.5.5 4.5 结构数组

4.5 结构数组

数组元素的类型可以是任何类型,当然也可以是结构类型,这就是结构数组。结构数组与其他类型的数组一样,只是它的元素是结构类型。单个结构类型变量在解决实际问题时作用并不大,在程序中结构一般以结构数组形式出现。实际上,结构数组是一个非常有用的数据结构。

假设例4-7的同学录中要存储的学生共有40个,则语句

  struct student stu[40];

定义了一个有40个元素的结构数组,它的每个元素都是struct student类型。

引用结构数组的方式就是引用数组元素和引用结构的成员两种方式的结合,例如:

  printf("%s ",stu[1].name);

用于输出stu数组的第2个数组元素(下标为stu[1])的name成员。

要注意stu[1].name和stu.name的意义是不同的。前者是引用结构数组stu下标为1的元素(第2个元素)的name成员引用是正确的,后者的引用是错误的,因为,stu不能表示数组中一个具体的数组元素,所以也不能访问其数据成员name。

例4-8 假设同学录中共有40位同学,编写程序输入这些同学的信息,并按身高从低到高的顺序对这40位同学排序,然后按这个顺序输出这些同学的姓名和身高。

算法分析 本例只需顺序输入这40位同学的信息,再使用冒泡排序法按身高从低到高排序,然后输出就可以了。注意到前面例4-2的冒泡排序是按数组元素的值从大到小排序,而这里,则需要按数组元素的height成员的值从小到大排序,因此,在每次扫描时,比较的对象和方法都有了区别。

本例用结构数组stu存储40位同学的信息,用n表示同学的数量。参考程序如下:

img385

img386

在程序4-8.cpp中,第10到16行定义了student结构类型;

第20行定义了一个student类型的结构数组stu;

第24到39行用于顺序输入同学的信息;

第41到56行用于将同学信息按身高从低到高排序;

第47到50行用于交换两个人的信息,这种交换是对结构变量的整体交换,即4个成员一起交换,这里使用数组未使用的下标为0的元素作为交换的临时变量;

第63行stu[i].birthday.month是对stu的下标为i的数据元素的birthday成员的month成员的引用;

第57到65行用于顺序输出同学的信息。