7.1 使用数组
题目:填数(如图7-1所示)
图7-1 填数的题目
这是小学数学练习册里的一个题目。这个问题的特点是一组数据逐个减去8,得到的结果也是一组数据。
7.1.1 老式的解决办法
按照从前的办法,可以用变量存储这组被减数和这组差:
但如果这两组数据都较多的时候,这种办法是很难行得通的。理由是很难在一个函数定义成百上千个变量。即使理论上可以,也很难找到或很难描述与之相适应的算法。同时代码也将会十分冗长混乱,甚至根本无法把握其正确性。
这时就需要程序编写者自己构造更适合描述问题和解决问题的新的数据类型。
数组是描述比基本数据类型略为复杂些的一类数据对象的一种构造性的数据类型。
7.1.2 首先要定义数组
具体来说,数组通常用于描述问题中一组性质相同且有序的数据。
对于代码来说,数组是指一组数据类型相同的数据对象。这时,可以为这组数据对象取一个共同的名字,就如同若干学生组成了一个班级一样。
对于前面的题目,可以为这组被减数和差分别取一个名字bjs和cha。
正如同在使用变量之前需要定义变量一样,使用数组也首先需要进行定义。对于该题目,bjs和cha可以定义为:
这两个定义表明了bjs和cha这两个数组分别有4个int类型的数据对象,且为这些数据申请了相应的存储空间。
从这里可以看到,使用数组至少有一个好处,那就是不用再为一组相同类型的变量一一取名了。
7.1.3 如何称呼数组中的各个数据对象
在代码中,数组中的各个数据对象是通过其公共的名字及其编号来称呼的。就如同通过班级名称和学号来指称班级里的一个学生一样。
数组中的每个数据对象都叫做数组的元素;数组元素的编号是从0开始的,bjs这个数组中的4个元素依次被称为bjs[0]、bjs[1]、bjs[2]、bjs[3],这就是它们在代码中的“称谓”。使用这些称谓的方式和使用普通的int类型的变量名一样:可以用这些称谓通过标准输入设备读入数据,比如“scanf("%d",&bjs[0])”;可以用这些称谓进行运算,比如“bjs[0]-8”;甚至同样也可以被赋值,比如“cha[0]=bjs[0]-8”;当然,也可以向标准输出设备输出,如“printf("%d",bjs[0])”。
7.1.4 完整的演示
程序代码7-1
这段代码有许多不尽完美之处,它的目的仅在于演示数组的使用方法,所以请把注意力放在如何定义数组和数组元素的使用上面。
练习
编写程序,用数组完成下面问题。