当前课程知识点:C语言程序设计(上) >  数组(一) >  5.2 一维数组的定义和引用 >  5.2.1_1 数组的定义~1

返回《C语言程序设计(上)》慕课在线视频课程列表

5.2.1_1 数组的定义~1在线视频

5.2.1_1 数组的定义~1

下一节:5.2.1_2 数组的初始化

返回《C语言程序设计(上)》慕课在线视频列表

5.2.1_1 数组的定义~1课程教案、知识点、字幕

大家好

我们下来看

有了数组

我们怎么跟计算机来

预定这个数组呢

首先是

我们看

几个相关的概念

然后

结合我们给的这几个例子

比如说

存储学生成绩

我们需要用

整型的数组的话

我100个学生

还有存储一行文字

存储一个

矩阵

这样的

那么在这里边

共同涉及到的概念是什么呢

这么几个概念

就是这么几个

关键问题要注意

什么意思呢

是这样讲

就是说在

我们

描述

也就是说

预定

管系统预订这个数组的时候

它的格式是这样

先说类型

就是我们说的数组的基类型

再说数组的名字

数组的名字

然后呢

下面呢

这个中括号里边是什么呢

表达的是

数组的

长度

就是

这个数组里边有多少个元素

然后呢

再下来是

就是这个中括号

那我们把中括号

没有看成一种形式

看成一种运算符

它的确是一种运算符

因为

我们要

随机的访问数组里的

任何一个元素的时候

我们要确切的知道

这个元素在哪个位置

是通过

带下标的变量

这一块来运算的

那还剩下一个呢

数组的维数

表达的是什么意思呢

如果我们一个中括号

数组的名字后边只带一个中括号

这是一维数组

那我如果带了两个中括号

那是

二维数组

三个

当然就是三维数组

咱们这个课程里边

通常

我们

讨论的

两维数组

也就是一个

平面的问题

当然三维数组

不是不可以

其实道理是一样的

那我们

根据这个格式

来要定义这三种应用的话

应该是

我们要

成绩

要整型的数组

那咱现在写成

float

这就

不对了

是不是应该写成

int

这样子

那要不呢

就是我们上边不是说的

整型的数组

我们说的是

实型的数组

那就是说你的应用

是什么

比如说

我把这个应用

改成

实型的数组

一个

实型的

数组

总之

你的实际应用

要跟你的定义是相符的

一个float型的

mark

是数组名字

然后是

100个元素

这个

是一维的数组

差一个

str

我们是一个字符

字符型的数组

所以是一个char型的

然后是

200个元素

然后还有int型的

什么东西呢

我们要的是整型的数组

存的是什么呢

是一个矩阵

4乘6的矩阵

那这写对了吗

肯定没写对呀

这一定是

4乘6的矩阵

这是

一个

前面两个都是

一个

中括号

那就是一维的数组

而这个是两个中括号

中间

没有

空格

也没有逗号

那就是

4乘6的

两维数组

就是4行

6列

两维数组

那么对于这样的

一个数组的定义

这种类型的定义

我们要关注的一个

非常重要的问题是什么问题呢

一定下标是从0开始的

从0开始的

至于你使用的时候

你是不是从0使用

没有关系

你可以从2开始使用

但是呢

你定义的时候

定义了一个数组

这个数组是

可以从0开始使用的

它给你预留空间

是从0

那么最大的

那个数字

一定不是

你定义的时候的那个数字

而是那个数字减一

就是

你最大的下标

应该是你原数的个数减一

比如说我们刚才说

我们字符是200个

200个字符的一维数组

那我们最大的下标

一定是199

而不是200

是从0

到199

200表达的是

有200个元素

是从0

到199

是这样的一个意思

那我们

看到 通常呢

数组说明里边

有不正确的

说明

是什么样子的呢

比如说

float a

这个不正确在哪里

所有格式都是对的

但是你定义说这个数组

没有元素

那这个数组是无效的

没有意义的

圆括号

这是

我们不允许的

这个符号

因为我们这里边的

