你好, 欢迎｡
在这堂课中, 我想谈谈 数组的概念｡
数组是一个概念, 允许 在一个变量中存储许多不同的值｡
数组在大多数 程序设计语言｡
它们可帮助您简化 编程效率大大提高｡
所以我们要谈谈 在c中创建和使用数组｡
所以一个数组｡
在程序中很常见的是 指定类型的多个数据值｡
例如, 在体育节目中,
您可能希望存储所有游戏的分数, 或者 每个玩家的得分｡
到目前为止, 我们可以很容易地 实现它, 但是我们必须为每个分数编写不同变量｡
想象一下如果有很多游戏｡
我的意思是棒球有162场比赛｡
如果我们要编写一个 是一个棒球程序,
希望存储一些统计数据或其他东西, 我们
必须为每场比赛创建162个变量来保持得分｡
这可真让人头疼｡
那会很乏味的｡
这真的太多了｡
这就是数组 起作用时, 数组将解决此问题｡
你不必 创建162个变量｡
您可以创建单个变量 并以某种方式访问它｡
所以数组允许你对值进行分组 在同一个名字下｡
你不需要分开 每个数据项的变量｡
所以它会让你成为 一个更有效率的程序员｡
数组是固定数量的数据 它们都是同一类型｡
所以只有一个问题 数组的一个缺点是不能更改数组的大小｡
一旦创建了数组, 永远都是这个尺寸
另一个限制 你不能存储多种类型的数据｡
如果您声明了一个数组, 并且它 还是要存储数字和整型数,
它必须存储整型数
所以有几个限制｡
如何声明数组｡
请记住, 当您声明 变量你在干什么？
你的意思是 变量存在于程序中｡
当你宣布 这些基本数据类型,
您分配内存形式
声明数组时, 数组中的数据项被称为元素｡
这是另一个概念 当你想到一个数组的时候
如果我说元素这个词 这意味着我引用的是数组中的一个项｡
因为记住数组是 会有很多很多不同的值但都有相同的名称｡
正如我们提到的元素 数组必须是相同的类型,
您不能混合和匹配数据类型｡
你不能有数组 5个整数和5个长整数｡
没有单身这回事 多个数据类型的数组｡
在中声明使用数组 程序类似于普通变量声明｡
您只需指定 名称, 然后使用括号｡
所以这是唯一的区别 名称后面的方括号｡
这里有一个例子
看起来就像普通的变量声明, 但是你看到的 这里有这些括号｡
这是唯一 不正常, 里面有一个数字
括号内的数字 正在指定大小｡
所以在这里我们只是说
要创建一个名为numbers的长整型数组 将包含10个元素｡
所以这很简单｡
这是一个数字一个声明, 因为 分号在最后,
就像变量声明一样
但是你有那些括号和一个数字, 这是 数组或数组维度｡
一旦声明了数组, 然后开始使用它｡
你会想要开始 访问其内部的数据或向其写入数据｡
为了做到这一点,
您必须 来了解数组是如何存储在内存中的, 实际上会被访问｡
所以一个数组的每个元素 数组中的每一个数据项, 都是用相同的名字来访问的.
所以你还是可以访问 使用变量名称｡
但是, 如果您想要特定的
值, 则现在必须使用称为 索引或下标, 这两个术语可互换使用｡
此索引或下标值为 是一个数字也在括号内 访问数组中的元素或直接访问数组中的点写入
数组名称后面的值｡
因此索引值是连续的 从0开始的整数｡
所以当我们讨论数组和 我们讨论数组中的索引或者下标 所有这些子都可以从0开始｡
这基本上就是说 它们的光线是以0为底的｡
因此, 大小为10的数组将是从0到9｡
0将表示该值 第一个数组元素, 而9将引用最后一个
大小为10数组中的元素｡
所以你要明白 从0开始的数组的概念｡
凭直觉, 你可能会想哦我
我想访问数组中的第一个点, 我提供索引 1, 因为它们从0开始｡
所以这是非常非常常见的 错误地尝试访问数组并相差1,
因为 您认为它们从1开始, 而不是从0开始
这是指 作为相差1个错误｡
您可以使用简单的整数 表示明确指涉您要存取的项目｡
例如, 如果要访问
数组中的第四个值, 您可以说出数组名称, 然后 在括号内你会说3｡
所以数组名sub-3 访问第4个值,
因为数组名称是从0开始的｡
所以你只需要提供 返回要访问的元素的编号｡
再一次, 记住它是0进制｡
所以要访问第四个元素, 它是3｡
如果要访问 第八个元素, 你做索引7｡
您还可以为 数组元素来创建
所以你现在只需要用一个数字｡
你可以用一个平方的表达式 名称后面的括号｡
但是表达式必须得到 以整数值表示, 对应于可能的索引值之一｡
如果你有一个大小为的数组
并且你使用了一个表达式, 那么这个表达式得结果必须是 0或从0到9的任何数字｡
这也是很常见的 将元素存储在数组中, 然后使用循环访问它们,
我们将 举一个例子｡
比如这里, 我们有一个for 循环, 我们将循环控制变量初始化为0
I, 一旦I小于10就退出｡
我们在这里所做的 我们只是显示数组中的数字｡
所以我们说printf number是百分比d, 然后数字再加上I,
I是一个变量｡
您可以在 变量表达式,
只要该变量表示 0到9, 在本例中是这样的｡
这是非常常见的
循环遍历数组以访问元素 或者向这些元件写入数据｡
所以总结一下, 这里有一个很好的 我找到的小插图｡
这就是数组的结构｡
如果我有一个名为
numbers, 您将在数组的名称之后 通过标识数组中的各个元素的括号来表示｡
所以我可以声明数组 指定类型和名称,
然后在括号内指定大小｡
然后当我想访问 我只使用数组名后跟索引值｡
因此,
对于具有 大小为10, 您将拥有从0到9有效索引
所以如果你试图访问
数组中具有无效索引的元素, 例如尝试 使用11作为索引访问大小为10的数组, 或者使用10作为索引｡
你会有一个数组 超出边界错误｡
因此,
如果使用表达式或 索引值的变量或常量, 该索引值位于 数组的范围和范围之外意味着什么？
这意味着要么是阴性
或者它是一个大于大小的数字, 实际上大于 因为基数是0
如果你有一个大小为的数组 10, 大小减1, 如果它大于9,
你会得到 数组超出界限错误｡
数组的问题是
边界错误, 则可能导致程序崩溃, 甚至
更糟糕的是, 它可能会导致程序看起来像是在正常运行, 但它表现得不正常｡
所以它不会产生 一致的结果｡
有时候你会有垃圾 data, 在数组中没有任何意义的数据｡
再次强调, 当你的大脑 您有一个边界错误数组｡
问题是 编译器无法检查越界错误, 因为
编译器不会知道你是否在赋值 或者访问的内容大于该大小｡
它仍然会编译 即使您有此区域超出边界的错误｡
实际上是边界数组 错误是运行时错误｡
你不会发现的 错误, 直到您执行程式为止｡
这又会导致 程序是非常不可预测的｡
所以你要非常非常
了解如何访问数组､ 要使用的索引值 使用以及如何将数据写入具有索引值的数组｡
请密切注意 数组索引和边界｡
如果要将数据写入 数组, 非常非常简单｡
你要做的基本上是 只需使用索引｡
所以一个值可以存储在数组中 元素,
只需指定左边的数组元素即可 然后使用方括号指定
要写入到元素
在本例中, 我们有一个 名为grades的数组, 我们不知道它的大小,
它必须是 大于100, 否则这里会出现数组越界错误｡
但在这个例子中, 我们是说 100级子级等于95级｡
值95存储在 grades数组的元素编号100,
非常简单｡
您只需指定索引 然后你就可以对任何值进行签名了｡
您还可以使用变量 若要将值指派给数组, 请执行下列动作｡
所以95可以存储在一个变量中, 就像分配其他变量一样｡
现在, 让我们通过一个 使用数组示例｡
下面是一个使用
要求和的数组读入10个数字 这10个数字的平均值｡
当我们阅读到它们的时候 计算总和,
然后显示平均值｡
所以在这一点上,
我想 我想把它放在代码块中并尝试运行 并向您展示它是如何工作的｡
我们在正常视野中, 我们在一个 一个简单的项目,
我们将向您展示数组如何在代码块中工作｡
你会发现我们 在我们的主要功能｡
这是条目 指向程序｡
在12号线, 我们 声明数组｡
我们将声明一个 大小为10的int类型数组｡
大小在括号内, 我们以分号结束｡
这个数组 将存储10个值｡
如果我们没有这个数组 我们要做的就是说等级1 整数2级整数3级｡
你看这有多麻烦 是多么的乏味｡
很高兴我们能 只需创建一个存储10个项目的变量, 并
它们被分组在一起｡
在数组中存储项时, 我不希望数据的值是不同的, 所有不同的东西｡
就像在这个例子中, 我们储存了 所以它们都是分数｡
您不希望为数组命名 然后我会储存我的成绩,
储存我的...
我的... 我的... 不管怎么说, 我的年龄在里面什么的｡
请确保存储相同类型的 数组时的数据｡
行中的下一个变量 13是计数变量｡
它等于10｡
这将是数字 因为我们要遍历数组｡
Sum是一个长整型数, 我们要对它求和
然后取平均值 浮点数, 因为我们要取这些数的平均值
我们要做的第一件事
第17行是我们要告诉用户我们希望他们 输入10个等级, 然后我们将读入这些值｡
所以在第20行你注意到我是如何
缩进, 我使用了好的命名, 缩进和使用好的分块 代码块的代码缩进｡
在第20行, 我宣布 我循环控制变量
我运行的是一个较旧的编译器c 编译器89, 所以我不能声明它并初始化同一行｡
通常情况下, 你会这样做｡
但当我这样做是因为我在跑步 C89编译器发生错误｡
所以我声明了我的变量 20, 然后我使用for循环｡
我们熟悉for循环 可以让你重复代码｡
这里我们只是说我们要
有一个计数器控制的for循环, 我们将从0开始, 一直到10点｡
所以我们要去 经过10次迭代,
但你注意到索引是0
这很重要因为 我们要用变量I访问一个数组｡
然后你会注意到 我们通过增加循环控制变量来修改它｡
所以我们要打印出
I加1的值, 我们将在数组中演示 你现在的情况｡
所以基本上就是说 进入一年级二年级三年级四年级｡
然后它会要求你 使用scanf输入等级｡
我们要把它存储在数组中｡
你会注意到 将其存储在数组中,
就像普通的变量访问一样｡
你只要用分数 然后指定索引｡
这里我们用I作为索引｡
所以它等于0 第一次迭代, 1第二次迭代,
2第三次迭代｡
很好, 我们从0开始
因为数组是从0开始的, 我们只需要使用地址 运算符的“与”号｡
在我们进行的过程中 把成绩加起来｡
所以我们会说sum 等于总和加上分数I｡
每个年级都要 基本上计算出总数｡
一旦我们脱离了这个循环
运行10次后, 我们将平均值设置为 然后将其转换为浮点数, 我们在这里进行转换｡
这将更改数据类型｡
记住, 和除以数, 和 它是长整型还是整型我们要把它转换成浮点型｡
最后, 我们 打印出平均值｡
让我们继续运行 确保我们没有错误, 我们有0个错误和0个警告｡
现在我们来运行它｡
所以它会 和我说的一模一样｡
它会说进入10年级 然后它会在一个小记号上加一个1, 这样我们就知道是哪个数字了｡
它会把大约95 32 55, 输入任意数字.
它们不一定有意义, 没关系, 我最后一个数字是23
这10人的平均值 成绩会是51分｡ 20.
但这真的很好, 因为我们 不需要创建10个变量｡
我们使用 下标, 我们可以用下标给数组赋值｡
这实际上是分配 当我们做扫描的时候
我们将数据分配给 那就是下标｡
现在如果我们要改变这个 假设我们从1开始计算 是10,
我们就把它设为相等
所以实际上我们 而不是将其更改为1｡
假设我们要开始 但现在我们要一直到索引10｡
请记住, 索引10超出范围
因为数组的大小为10, 但索引值为0 以使最大索引为9｡
同样,
我们将能够 因为编译器不检测越界错误, 问题是我们什么时候运行它｡
当我们运行程序时, 我们在11年级的时候会遇到大问题｡
所以我们会没事的｡
当我们输入10个年级时, 当我们到11点的时候问题就会出现｡
现在我们有11个 尝试储存数据｡
没什么不好的事, 但我们的 平均值是不正确
这是一种非常不可预测的行为 当您遇到越界错误时｡
所以你要确保 你有眼课计数,
你想确保当 你访问信息, 你也不会越界｡
这是数组的基础
声明数组, 仅指定大小数据类型, 然后 大小和括号,
访问数组或将数据存储在 数组, 使用索引内的下标I赋值｡
我们甚至可以打印出 也可以使用下标索引｡
数组将 被大量使用｡
我们会有很多例子 因为它简化了事情｡
请记住, 数组是固定大小的｡
您无法更改 等级的大小｡
它永远都是 10运行程序｡
所以如果你把上面的任何数据 它不会扩张｡
同时也要记住 必须是相同的数据类型｡
我无法存储字符串或单词 在Grade中, 我只能存储整型｡
我无法在 在那里, 只存储整数｡
-谢谢—谢谢