首页 理论教育如何使用单片机基于C语言进行常量表达式表示方括号的计算

如何使用单片机基于C语言进行常量表达式表示方括号的计算

【摘要】:方括号中常量表达式表示数组元素的个数,如a[5]表示数组a有5个元素。

在实际应用中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。在使用过程中,需要保留其原始数据。比如采集一段时间内某个设备的温度数据,这些按序排列的同类数据元素的集合称为数组。在C语言中,数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。它们主要解决现实中许多需要处理大量数据的问题。按数组元素的类型不同,数组按照数据的维数分为一维数组和二维数组及多维数组;数组按数据的类型又可分为数值数组、字符数组、指针数组、结构数组等各种类别。

4.5.1 一维数组

1.一维数组的定义

一维数组的定义格式为:

其中:类型说明符是任意一种基本数据类型或构造数据类型。数组名是用户定义的数组标识符。方括号中的常量表达式表示数据元素的个数,也称为数组的长度

例如:

说明字符数组ch有20个元素。

说明实型数组b有10个元素,实型数组c有20个元素。

对于数组类型说明应注意以下几点:

(1)数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。

(2)数组名的书写规则应符合标识符的书写规定。

(3)数组名不能与其他变量名相同。

例如:

程序中出现同名变量和数组是错误的。

(4)方括号中常量表达式表示数组元素的个数,如a[5]表示数组a有5个元素。但是其下标从0开始计算。因此,5个元素分别为a[0],a[1],a[2],a[3],a[4]。

(5)不能在方括号中用变量来表示元素的个数,但是可以是符号常数或常量表达式。

例如:

是合法的。

但是下述说明方式是错误的。

(6)允许在同一个类型说明中,说明多个数组和多个变量。

例如:

2.一维数组的初始化

给数组赋值的方法除了用赋值语句对数组元素逐个赋值外,还可采用初始化赋值和动态

值的方法。

数组初始化赋值是指在数组定义时给数组元素赋予初值。数组初始化是在编译阶段进行的。

这样将减少运行时间,提高效率。

初始化赋值的一般形式为:

其中在{ }中的各数据值即为各元素的初值,各值之间用逗号间隔。

例如:

C语言对数组的初始化赋值还有以下几点规定:

(1)可以为数组前面部分元素赋初值,但数组大小必须指定。

当{ }中值的个数少于元素个数时,只给前面部分元素赋值。

例如:

表示只给a[0]~a[4]5个元素赋值,而后5个元素自动赋0值。

(2)只能给元素逐个赋值,不能给数组整体赋值。

例如,给10个元素全部赋1值,只能写为:

而不能写为:

(3)若给全部元素赋值,则在数组说明中,可以不给出数组元素的个数。

例如:

可写为:

(4)如果想使一个数组中全部元素值为 0,可以写成:

3.一维数组元素的引用

数组元素是组成数组的基本单元。数组元素也是一种变量,其标识方法为数组名后跟一个下标。下标表示了元素在数组中的顺序号。

数组元素的一般形式为:

其中下标只能为整型常量或整型表达式。如为小数时,C编译将自动取整。

例如:

都是合法的数组元素。

数组元素通常也称为下标变量。必须先定义数组,才能使用下标变量。在C语言中只能逐个地使用下标变量,而不能一次引用整个数组。

4.数组的应用(www.chuimin.cn)

任务4.5中霓虹灯的控制是通过数组的应用来实现的,该任务中数组把所有的控制字按一定次序排列起来,通过对数组元素的循环引用实现指定的霓虹灯控制效果。

【实训4.6】如图4-40所示,P0端口连接8位LED灯,用数组方式实现对P0端口流水灯的控制。

分析:8位流水灯的控制,是以不同的控制状态实现的,8位LED灯的每一控制状态是确定的,即控制字是已知的,因此可以利用数组的方式完成其控制。

源程序代码如下:

本实训中,如果把数组元素的次序改变一下,流水灯控制的方向就会改变;如果改变控制字,控制效果就可以改变。

可见,当数据是确定的情况下,利用数组使得控制易于实现。

4.5.2 二维数组

1.二维数组的定义

前面介绍的数组只有一个下标,称为一维数组,其数组元素也称为单下标变量。在实际问题中有很多量是二维的或多维的,因此C语言允许构造多维数组。多维数组元素有多个下标,以标识它在数组中的位置,所以也称为多下标变量。这里只介绍二维数组,多维数组可由二维数组类推而得到。

二维数组定义的一般形式是:

其中常量表达式1表示第一维下标的长度,常量表达式2表示第二维下标的长度。

例如:

说明了一个三行四列的数组,数组名为a,其下标变量的类型为整型。该数组的下标变量共有3×4组,即:

二维数组在概念上是二维的,即是说其下标在两个方向上变化,下标变量在数组中的位置也处于一个平面之中,而不是像一维数组只是一个向量。但是,实际的硬件存储器却是连续编址的,也就是说存储器单元是按一维线性排列的。 如何在一维存储器中存放二维数组,可有两种方式:一种是按行排列,即放完一行之后顺次放入第二行。另一种是按列排列,即放完一列之后再顺次放入第二列。在C语言中,二维数组是按行排列的。

即:先存放a[0]行,再存放a[1]行,最后存放a[2]行。每行中有4个元素也是依次存放。由于数组a说明为int类型,该类型占2个字节的内存空间,所以每个元素均占有2个字节。

2.二维数组初始化

二维数组赋初值的方式有两种,一种是不分行给二维数组所有元素赋初值。例如:

二维数组按行给数组元素赋初值,各个元素赋值结果为:

另一种更直观的方法是分行给二维元素赋初值,各行元素初值用花括号括起来。例如:

同一维数组一样,二维数组也可以只给部分元素赋初值。例如:

对于数组前三个元素 a[0][0]、a[0][1]、a[0][2]分别赋值 1、3、5,其他剩余元素都为0。此外二维数组还可以用分行的方法给部分元素赋值。例如:

初始化后各元素的值是a[0][0]=1、a[0][1]=2、a[0][2]=0、a[1][0]=3、a[1][1]=0、a[1][2]=0。由此看出,分行赋初值可以不顺序赋值,应用起来更灵活、方便。

对于二维数组赋初值可以省略说明第一维的长度,但是无论何种情况,都不能省略说明第二维的长度。给全部元素赋值,例如:

编译系统会根据初值个数分配相应的存储单元。在分行给元素赋初值时,例如:

编译系统也会根据所分的行数确定第一维的长度。

3.二维数组元素的引用

二维数组的元素也称为双下标变量,其表示的形式为:

其中下标应为整型常量或整型表达式。

例如:

表示a数组三行四列的元素。

下标变量和数组说明在形式中有些相似,但这两者具有完全不同的含义。数组说明的方括号中给出的是某一维的长度,即可取下标的最大值;而数组元素中的下标是该元素在数组中的位置标识。前者只能是常量,后者可以是常量、变量或表达式。

4.5.3 字符型数组

用来存放字符量的数组称为字符数组。每一个数组元素是一个字符。

1.字符数组的定义

形式与前面介绍的数值数组相同。

例如:

由于字符型和整型通用,也可以定义为int c[10],但这时每个数组元素占2个字节的内存单元。

字符数组也可以是二维或多维数组。

例如:

即为二维字符数组。

2.字符数组的初始化

字符数组也允许在定义时作初始化赋值。

例如:

赋值后各元素的值为:

其中c[9]未赋值,系统自动赋0值。

当对全体元素赋初值时也可以省去长度说明。

例如:

这时C数组的长度自动定为9。