运算符是中括号

还有

int k

a k

这哪里不对了呢

这个不对是说

我们这里边必须是

中括号里边必须是常量表达式

不能是变量

而这块k

是变量

因为你定义了一个k

k还没读进来

那这时候为什么不对呢

我们定义一个数组

实际上

计算机在什么时候做这件事情呢

实际上是在编译的时候

你向系统

预订了

一片空间

这片空间是连续的

比如说我们刚才说的

mark是100

字符是200

那么这个200必须是连续

在一起的

那个

100

是连续在一起的

那个4乘6

是连续存放的

如果你的系统的内存

已经没有这么大空间了

那这个数组的定义就会不成功的

编译就会通不过的

所以呢

我们大家

是在

预留空间的时候

必须是确切的知道

你到底要预留的这个空间

是多大

所以不能用变量

这样

当然

也是不对的

先int

n

scanf n

然后再说

定义这个数组

a n

这个错误在哪呢

大家想想看

这个错误在说

我们

定义这个变量的时候

定义这个数组的时候

它是在

编译期间

而scanf的执行

你获取这个变量

获取到这个n的时候

是scanf被执行

这个函数调用被执行完了

那它一定是在程序运行期间

也就是说

当你在编译的时候

要预留a数组的时候

你仍然是不知道n到底是多大

它是没法执行这个预留的

实际上这个预留不要执行

它只是接到了一个信息

计算机没有做任何操作

而scanf的执行

计算机是要确切的做

你从键盘上给了一个数

它要把那个数取进去

计算机有指令在执行的

所以呢

scanf是在

计算机

程序运行期间

执行的

函数调用

而int

int a

这个数组的定义是在编译期间做的

所以这样的定义

不对的

c语言是

不允许对数组的

大小

进行这种动态的说明

我们这叫动态的说明

就程序运行的过程中进行的说明

是不允许的

而数组的说明

必须是在

所有的

可执行语句之前

也就是说你的int a

必须放在scanf之前

执行的语句之前

按照我们刚才说的

这些

这一系列的规则

我们看

这个程序

这个程序段

是不是正确

大家看一下

这里边我们定义的是

m

100

这么一个数组

其它的都是

简单变量

i和sum是简单变量

我们在这里边用它做了什么呢

i从0

到小于100

也就是到99

然后做什么呢

scanf

m i

里边读数据

m i

i的变化是从哪里开始变的呢

从0到99

没有超过这个下标

没有到100

那就是正确的

sum

每一次

加上什么呢

你给这个

数组元素里边

放了什么东西呢

放的什么东西

我就把这个东西累加

这个程序段

没有问题

我们

来看一下

这段程序

我们来看一下这个程序

刚才咱们看见这个m

在那里边是100

那我这就得写

100

那scanf这块要做100次

那咱肯定是

太长了

我们把它还改成

改少一点

改成5

就输入

我们就

5个元素

我们敲进去5个数

大家看一下那5个数

在前面我们加了一遍

是说

执行scanf的时候我们也会显示

那我每一次

输进去一个

键盘上敲进去一个数

这个数被给了谁了呢

循环是从0

4

没到5

那这个数组呢

是5个元素

最大下标是4

好了

这符合我们的规定

从0开始到4

那我每一次给m i

送进去一个数

键盘上敲进去一个数

这个数会显示在屏幕上

然后求和

然后我显示出来的是

刚才送进去的那个数

但是我是从

数组元素里把它输出来的

那就是说

看一下

我们

这个元素里边

是不是存进去的

是我们那个数

这一块前边我们给一点记号

区别出来

是输出的

而前面敲的是输入的

运行一下看看

我们的一个数就给1

这是第一个数

第二个数

第三个数

第四个数

第五个数

一定输入了5个数

这5个数加起来

累加

是15

15

是在

跳出这个循环以后

输出的

我们刚才说这个数组

是从0开始布局的

你可不可以不从0开始使呢

当然是可以的

比如说我从3号元素开始用

我只用了

下标为3和4的两个

