【连载】(操作一维数组)——乐创DIY C语言讲义——5.2节
一维数组在被定义好之后,就可以在程序中去使用它了,一般一个数组的使用有元素读取,元素赋值,元素遍历等操作。说到底无非就是数组定义及初始化,元素的读写,和数组的读写这几种方式。接下来的内容,我们就具体来看下这几种读写操作是如何实现的。数组的定义在第5.1节中已经简单地讲述过,我们可以用之前学过的基本数据类型来声明这个数组的数据类型,也可以使用后面会讲述的结构体和指针类型来定义数组。一旦数组被定义好之后,其中的每个元素的数据类型都为数组定义时的数据类型。如“char UpperChar[26];”,那么这个数组中的每一个元素都为char类型。在我们之前所讲述数据类型和变量定义时,曾经讲过一个变量被定义好之后,需要对其进行初始化,即赋予这个变量一个初始值。当我们在定义好一个数组之后,也会对其进行初始化。假设我们需要对定义的数组赋予初值0的时候,只需要使用“数据类型数组名[数组长度] = {0};”即可。但是,如果你需要初始化的每一个值都不一样时,这种赋初值的方式就不适用了,如果定义的数组长度比较小时,我们可以使用“数据类型数组名[数组长度] = {元素0初值, 元素1初值, ……,元素n初值};”。假设我们需要定义一个变量,依次存入0~9这十个初始值,那么可以定义为“int number[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};”。如果需要数组长度很长,而且每个元素的初始值不一样,且没有规律,那么只有一个办法,即一个个手动敲进去。当然,你也可以自己编写一个程序,去自动生成.c文件,这个需要一定的编程水平,我们暂时不说。单个数组元素的读写,之前第5.1小节中我们就有所提到过,只需要使用“下标引用”的方式即可,等到我们讲到指针之后,再来讨论如何利用一个指针来引用一个数组中的元素。如,当我们需要对一个数组中的第n个元素写入一个值时,只需要使用“数组名[n] = 值;”即可实现数组单个元素的写入。同样的,当我们需要读取一个数组中的第n个元素时,只需要使用“目标变量 = 元素名[n];”即可实现单个元素的读取。何为遍历,遍历即把数组中的所有元素都读取一遍。遍历一般和查找可以结合到一起来使用,其一般用途为,遍历一个数组中的所有元素,找出满足条件的,并且将其做其他操作,如打印或者转存。其实遍历说直白了就是对一个数组进行批量读取,而我们思考下前面所述的内容,如何进行一些批量的工作?很显然最简单的方法即是使用循环控制语句,让它不断地读取这个数组的每个元素,直到读取完成即可。在我们过去使用的循环控制语句中,常用的结构有两种,第一种是while循环,第二种是for循环。接下来的内容,我们分别来讨论如何利用这两种循环来实现一个数组的遍历。首先,我们来选定一个用于验证数组遍历查找的例子,这个例子很简单:小杰闲来无事,统计出了班级中所有同学的单元测试成绩,已知小杰这次考试考了80分,他想看看班级里面有多少同学比自己考的高,小杰班级里面一共有20人,我们帮他写这个程序,打印出所有比小杰考得高的分数。int Score[20] = {89, 57, 90, 78, 65, 92, 93,98, 99, 89, 81, 80, 54, 29, 44, 67, 45, 78, 90, 99};我们先来看如何利用while来遍历一个数组。while关键词作为循环控制语句关键词时,它所成立的条件为“while(条件)”中的条件为真即成立,那我们其实就可以利用这个规律,当我们遍历一个数组时,肯定是从一个数组的两端中的任意一段开始的,要么从数组中第一个元素开始,要么从数组中最后一个元素开始。那我们可以定义一个变量i,这个变量i初始化时使其为0,每次读取一个元素后,将其加1,当我们需要遍历一个长度为n的数组时,读取元素的次数实则为20个,以数组Score[20]为例,我们读取的顺序为Score[0],Score[1],Score[2]……Score[19]。从这个规律我们可以看出,i的增长其实是和元素遍历的顺序是一样的,因此我们只要使用i作为数组的下标引用序号,然后判断i是否加满20次即可。如图5-2-1所示。
图 5-2-1 数组遍历流程
当while循环第一次运行时,i的初始值为0,因此Score[i]就等价于Score[0],即取到了第一个元素的值,接着i自加变成1;第二次运行时,i的值为1,因此Socre[i]就等价于Score[1],即取到了第二个元素的值,接着i自加变成2;以此类推,等到第二十次时,i的值为19,因此Score[i]等价于Score[19],接着i自加1变成20,而20不满足“i < 20”这个条件,因此while循环被打破,即跳出while循环。此时,我们已经实现了数组的遍历了,那么再加一个判断条件,判断数值中的元素大于80的即将其打印出啦即可,因此我们可以完成如图5-2-2的程序。
再来用for语句实现数组的遍历,还是打印成绩这个例子。我们知道for语言的形式为“for(初识条件; 终止条件; 条件调整)”,参考while循环的思路,我们也可以定义一个变量i作为数组元素引用的下标,因此只需要控制住i就可以实现遍历。首先初始条件,即i = 0,终止条件i < 20,条件调整i ++。我们其实可以发现while循环其实是和for循环无缝转换的。最终我们可以写出图5-2-3的程序。其实for语句更像是while的简化版/现在来看最后一个问题,相信如果你看懂了数组的遍历,那么这个问题会变得非常简单。我们需要定义一个数组,长度为1000,并且需要赋初值,第一个元素为0,第一个元素为1,一直到第1000个元素为999。这个题目看着好像很复杂,其实我们也只需要像上述数组遍历时一样,让这个数组循环1000次,并且分别写入不同的初始值即可。程序如图5-2-3所示。