当前课程知识点:C语言程序设计 >  第22讲 编程训练 >  编程训练 >  数组基础

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

数组基础在线视频

数组基础

讲解了数组的定义、初始化、引用、输入/输出。

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

数组基础课程教案、知识点、字幕

同学们好

这节课我们讲一下数组的基础知识

为什么要使用数组呢

我们来看一下前面没有使用数组的时候

如果出现这样一个问题

你现在要读入5位同学的成绩

然后要求出这位同学的成绩的平均值

那应该怎么做呢

按照前面的知识的话

我们可以这么来做

你定义五个不同名的变量

score1、score2……一直到score5这5个变量

然后你还得用5个scanf输入这五个同学的成绩

当然在后面的计算过程当中

你还得把这五个变量加起来

然后除以五

这5个同学这么做似乎还可以接受

但是大家想一想

如果是100个人的成绩怎么办呢

你要定义100个变量

然后呢

scanf这个函数要使用100次

到后面再加100个这种变量

这样的程序

不管是写起来还是读起来

都觉得非常的不舒服

那么如果你使用数组就方便多了

比如说五个同学成绩你可以这样来做

就是int score[5]这样就定义了

五个同类型元素的这样一个数组

它在读入的时候

也可以用一个循环来读入

这样操作起来就方便多了

下面我看一下一维数组的定义

一维数组的定义的时候

首先前面是数据类型

数据类型和我们定义普通变量的数据类型一样

比如说整型、浮点型、字符型等等

这个数组名起名的方法也和普通变量名类似

然后后面是一个方括号

括号里面是个整数

整数里面就放的这个数组应该存放的元素个数

比如像我刚才那个例子当中

5位同学 这里就是5

这样就定义了有5个整型元素的这样一个数组

下面一个重要的问题就是数组的初始化

数组在刚刚定义完了以后

他的初值就和普通变量定义完了以后一样

它可以理解成是一个随机数

一般情况下是需要进行初始化的

初始化怎么做呢

初始化是在定义数组的同时给它赋初值

这叫初始化

那比如说刚才定义的这个int a[5]

你可以这样

拿花括号给它里面填五个整数

这是第一种方法

也是最常规的一种方法

第二种

你可以只填一个元素的值

比如说只填一个0

它的含义就是所有的元素的值都是零

那么第三种方法呢

第三行就是在这个初始化里面只有一个值1

这个含义是什么

它的含义是这个数组的最开始的一个元素的值是1

后面没写的那些元素值就是零

就是没写的都是零

还有第四种的初始化方法

在括号里面先不写元素的个数

然后在初始化的里面看看给了多少个值

比如我们这个例子当中

11,22,33,44,55这五个值

它等同于你在前面a括号里面把5写上

这就是初始化的几种形式

下面一个问题是数组的引用

所谓数组的应用就是读取和写入

数组的引用与普通变量基本相同

它是通过采用数组名、括号加下标的形式来进行

需要注意的是数组的下标

C语言是从0开始的

那么你引用的时候

五个元素这样一个数组

引用是a[0]、a[1]、a[2]、a[3]、a[4]这种形式

下标可以是常量

也可以是一个表达式

比如说a[i]这种形式

需要注意的是

数组引用的时候

看起来那个样子

跟数组定义很像

但是实际上定义的时候

括号的含义和引用的时候是完全不同的

比如说定义的时候

int a[5]表示数组当中有五个元素

引用的时候你写成a[2]

它表示的是引用的数组a里面的第三个元素

因为下标是从0开始的

0、1、2就是第三个元素

所以一定要切记

这个定义的时候的括号和引用的时候的括号是不一样的

引用的时候

一定要注意不能越界

刚才定义的有五个元素的这样一个整型数组

如果你在引用的时候出现了a[5]

那么就越界了

为什么越界了呢

正常情况下应该是a[0]、a[1]、a[2]、a[3]、a[4]

这是五个元素

你写a[5]就超出了它的范围

在程序设计的时候

很容易就发生这种下标越界的错误

而且在编译的时候

它不提示你下标越界

就相当于你稀里糊涂的犯了错误

这样有什么问题呢

下标越界就是访问的时候

实际上你访问了数组以外的空间

这是非常严重的问题

有个不太恰当的比喻

就好像你们家分了五亩地

那么你正常操作

你应该在这5亩地之内

但是你去耕地的时候把别人家的地耕了

这个肯定是有问题的

下面看一个数组输入输出的例子

通过这个数组的输入输出

你也可以看看数组操作的时候一个比较惯常的方法

我们看这个例子当中

我们首先定义了一个a[10]

就是有10个元素的这样一个整型

然后读入的时候

我们一般是通过循环

就是一个for循环

然后scan f这种形式来读入

注意scanf后面&a[i]这种形式

它本身跟普通变量的读入是比较相似的

下面读入完了以后

后面是通过循环

就是用printf输出这个数组的所有内容

这种代码是非常常见的

一定要非常清楚

下面我们看一下二维数组的使用

首先也是二维数组定义

二维数组定义的时候

它是这样的

比如说 我们看 这儿定义了一个int b[2][3]

这个表示什么意思呢

这个表示的是你定义了有两行三列的这样

