1. 数组
所谓数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。数组是在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式。这些按序排列的同类数据元素的集合称为数组。
数组的特点:
1. 数组是一组有效数据的集合,数组中各数据的排列是有一定规律的,下表代表数据在数组中的序号。
2. 用一个数组名和下标来唯一地确定数组中的元素。
3.数组中的每一个元素都属于同一个数据类型。不能把不同类型的数据放在同一个数组中。
2. 定义和引用一维数组
定义一维数组
要使用数组,必须在程序中先定义数组。定义一位数组的一般形式为:
类型符 数组名[常量表达式]
例如:int a [10]; 它表示定义了一个整型数组,数组名为a,此数组有10个整型元素。
注意:1.数组名的命名规则和变量名相同,遵循标识命名规则。
2.在定义数组时,需要指定数组中元素的个数。
3.C语言中不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。但在被调用的函数(不包括main)中,数组的长度可以是变量。
引用一维数组元素
在定义数组并对其中个元素赋值后,就可以引用数组中的元素。应注意,只能引用数组元素而不能一次整体调用整个数组全部元素的值。
引用数组元素的表达形式为
数组名[下标] 例如,a [0] =a [5]+a [7]; 每一个数组元素都代表一个整数值。
一维数组的初始化
1.在定义数组时对全部数组元素赋予初值,例如int a[3]={0,1,3};
2.可以只对部分元素赋值。例如int a [10]={0,1,2,3,4};
3.全初始化为0可以写成int a[3]={0};
4.在对全部数组元素赋值时,可以不指定数组长度。例如int a[]={0,1,3,4,5};
一维数组程序举例,Fibonacci数列
#include <stdio.h>
int main()
{
int i;
int f[20]={1,1};
for(i=2;i<20;i++)
{
f[i]=f[i-2]+f[i-1];
}
for(i=0;i<20;i++)
{
if(i%5==0) printf("\n");
printf("%12d",f[i]);
}
return 0;
}
3.定义和引用二维数组
定义二维数组
二维数组定义的一般形式为
类型说明符 数组名[常量表达式][常量表达式] 例如float pay[3][6]; 定义了一个float类型的二维数组。
引用二维数组
二维数组元素的表达形式为
数组名[下标] [下标] a[3][2]表示数组a中序号为2的行中序号为3的列的元素。数组元素可以出现在表达式中,也可以被赋值,例如:
b[1][2]=a[2][3]/2
注意;在应用数组元素时,下标值应在一定义的数组大小的范围内。
二维数组的初始化
1.分行给二维数组赋初值。例如int a[3][4] ={ {1,2,3,4},{5,6,7,8},{9,10,11,12}}
2. 可以将所有数据写在一个花括号内,按数组元素在内存中的排列顺序对各元素赋初值。例如int a[3][4] ={1,2,3,4,5,6,7,8,9,10,11,12}
3.可以对部分元素赋初值。例如int a[3][4] ={{1},{5},{9}}
二维数组程序举例
例,有一个3*4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。
#inlcude <stdio.h>
int main()
{
int i,j,row=0,colum=0,max;
int a[3][4]={{1,2,3,4},{9,8,7,6},{-10,-10,-5,2}};
max=a[0][0];
for(i=0;i<=2;i++)
{
for(j=0;j<=3;j++)
{
if(a[i][j]>max)
{
max=a[i][j];
row=i;
colum=j;
}
}
}
printf("max=%d\nrow=%d\ncolum=%d",max,row,colum);
return 0;
}
4.字符数组
字符数组
指用来存放字符的数组字符数组的定义用来存放字符量的数组称为字符数组。其定义的一般形式时: char 数组名[数据长度] 字符数组用于存放字符或字符串,字符数组中的一个元素存放一个字符,它在内存中占用两个字节。字符数组类型说明的形式与前面介绍的数值数组相同。
定义字符数组
其定义的一般形式时:
char 数组名[数据长度]
字符数组用于存放字符或字符串,字符数组中的一个元素存放一个字符,它在内存中占用两个字节。
字符数组类型说明的形式与前面介绍的数值数组相同。例如:char a[10];由于字符型和整型通用,也可以定义为:int a[10];但这时每个数组元素占2个字节的内存单元。
字符数组也可以是二维或多维数组,例如:char c[5][10];即为二维字符数组。
字符数组的初始化
字符数组的初始化与数值型数组初始化没有本质区别。但它除了可以逐个给数组元素赋予字符外,也可以直接用字符串对其初始化。
1.用字符常量逐个初始化数组。例如:char a[8]={'i','l','o','v','e','y','o','u'};
用逐个初始化的方法与数值型数组初始化本质上是一样的,同样也可以进行完全赋初值及不完全赋初值,但是不完全赋值时没有赋值的元素被赋为空格。
当对全体元素赋初值时也可以省去长度说明。例如:char c[ ]={‘c’,‘ ’,‘p’,‘r’,‘o','g','r','a','m'};这时C数组的长度自动定为9。
2.字符串常量初始化数组。例如:char c[ ]={‘c’,‘ ’,‘p’,‘r’,‘o','g','r','a','m'};
数组字符的引用
可以通过引用字符数组中的一个元素,得到一个字符。数组的引用形式为:
数组名[下标]
例,
#include <stdio.h>
int main()
{
char string[81];
int i,num=0,word=0;
char c;
gets(string);
for(i=0;(c=string[i])!='\0';i++)
{
if(c==' ')
{
word=0;
}
else if(word==0)
{
word=1;
num++;
}
}
printf("There are %d words in this line.\n",num);
return 0;
}
字符串处理函数
puts(str)将一个字符串(以'\0'结束的字符序列)输出到终端。
gets(str)从终端输入一个字符串到字符数组。
strcat(str1,str2);STRingCATenate的缩写,连接2个字符串。
strcpy(str1,str2);将str2的内容复制到str1。strncpy(str1,str2,n);将str2前面n个字符复制到str1中。
strcmp(str1,str2);将两个字符串自左向右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到'\0'为止。比较结果:对等=0、str1>str2=正整数、str1<str2=负整数。
strlen(str);测试字符串长度。
strlwr(str);字符串转换为小写。
strupr(str);字符串转换为大写。