第6章C语言数组

  • 格式:doc
  • 大小:59.50 KB
  • 文档页数:16

第6章C语言数组

第六章 数组

本章要求

1. 一维数组和多维数组的定义,初始化和引用 .

2. 字符串与字符数组

引言:

在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中,数组属于构造数据类型。

一. 一维数组的定义

定义: 数组是有序数据(必须是相同的数据类型结构)的集合。

格式: 类型说明符 数组名[常量表达式]

例如: int a[10] ; 表示数组名为a,有10个元素,并且每个元素的类型都是int型的. 数组

一维数组 二维数组 字符数组 字符串 第6章C语言数组

float b[10],c[5]; 说明实型数组b有10个元素,实型数组有5个元素;

注意:

1. 数组名的命名规则和标示符的命名规则相同。

2.常量表达式要有方括号括起来,不能用圆括号,int a(10);

这是非法的!

3。常量表达式表示数组元素的个数,即数组长度。并且数组的

第一个元素是从下标0开始的!

4.常量表达式可以是常量也可以是符号常量,不能包含变量。C语言绝对不允许对数组的大小作动态定义;

例如:下面是非法的

int n;

scanf(“%d”,&n);

int a[n];

5.数组的类型实际上就是指数组元素的取值类型,对于同一数组,它所有元素的数据类型都是相同的;

6.数组名不能与其他变量名相同;例如:

main()

{

int a;

float a[10];

………。。

} 是非法的!

7。允许在同一个类型说明中,说明多个数组和多个变量; 第6章C语言数组

例如: int a,b,c,d[10],e[5];

二. 一维数组元素的初始化

有下列方法初始化:

1)在定义数组时,对数组元素赋初值;

例如: int a[10]={0,1,2,3,4,5,6,7,8,9};

上面的语句等价于

a[0]=0,a[1]=1,

2)可以只给一部分元素赋初值,例如:

int a[10]={0,1,2,3,4};

表示只给数组的前5个元素赋初值,后5 个元素的值,系统自动默认为0

3)在对全部数组元素赋初值时,可以不指定数组长度;例如:

int a[5]={0,1,2,3,4};

可以改写为: int a[]={0,1,2,3,4};

但是,int a[10] ={0,1,2,3,4};

不能改写为: int a[]={0,1,2,3,4};

三. 一维数组的引用

数组必须先定义,后使用!

C语言规定: 只能逐个引用数组元素,而不能一次引用整个数组!

数组的引用形式为: 数组名[下标] 其中,下标可以是整型常量也可以是整型表达式.

例如: a[0]=a[5]+a[7]+a[2*3] 第6章C语言数组

四. 一维数组的程序举例

1。读10个数存入数组中,输出数组中的所有数据.

main()

int i,a[10];

for(i=0;i<=9;i++)

a[i]=i; /*顺序给数组元素赋初*/

for(i=0;i〈=9;i++)

printf(“%d”,a[i]); /*顺序输出数组元素*/

}

2.读10个整数存入数组中,输出平均值。

#include 〈stdio。h>

#define size 10

main()

