第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