那我这个循环只进行了两次

大家看一下

我这个也给1

现在应该是

m3里边是1

m4里边是2

加起来是3

只有m3和m4里边有内容

那我们

现在能不能知道它到底是

m几呢

你其实可以在这

里边输出一下

我可以在这里边说

你给我输出一个

m

中括号

里边

再给一个

百分号d

是说

照原样子输出一个

m

中括号

里边我再要一个

i

当前的这个i

然后下来呢

我再要一个中括号

然后再是

我后边的

m

这个里边的

m i里边的内容

我前边现在要的是格式

m

m i的这个格式

大家看一下

这两个照原样子印

中间对的是

i

那是3的时候它应该就是3

再下来是一个中括号

再下来呢

我们用一个逗号把它隔开

或者用等号

给一个等号

我们先来看一下

这个输出

我们给6

给一个6

m3里边应该是6

m3里是6

m4里边给9吧

m4里边是9

加起来也是15

正好也是15

那这块呢

我们现在

看到了说

你从0号元素使用

是没有问题的

3号

从任意一个开始

也是没有问题的

但是我们刚才还说了一点

下标不能越界

那我们造成一个让它

越界

怎么样

这就是说

下标到了5了

会怎么样呢

来看一下

我们还给

6

再给

9

给的是0

那它还继续问

还输入

那在下边就该是

m5了

m5

我们给一个

7

m5

我们给的是7

它却说是14

对吗

而且6加上7也不是14啊

那这件事情做了吗

也就是说这件事情

就是一个无效的数据

那这个数据为什么

无效

却看上去

计算机没报错呢

这种错

它是不报的

是因为它识别不出来这种错

尤其是越界这种事情

容易让我们忽略了

它是错误

就是说

你的数组

现在

越界了

那么越界的过去的那个数是什么呢

是个随机数

我们还可以把这个再到大的做一下

看一下

比如说我这个是7

大家看一下

如果

我还给刚才6

再给一个7

再给一个8

它还在等数

再给一个9

大家看

这显然是一个非常不合理的数

给到9的时候它已经说

我们给

8的时候

给7的时候

前面两个数都是对的

给6的时候它是6

m3里边是6

m4里边也是正确没问题

到了m5

那就不对了

到了

m9

那就

更不对了

为什么呢

是因为根本

数组就没有m5

也没有m9

所以它完全的是随机数

所以大家在使用

数组的时候

非常重要的一点

下标不能越界

越界了以后

系统并不告诉你错了

而你得到了一个

错误的结果

这种我们程序短的时候

你能容易发现

如果是一个长的应用

藏在里边

这种错误是不容易被发现的

所以要特别的注意

C语言程序设计(上)课程列表:

从问题到C语言程序设计

-1.1 计算机的问题求解方法

--1.1.1--程序设计面向的问题

--1.1.2--关于计算

--1.1.3-1关于算法-算法的特征

--1.1.3-2关于算法——算法的表示

--1.1.3-3关于算法——算法的优化

--1.1.4-1-程序设计方法

--1.1.4-2-程序设计方法

--讨论题:数学模型

-1.1 计算机的问题求解方法--作业

-1.2 C语言与C程序

--1.2.1-1-C概述

--1.2.1-2-C概述

--1.2.2-C初步

--讨论题:运算符

-1.3 C语言处理系统与程序调试运行

--1.3.1C程序如何调试运行

--1.3.2常用C语言处理系统

--1.3.3DEVC++的使用-v1

--1.3.4C语言概貌小程序

--例程

-1.4 程序中的人机交互

--1.4 printf用法

--1.4.2 scanf的用法

--例程

--作业讨论区

数据计算实现与顺序结构程序设计(一)

-2.1 算术运算的C程序实现

--2.1.1 第二章

--2.1.2 C语言算术表达式概念

--2.1.3 算术运算的实现

--2.1.4 整数相除

--2.1.5 输入格式造成的计算错误

--2.1.6 求余运算

--2.1.7 自增自减运算

--2.1.8 复合运算

--fangcheng.c