一共有六个元素的整型元素

同样的

二维数组也有初始化的问题

它的初始化

比一维数组的情况更多一点

比较常规的一种初始化的形式

就是在定义二维数组的同时(就是第一行的内容)

用两层花括号

里层的花括号对应的是其中的一行

比如说我们这样定义了以后

这个数组有三行四列

那么里边的花括号里的1,2,3,4

就表示的是第一行的四个元素

然后在后面的5,6,7,8是第二行的四个元素

9,10,11,12是第三行的四个元素

这样呢就把这个二维数组三行四列的的所有的元素

就给定位了

这是一种方法

第二种方法就是第二行

你可以把里面的花括号给它省掉

采用这种定义方式得到的效果和第一行的效果是一样

那么还有另外的形式就是第三行这种形式

他在大的花括号里面

有内层花括号{1},{5},{9}

这样表示什么意思呢

就它等价于下面

就是说第一行第一个元素是1

后面都是零

第二行第一个元素是5

后面三个元素是0

第三行的第一个元素是9

后面是0

这是一种简写的一种形式

还有更简单的一种形式

就是再下面

它相当于是只定义第一行和第二行

第三个没写

没写的默认是0

还有在第二维数组的时候

就是定义和初始化同时做的时候

你可以在数组的表示行数的那个方括号里面不写具体的值

直接后面给出初始化的东西

它会根据初始化的值

然后能够确定你这个第一个方括号当中的值具体是多少

比如说像这个你初始化的时候写的1,2,3,4,5,6……

一直到12

那么这一共有12个元素

它的列数有了

就是4

那么这样12除以4

我们就知道它的行数了

它是这样的一种初始化形式

二维数组初始化的形式还是比较多的

也比较复杂

实际上大家正常写程序的时候

你或许没有必要把所有的形式都知道

你只要把最常规的形式掌握就好

二维数组的引用是通过数组名

有两个下标就是行下标和列下标这样的方式来引用的

同一维数组一样

也一定要注意

它不能越界

就是行下标和列下标都是从0开始的

下面我们一个具体的二维数组程序的例子

来更好的理解一下二维数组

这个例子是这样的

就是将一个二维数组的行和列的元素互换

存到另一个二维数组当中

我们前面的这个二维数组是两行三列

它存到另外一个二维数组当中以后应该是三行两列

我们看看这个程序

程序是这样的

在最开始的时候

我们就定义了这样的一个二维数组a[2][3]

就是两行三列

然后给它初始化了

初始化的值是第一行1,2,3

第二行4,5,6

然后我们下面定义了另外一个数组b

它是三行两列的

另外定义了两个变量i和j

后面我们用了一个双重for循环然后来处理这个问题

双重循环当中的外层for循环

处理a中一行当中的各个元素

第二个内层的for循环

就是j=0开始的这个是处理a中某一列的元素

大家可以在纸上画或者是心里面来看一下这个i和j变量的变化

就是从i等于0一直到后面

j=0到后面

看看它的变化

就能够理解这个程序是怎么做的

我们在前面讲过

你看程序的时候

有些时候你需要拿张纸

然后把这个变量的变化在那画一下

这样整个程序就更容易理解

那么整个程序设计数组一部分需要注意的

就是数组的定义

初始化

还有引用这三种形式

你掌握了以后

那么数组其它的使用基本上使用的是以前的知识

C语言程序设计课程列表:

第0讲 导言

-简单介绍课程性质等

-关于编程训练

第1讲 C程序框架

-C程序框架

-作业

第2讲 C程序编译环境

-C语言的编译环境

-作业

第3讲 顺序程序的几个例子

-顺序程序的几个例子

-作业

第4讲 常见的编译错误

-常见的编译错误

-作业

-编译错误探讨

第5讲 输入输出精要

-输入输出精要

-作业

-输入输出格式探讨

第6讲 选择结构的典型例子

-选择结构的典型例子

-作业

第7讲 选择结构常见错误

-选择结构常见错误

-作业

第8讲 排除程序错误的常规方法

-排除程序错误的常规方法

-排除错误探讨

第9讲 循环结构基础

-循环结构基础

-作业

-循环类型

第10讲 循环结构程序例子

-循环结构程序例子

-作业

-程序结构

第11讲 函数基础

-函数基础

-作业

第12讲 函数举例

-函数举例(上)

-函数举例(下)

第13讲 变量的作用域与生存期

-变量的作用域与生存期

-变量的使用

第14讲 数组基础

-数组基础

-作业

第15讲 数组应用举例

-数组应用举例(上)

-数组应用举例(下)

第16讲 数组参数传递

-数组参数传递(上)

-数组参数传递(下)

-作业

第17讲 指针变量

-指针变量(上)

-指针变量(下)

-作业

第18讲 字符串

-字符串(上)

-字符串(下)

-作业

第19讲 程序调试

-程序调试

-程序调试的重要性

-程序调试讨论

第20讲 结构体及其应用

-结构体及其应用(上)

-结构体及其应用(下)

第21讲 文件

- 文件(上)

-文件(下)

第22讲 编程训练

- 编程训练

数组基础笔记与讨论

也许你还感兴趣的课程:

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