Skip to main content

数组与结构

小结

  1. 数组是有序的若干个数据的组合,用于描述同一种类型的数据的集合,属于构造类型的数据结构
  2. 数组的所有元素按顺序存放在一个连续的存储空间中,数组名就是这个存储空间的首地址(即第一个元素的存放地址)的符号地址。
  3. 下标访问是常见的数组访问方法。
  4. 定义数组时需要确定数组元素个数(数组长度),因此,在定义时必须用整型常量表达式来定义数组长度,而且不允许修改数组大小。
  5. 在C语言中,数组的下标是从0开始,最后一个下标是数组的长度减1。在使用时,数组下标不应该超过这个范围,否则会出现数组越界问题。
  6. 数组的元素可以是任何已定义的类型。如果数组的元素也是数组,则构成二维数组;如果数组的元素是二维数组,则构成三维数组;以此类推,可以构成多维数组。
  7. 数组元素是字符(char)型的数组,称为字符数组,字符数组只在定义时才允许整体赋值,其赋值、比较都应该使用C语言的库函数进行。
  8. C语言中的字符串以\0为结束标记,而没有最大长度的制约。存储字符串的字符数组的长度必须大于字符串的长度。在使用字符串时,一定要考虑有效空间、\0、界限这三方面的关系。
  9. 结构是若干数据元素的集合,这些数据元素可以是同一数据类型,也可以是不同的数据类型。结构一般用于描述有内在逻辑关系的多个数据的组合。结构也是一种构造类型。
  10. 结构在使用时,一般是先定义结构类型,再用这个类型来定义和初始化结构变量。
  11. 结构变量的每个成员都有自己独立的存储空间,所有成员都是连续存放的。
  12. 可以将某结构变量直接赋值给另一个同类型的结构变量,在对结构变量进行输入输出时,必须通过对结构变量的各成员的访问来进行。可以使用成员选择运算符来访问结构的某个成员。
  13. 元素类型为结构的数组称为结构数组。在实际的程序设计中,一般使用结构数组来描述顺序存储的包含多种信息的序列,如多个学生的信息等。

习题

1

用一个数组存放图书的信息,每本书包含书名、作者、出版年月、出版社、借出数目、库存数目等信息。编程存放若干本书的信息,按书名排序后输出。

提示:对书名进行排序,而书名是字符串,因此要使用字符串比较函数 strcmp,而不要直接对两个字符串进行比较。

2

战士分子弹问题。在某次实弹射击训练中,班长将10个战士围成一圈分子弹。

首先,班长分给第1个战士10颗,分给第2个战士2颗,分给第3个战士8颗,分给第4个战士22颗,分给第5个战士16颗,分给第6个战士4颗,分给第7个战士10颗,分给第8个战士6颗,分给第9个战士14颗,分给第10个战士20颗。

然后按如下方法将每个战士手中的子弹进行调整:所有的战士检查自己手中的子弹数,如果子弹数为奇数,则向班长要一颗。然后,每个战士再同时将自己手中的子弹分一半给下一个战士(第10个战士将手中的子弹分一半给第1个战士)。

问需要多少轮调整后,每个战士手中的子弹数都相等?每人各有多少颗子弹?

要求输出每轮调整后各战士手中的子弹数。结果的输出格式如下:

0 10 2 8 22 16 4 10 6 14 20 各战士手中原始的子弹数
1 15 6 5 15 19 10 7 8 10 17 第1轮各战士手中的子弹数
2 xx xx xx xx xx xx xx xx xx 最后一轮各战士手中的子弹数

提示:为简单起见,在进行一轮分发时,可先判断每位战士的子弹数是否为偶数;若不是,则将这位战士的子弹数加1。

然后,再考虑每个战士将自己的子弹同时分一半给下一个战士,这样每个战士的子弹数将是他原来的子弹数和他的上一位战士的子弹数的平均数。例如,第2个战士的子弹数将是他原来的子弹数2和第1个战士的子弹数10的平均数6,第1个战士的子弹数将是他自己的子弹数10和最后一个战士的子弹数20的平均数15,以此类推。

因此,这个题可使用双重循环,外层循环的结束条件是所有战士的子弹数相等,在循环中,先判断每个战士子弹数的奇偶性并做相应处理,再用一个计数循环,对每个战士的子弹数循环赋值。