{

int x[size],i;

float s=0,ave;

for(i=0;i〈size;i++)

scanf(“%d”,&x[i]);

for(i=0;i〈size;i++)

s+=x[i];

ave=s/size; 第6章C语言数组

printf(“%d\n",ave);

五. 二维数组的定义

定义格式:

类型说明符 数组名[常量表达式1][常量表达式2]

其中表达式1表示第一维下标的长度;

表达式2表示第二维下标的长度;

例如: int a[2][3];

说明了一个2行3列的数组,数组名为a,数组元素的类型为整型,该数组共有2*3个元素;

即: a[0][0],a[0][1],a[0][2]

a[1][0],a[1][1],a[1][2]

注意的是:

二维数组在概念上是二维的,就是说其下标在两个方向上变化,数组元素在数组中的位置也处于一个平面中,并不向一维数组,所有的元素是线性的,但是,二维数组中的元素和一维数组中的元素一样,也是按线性存储的;

如何存储呢?

首先,它和一维数组一样,也是按线性存储的.

在C语言中,二维数组是按行排列的,即存完一行后,顺序存入第二行;

还是上面那个例子: int a[2][3];

由于数组a说明为int型,所以数组的每个元素在内存中占两个字节的存第6章C语言数组

储空间,

六. 二维数组的引用

引用形式:数组名[下标][下标]

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

例如: int a[3][4];

a[2][3] 表示数组a的第三行第四列的元素.

注意:下标变量和数组说明在形式上有些相似,但这两者具有完全不同的含义;

数组说明的方括号中给出的是某一维的长度;而数组元素中的下标是该元素在数组中的位置标识;数组说明中的方括号内只能是常量,而数组元素中方括号中的下标可以是常量,变量或表达式.

1

2

3

4

5 第6章C语言数组

七。 二维数组的初始化

二维数组初始化也是在类型说明时给各下标变量赋以初值。二维数组可以按行分段赋值,也可以按行连续赋值

1. 按行分段赋值

int a[2][3]={{1,2,3},

{4,5,6}};

2. 按行连续赋值

int a[2][3]={1,2,3,4,5,6};

这两种赋值的结果是完全相同的;

说明:

1。 可以只对部分元素赋值,未赋值的元素自动取0;

例如: int a[3][3]={{1},{2},{3}};

是对每行的第一列元素赋值,未赋值的元素自动取0

2. 如果对所有的元素赋初值,则第一维的长度可以不给出;

例如: int a[3][3]={1,2,3,4,5,6,7,8,9};

可以改为: int a[][3]={1,2,3,4,5,6,7,8,9};

3.数组是一种构造类型的数据,二维数组可以看作是一维数组的嵌套,设一维数组的每个元素又都是一个数组,就组成了一个二维数组,当然,前提是每个元素的类型必须一致;同理,一个二维数组也可以分解为多个一维数组,例如: a[3][4],可分解为3个一维数组,其数组名分别是: a第6章C语言数组

[0],a[1],a[2];对这三个一维数组不需另作说明即可使用,这三个一维数组都有4个元素,例如: 一维数组a[0]的元素是a[0][0],a[0][1],a[0][2],a[0][3];必须强调的是,a[0],a[1],a[2]不能当作下标变量使用,因为它们是数组名,不是一个单纯的下标变量;

对于一个数组,例如: a[3][4]可以通过循环语句来赋值;

for(i=0;i<3;i++)

for(j=0;j〈4;j++)

scanf(“%d",&a[i][j]);

八。 二维数组的使用举例

1. 将一个二维数组的行和列元素互换,存到另一个二维数组中.

a={{1,2,3}, b={{1,4},

{4,5,6}}; {2,5}

{3,6}};

分析: 首先,给a赋值; 然后,通过a给b赋值,b[i][j]=a[j][i];

最后,输出b的值;

#include

main()

{ 第6章C语言数组

int a[2][3]= {{1,2,3},{4,5,6}};

int b[3][2],i,j;

for(i=0;i<=1;i++)

for(j=0;j<=2;j++)

printf(“%d”,a[i][j]);

b[j][i]=a[i][j];

printf(“\n”);

for(i=0;i〈=2;i++)

{

for(j=0;j〈=1;j++)

printf(“%d”,b[i][j]);

printf(“\n”);

定义: 每个数组元素的数据类型是字符型的一维数组. 字符数组的引用,九. 字符型数组 第6章C语言数组

存储,初始化的方法和一维数组相同

例如: 字符型数组的定义

char c[10];

定义了字符型数组c,它的数组元素有10个,由于字符型和整型是相通的,因此,上面的定义也可以改为:

int c[10];

例如: 字符型数组的初始化

char c[3]={‘a’,’b’,’c'};

注意: 如果花括号提供的数组元素个数大于数组长度,则作语法错误处理;

如果初值个数小于数组长度,则只将这些字符赋给前面的元素,其余的元素自动定为空字符(‘\0’); 比如:

char c[5]={‘a’,’b',’c’};

a b c \0 \0

如果提供的初值个数和预定的数组长度相同,在定义时可以省掉数组长度,系统自动根据初值个数确定数组长度. 例如:

char a[]={‘a’,’b’,’c',’d’,'e’};

也可以用字符串常量赋值;如:

char ch[6]={“hello”}

char ch[6]=”hello”;

char ch[]="hello";

h e l l o \0