趣乐博思剑指信奥系列
❝趣乐博思剑指信奥系列,专门针对全国青少年信息学奥林匹克联赛 NOIP 而开展的专业教育方案。开设的课程有 C 语言基础,C++ 语言基础,算法设计入门与进阶,经典试题分析与详解等系列课程。面向10 - 16 岁少儿的编程教育,培养扎实的 C++ 语言基础,灵活运用算法的能力,分析解决问题的能力。
❞
剑指信奥 | C 语言之兵人来袭!
当变量急剧增长
还记得我们在 C 语言一开始学过的变量吗?
在程序设计中,变量是指一个包含部分已知或未知数值的储存空间,以及相对应的符号名称(变量名)
Wikipedia
看一小段有关变量的代码:
int main() { int i; scanf("%d", &i); printf("%d", i); }#include
这段代码非常的简单,它做了这样三件事:
声明一个变量 i输入一个值给 i再次输出 i 的值
我们很容易的定义了一个变量,并对它进行赋值。
比如这个变量表示一本书的页数,那么我们就完成的页数的输入和输出。
但是如果不只有一本书,而是有数学、语文、英语三本书,怎么做呢?
似乎也不难,看下代码:
int main() { int math, chinese, english; scanf("%d %d %d", &math, &chinese, &english); printf("%d %d %d", math, chinese, english); }#include
这也并不难,三本书的页数都做到了输入和输出。
现在,新的问题又来了,不只有几本书了,我们要求输入一整个图书馆的所有书的页数...
图书馆的书有上万本
天呐,不会要定义几万个变量吧!
当然不用了,不然,定义完变量都地老天荒了~
我们来看一个聪明的解决方案 —— 数组。
数组的含义
什么是数组 array?
在计算机科学中,阵列资料结构(英语:array data structure),简称数组(英语:Array)。
数组是由相同类型的元素(element)的集合所组成的资料结构,分配一块连续的内存来存储。
Wikipedia
当我们有大量的数据需要存储时,数组就派上了用场。
数组里通常保存同一类型的许多数据,并可以进行快速的赋值和快速的输出。
数组是一种非常重要的数据结构,学好用好数组对于我们进一步学习算法至关重要。
在计算机科学中,数据结构(英语:data structure)是计算机中存储、组织数据的方式。
Wikipedia
数组也是所有高级计算机语言都具有的一种数据存储方式。
那么,具体到了 C 语言,数组是怎样使用的呢?
数组的使用
我们现在开始学习数组的使用,按照以下的三个方面:
数组的定义数组的赋值数组的输出注意的问题
数组的定义
在 C 语言中,定义数组只需要一行代码:
// 声明一个数组 int numbers[10]; }int main() {
对,就是这样,我们就声明的一个数组。
什么含义呢?
数组 numbers 中存放 10 个 int 类型的数据。
数组存放数据的示意
这 10 个数据在计算机的内存中是连续存放的,其中的每一个数据我们称之为这个数组的元素 element。
每一个数组的元素还有一个序号,我们称之为索引 index,索引是从 0 开始的,numbers[0]
就代表这个数组的一个元素。
数组的赋值
数组中的每一个元素都相当于一个变量,有了元素的概念,数组的赋值就很简单了:
int numbers[10]; // 为数组元素赋值 numbers[0] = 123; }int main() {
这样就为数组的一个元素赋值为 123。
数组的输出
当我们为元素赋值以后,就可以输出这个元素的值了:
int main() { int numbers[10]; numbers[0] = 123; // 输出第一个元素的值 printf("%d", numbers[0]); }#include
此外,如果我们需要快速输出一个数组所有元素的值,还可以利用我们学过的循环语句来实现:
int numbers[10]; int main() { // 循环输出数组的每个元素 for (int i = 0; i < 10; i++) { printf("%d ", numbers[i]); } }#include
非常快的速度,10 个数字就完成了输出。
注意的问题
在使用数组时,我们需要注意一个问题,看下面这个例子:
int numbers[10]; int main() { printf("%d", numbers[10]); }#include
这段程序是可以执行的,但是却存在一个不太容易发现的逻辑问题。
注意到数组 numbers 只有 10 个元素,而索引是起始于 0,所以,这个数组的元素只能是numbers[0]
到numbers[9]
,numbers[10]
已经超出了索引的界限。
这是在数组使用时非常容易产生的一个错误,需要小心避免。
多维的数组
在上面我们讲的数组都是一维数组,就是说,数组的元素排列起来像一条线:
排成一列的兵人
而语言中,还有多维数组的存在,比如常用的二维数组。
如果说一维数组是一条线,那么二维数组就是一个面:
有行有列的二维数组
在 C 语言当中,二维数组的定义是这样的:
// 二维数组的定义 int matrix[1024][768]; }int main() {
可以把二维数组理解为一个关于一维数组的一维数组,是不是有点绕?
关于二维数组的使用,就作为我们今天的课后思考题吧~
日积月累
array 数组element 元素index 索引「 剑指信奥系列」
从零开始,进阶信息学奥林匹克竞赛
清华计算机系哥哥专业讲解
趣乐博思教育
遇见你更优秀的孩子
r
如果您喜欢趣乐博思教育,请关注我们的公众号,发现您更优秀的孩子!
如果您从这篇文章有所收获,请点亮下方在看,或转发到朋友圈,谢谢!