--fangcheng-1.c

--fangcheng-2.c

--fangcheng-3.c

--fangcheng-4.c

--算术混合运算.c

--讨论题:自增自减符

--讨论题:程序输出结果

--讨论题:程序运行结果

-2.1 算术运算的C程序实现--作业

-2.2 关系运算的C程序实现

--2.2.1 关系比较问题

--2.2.2 C语言关系表达式

--2.2.3关系运算优先级

--2.2.4 用关系运算做判断条件

--2.2.5 程序实例

--2.2.6 字符比较

--bukao.c

--pingshifen-1.c

--panduanzhengshu.c

--pingshifen-2.c

--字符比较.c

--讨论题:比较大小

--讨论题:程序的运行

-2.2 关系运算的C程序实现--作业

-第二周作业--作业

数据计算实现与顺序结构程序设计(二)

-2.3 逻辑运算的C程序实现

--2.3.1 逻辑运算问题~1

--2.3.2 逻辑运算表达式

--2.3.3 如何判断闰年

--2.3.4 逻辑运算优先级

--2.3.5 条件运算符

--计算结合性

--2.3.7 一个简单实例

--闰年.c

--自动购票问题.c

--讨论题:逻辑表达式

-2.3 逻辑运算的C程序实现--作业

-2.4 位运算的C程序实现

--2.4.1 什么是位运算

--2.4.2 位运算有哪些

--2.4.3 位运算怎么用

--讨论题:位运算

-2.5 几种很个别的运算

--2.5 几个很个别的运算

--讨论题

--讨论题

-2.5 几种很个别的运算--作业

-2.6 混合运算及数据类型转换

--2.6 混合运算及数据类型转换

--讨论题:数据类型

-2.7 顺序结构程序实例

--2.7.1 第一个程序:三角形

--Video

--三角形面积.c

--讨论题:工业产值

--讨论题:程序无效结果

-2.7 顺序结构程序实例--作业

选择结构的程序设计

-3.1 程序中的路径选择实现

--3.1.1_1 第三章

--3.1.1_2 神奇的if_else

--打印学生成绩.c

--一元二次方程.c

-3.1 程序中的路径选择实现--作业

-3.2 路径中的再选择——嵌套判断

--3.2.1_1 if语句的嵌套

--3.2.1_2三个数排序1029

--例程

--3.2.2 用户登录检查

--三个数排序_未优化.c

--三个数排序_优化.c

--讨论题:程序改错

-3.2 路径中的再选择——嵌套判断--作业

-3.3 复杂判断问题的C程序设计

--3.3 多级选择

--银行存款.c

--讨论题:多级选择

-3.4 多分支问题的C程序设计

--3.4.1 switch语句表达式

--3.4.2 加减乘除计算

--3.4.3 几类说明

--加减乘除运算.c

--讨论题:关于switch

-3.4 多分支问题的C程序设计--作业

-3.5 GOTO的适当使用

--3.5 GOTO的适当使用

-3.6 选择结构的程序实例

--3.6 程序展示

--计算第几天.c

--存款利息__switch实现.c

--讨论题:输出奇数

--讨论题:计算税金

-3.6 选择结构的程序实例--作业

-第四周作业--作业

循环结构的程序设计(一)

-4.1 需要重复执行的程序

--4.1.1----第四章~1

--4.1.2---while实现先判断后循环~1

--4.1.3----while循环的应用-录入速度~1

--求和.c

--打印学生成绩.c

--统计录入速度.c

--求平均数.c

-4.1 需要重复执行的程序--作业

-4.2 至少要执行一次的循环

--4.2.1至少要执行一次的循环

--4.2.2-do-while循环应用

--成绩录入_do while实现.c

--n的阶乘.c

--字符分类统计.c

--讨论题:关于while

-4.2 至少要执行一次的循环--作业

-4.3 已知循环次数用for语句

--4.3.1--用for语句控制循环次数

--4.3.2--循环的应用-求和

--求和问题.c

--斐波那契数列问题.c

