数组是一个由若干同类型变量组成的集合,引用这些变量可以使用同一个名字。数组均由连续的存储单元组成,最低地址对应于数组的第一个元素,最高地址对应数组的最后一个元素。
一维数组示意图如下:
1 一维数组的定义
一维数组是用来存储一维数列中数据的集合,声明格式:
类型说明符 数组标识符[常量表达式];
(1)类型说明符表示数组中的所有元素类型。
(2)数组标识符表示该数组类型变量的名称,命名规则与变量名一致。
(3)常量表达式定义了数组中存放的数据元素的个数,即数组长度。如a[8],表示a数组中有8个元素,下标从0开始,到7结束。
2 一维数组的引用
数组定义后就要使用该数组,可以通过引用数组元素的方式使用该数组中的元素。数组元素表示的一般形式:数组标识符[下标]。
说明:下标可以是整型常量或整型表达式。
对一维数组的初始化可以有以下几种方式实现。
(1)在数组定义的时候直接对数组元素初始化,例如:
int iArray[5] = {1,2,3,4,5};
该方法是将数组中的元素值依次放在一对大括号中。
(2)只给一部分元素赋值,未赋值的部分元素值为0。例如:
int iArray[5] = {1,2,3};
数组中包含5个元素,不过在初始化时只给了3个值,于是数组中前三个元素的值对应括号中给出的值,在数组中没有得到值的元素被默认赋值为0.
(3)在对全部数组赋初值时可以不指定数组长度。例如:
int iArray[] = {1,2,3};
这行代码右侧有3个元素,系统就会根据给定的初始化元素值的个数来定义数组的长度,因此该数组的长度为3。
在C语言中,把下标是两个的数组称为二维数组,如iArray[m][n],表示第m行第n列。例如,一家宾馆的房间号索引图如下,利用二维数组可以准确的找到某个房间。
二维数组在实质上是一维数组的数组,二维数组的第一维度就是数据的行,第二维度是数据的列,根据行和列就能确定某个值。
1 二维数组的定义
二维数组的声明与一维数组的声明相同,格式如下:
数据类型 数组名[常量表达式1][常量表达式2];
其中“常量表达式1”被称为行下标,“常量表达式2”被称为列下标。如定义二维数组array[m][n],则二维数组的下标取值范围如下:
1 行下标的取值范围是0~m-1.
2 列下标的取值范围是0~n-1
3 二维数组的最大下标元素时array[m-1][n-1]。
2 二维数组的引用
二维数组元素引用的格式为:数组名[下标][下标];
二维数组和一维数组一样,也可以在声明时对其进行初始化,如
int iArray[2][3] = {1,2,3,4,5,6};
定义了一个两行三列的二维数组。再给数组初始化时,有以下4中情况。
(1)可以将所有数据写在一对大括号内,按照数组元素排列顺序对元素赋值。例如:
int iArray[3][3] = {1,2,3,4,5,6,7,8,9};
如果大括号内的数据个数少于数组元素的个数,则系统将默认后面未被赋值的元素的值为0.
(2)在为所有元素赋初值时,可以省略行下标,但是不能省略列下标,如:
int a[][3] = {1,2,3,4,5,6};
(3)可以分行给数组元素赋值,如:
int b[2][3] = {{1,2,3},{4,5,6}};
(4)二维数组也可以直接对数组元素赋值,如:
int c[1][2];
c[0][0] = 1;
c[0][1] = 2;
在C语言中,没有专门的字符串变量,没有String类型,通常使用一个字符数组来存放一个字符串。字符数组实际上是一系列的字符集合,如果不严谨的说就相当于字符串。
1 字符数组的定义
字符数组的定义与其他数据类型的数组定义类似,格式为:
char 数组标识符 [常量表达式];
因为要定义的是字符型数组,所有在数组标识符前所用的类型是char,后面括号中的常量表达式代表数组元素的数量。
2 字符数组的引用
字符数组的引用与其他数据类型的数组引用一样,也使用下标的形式。例如:
#include
int main(){
char c1[5];
c1[0] = 'h';
c1[1] = 'e';
c1[2] = 'l';
c1[3] = 'l';
c1[4] = 'o';
}
再对字符数组进行初始化操作时,有以下几种方式。
(1)逐个字符赋给数组中的元素。例如:
char c2[5] = {'h','e','l','l','o'};
(2)如果在定义字符数组时进行初始化,则可以省略数组长度。例如:
char c3[] = {'h','e','l','l','o'};
(3)利用字符串给字符数组初始化
通常用一个字符数组来存放一个字符串。例如,用字符串的方式对数组进行初始化赋值,例如:
char c4[] = {"hello"};
或者把"{}"去掉,也可以,如下:
char c5[] = "hello";
字符数组的输入和输出有两种方法。
(1)使用格式符"%c",进行输入或输出。
使用格式符"%c"实现字符数组中字符的逐个输入或输出。例如,循环字符数组中的元素,代码如下:
#include
int main(){
char c1[5];
c1[0] = 'h';
c1[1] = 'e';
c1[2] = 'l';
c1[3] = 'l';
c1[4] = 'o';
for (int i = 0; i < 5; ++i) {
printf("%c",c1[i]);
}
}
(2)使用格式符"%s"进行输入或输出
char c2[6] = {'h','e','l','l','o','w'};
printf("%s",c2);
在C语言中,strcpy()函数的作用是复制特定长度的字符串到另一个字符串中。语法格式如下:
strcpy(目的字符数组名,源字符数组名)
说明:1、目的字符数组应该有足够的长度,否则不能全部装入复制的字符串。
2、目的字符数组名必须写成数组名形式,而 原字符数组名可以是字符数组名,也可以是一个字符串常量,这时相当于把一个字符串赋给一个字符数组。
3、不能用赋值语句将一个字符串常量或字符数组直接赋给一个字符数组。
例如:
#include
#include
int main(){
char c1[15] = "hello";
printf("%s\n",c1);
strcpy(c1,"world");
printf("%s\n",c1);
return 0;
}
字符串连接就是将一个字符串连接到另一个字符串的末尾,使其组合成一个新的字符串。在字符串处理函数中,strcat()函数就具有字符串连接的功能。其语法格式:strcat(目标,源)
功能:把源字符数组中的字符串连接到目标字符数组中的字符串后面,并删除目的字符数组中原油的字符串结束标志"\0"。例如:
#include
#include
int main(){
char c1[15] = "hello";
printf("%s\n",c1);
strcat(c1,"world");
printf("%s\n",c1);
return 0;
}
字符串比较就是将一个字符串与另一个字符串从首字母开始,按照ASCII码的顺序逐个进行比较。使用strcmp()函数来完成字符串的比较。语法格式:strcmp(字符数组1,字符数组2)
返回值如下:
1、当字符串1 = 字符串2,返回0.
2、字符串1 > 字符串2,返回正数。
3、字符串1 < 字符串2,返回负数。
例如:
#include
#include
int main(){
char c1[] = "hello";
char c2[] = "world";
int result = strcmp(c1,c2);
if(result == 0){
printf("c1 = c2");
}else if(result > 0){
printf("c1 > c2");
}else{
printf("c1 < c2");
}
return 0;
}
用于字符串输出。puts函数的格式:puts(字符数组名)。实例:
#include
#include
int main(){
char c[] = "hello,world";
puts(c);
return 0;
}
用于字符串输入。gets函数格式:gets(字符数组名)。实例:
#include
#include
int main(){
char a[20];
printf("input string:\n");
gets(a);
puts(a);
}
获取字符串长度。strlen格式:strlen(字符数组名)。示例:
#include
#include
int main(){
char c1[50],c2[50];
int num;
printf("输入一个字符串:\n");
scanf("%s",&c1);
num = strlen(c1);
printf("字符串的长度为:%d\n",num);
printf("再输入一个字符串:\n");
scanf("%s",&c2);
num = strlen(c2);
printf("字符串的长度为:%d\n",num);
strcat(c1,c2);
printf("将两个字符串进行连接:\n%s\n",c1);
num = strlen(c1);
printf("连接后字符串的长度为:%d\n",num);
return 0;
}
需求:输入一个数组,然后分别统计出其中英文字母、数字、空格以及其他字符的个数。
#include
#include
int main(){
char c;
int letters = 0,space = 0,digit = 0,others = 0;
printf("请输入一个字符:\n");
while((c = getchar()) != '\n'){
if(c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z')
letters ++;
else if (c == ' ')
space ++;
else if(c >= '0' && c <= '9')
digit ++;
else
others ++;
}
printf("字母 = %d 空格 = %d 数字 = %d 其他 = %d\n",letters,space,digit,others);
return 0;
}