--数列求和.c

--讨论题:循环语句的不同

--讨论题:循环语句

-4.3 已知循环次数用for语句--作业

-4.4 循环控制——简单循环应用

--4.4.1-循环的应用-找数-水仙花数

--4.4.2--循环的应用-求素数

--水仙花数.c

--讨论题:死循环

--讨论题:continue和break

--讨论题:猜数字

-循环结构的程序设计(一)--4.4 循环控制——简单循环应用

循环结构的程序设计(二)

-4.5 循环的嵌套

--4.5.1 循环的嵌套——九九乘法表

--4.5.2 循环的嵌套——打印三角形

--打印九九乘法表.c

--打印实心三角图案.c

--打印空心三角图案.c

--讨论题:程序运行

-4.5 循环的嵌套--作业

-4.6 break与continue

--4.6 循环中断与继续循环——break再讨论

--最大素数.c

--求正数个数及平均数.c

-4.6 break与continue--作业

-4.7 循环的综合应用

--4.7.1 数的排列组合问题

--4.7.2 循环综合应用——穷举算法

--4.7.3 循环综合应用——满足条件的数

--4.7.4 循环综合应用——求最后三位数

--4.7.5 循环综合应用——打印空心图案

--数的排列组合.c

--数的排列组合优化.c

--鸡兔同笼.c

--找满足条件的数.c

--输出14的13次方的最后三位数.c

--打印空心字符.c

--讨论题:打印图形

--讨论题:打印空心图形

--讨论题:计算闰年

-第六周作业

--虚拟实验:循环程序设计实验

-第六周作业--作业

数组(一)

-5.1 同类有序数据处理问题

--5.1.0 数组开篇

--5.1.1 同类有序数据存储问题

--讨论题:下标变量与下标

-5.2 一维数组的定义和引用

--5.2.1_1 数组的定义~1

--5.2.1_2 数组的初始化

--5.2.2 一维数组的输入输出

--5.2.3 一维数组的应用1--成绩排序(选择法)~2

--5.2.4 一维数组的应用2--Fibonacci数列

--数组定义.c

--数组初始化.c

--输出大于平均值的数.c

--反向输出.c

--选择法_成绩排序.c

--求斐波那契数列前n项.c

--讨论题:对称数

--讨论题:关于'\0'

-5.2 一维数组的定义和引用--作业

-5.3 一维字符串数组

--5.3 一维字符串数组11.24~1

--用函数测试字符串长度.c

--讨论题:编程

-5.4 字符串处理函数

--5.4 字符数组的输入与输出

--字符串反向.c

--字符串函数

--讨论题:程序如何运行

--讨论题:黑色星期五

数组(二)

-5.5 二维数组的定义与使用

--5.5 二维数组定义

--二维数组的定义与初始化.c

-5.6 二维数组的输入输出

--5.6 二维数组的输入与输出

--二位数组输出_矩阵输出.c

--讨论题:随机数据存储

-5.6 二维数组的输入输出--作业

-5.7 二维数组的应用‍

--5.7.1二维数组的应用-转置矩阵

--5.7.2 用一维数组方式引用二维数组元素

--转置矩阵.c

--找二维数组最大数.c

--讨论题:修改程序

--讨论题:关于随机数函数 rand()

-5.8 二维字符数组

--5.8 单词排序

--单词排序.c

--讨论题:回文字符串

-5.8 二维字符数组--作业

-5.9 数组综合应用

--5.9.1 应用1——学生成绩统计

--统计成绩.c

--5.9.2 应用2——删除重复字符

--删除串中的重复字符串

--5.9.3 应用3——统计字符

--5.9_4数组的应用4--矩阵相乘

--统计字符次数.c

--讨论题:洗牌

-本期课程结束语

--end

-第八周编程作业

--虚拟实验:冒泡排序算法程序设计实验

期末复习

-《C语言程序设计(上)》期末复习参考

--html

期末复习答案

-《C语言程序设计(上)》期末复习参考答案

--html

5.2.1_1 数组的定义~1笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。