1 一维数组
1.1 定义
类型说明符 数组名[常量表达式];
如:
int a[10];
这里,a是数组变量名,10表示数组a中包含的元素个数,int是数组a中元素的类型。数组a的元素序号为0,1,2,3,4,5,6,7,8,9,各序号对应的元素为a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]。
1.2 初始化
类型说明符 数组名[常量表达式]={数值1, 数值2, ..., 数值n};
- 在定义数组时可以直接对全部数组元素进行初始化。如:int a[5] = {10, 20, 30, 40, 50};
- 可以只给一部分元素赋初值。如:int a[5] = {10, 20};
- 对全部数组元素赋初值时,可以不指定数组长度。如:int a[] = {10, 20, 30, 40, 50, 60, 70};
2 二维数组
1.1 定义
类型说明符 数组名[常量表达式 1][常量表达式 2];
- 常量表达式 1:第一维下标的长度,即二维数组的行的长度;
- 常量表达式 2:第二维下标的长度,即二维数组的列的长度;
如:
int a[4][5];
这里,数组名为a,a是一个4行5列的数组,a[1][2]表示的是a中第2行第3列的元素。
1.2 初始化
与一维数组一样,可以在定义的时候进行初始化。
示 例 | 意 思 |
---|---|
int a[2][3] = {10,20,30,40,50,60}; | 定义数组a,并进行全部赋值,数组a的元素以矩阵表示为: |
int a[][3] = {10,20,30,40,50,60}; | 定义数组a,并进行全部赋值。进行全总赋值时,行下标可省略。数组a的元素的矩阵表示同上。 |
int a[2][3] = {{10,20,30},{40,50,60}}; | 定义数组a,并进行全部赋值。此处为分行赋值。数组a的元素的矩阵表示同上。 |
int a[2][3] = {{10,20},{40,50}}; | 定义数组a,并进行分行部分赋值。数组a的元素以矩阵表示为: |
int a[2][3]; a[0][0] = 10; a[0][1] = 20; | 定义了一个2行3列的数组a,对数组a的第1行第1列的元素赋值10,第1行第2列的元素赋值20。 |
3 字符数组
用来存放字符数据的数组称为字符数组,即char型数组。字符数组中的每个元素可以存放一个字符。
3.1 定义及初始化
字符数组的定义和初始化与其它类型的数组类似。以下为一些例子:
char a[12] = {'H','e','l','l','o',' ','w','o','r','l','d','!'};
char a[] = {'H','e','l','l','o',' ','w','o','r','l','d','!'}; //定义字符数组时进行初始化,可以省略长度
char a[] = {"Hello world!"}; //利用字符串给字符数组赋初值
char a[] = "Hello world!" //利用字符串给字符数组赋初值
//先定义字符数组,再对数组中的元素赋值
char a[5];
a[0] = 'H';
a[1] = 'e';
a[2] = 'l';
a[3] = 'l';
a[4] = 'o';
C语言中,用字符数组保存字符串。由于字符串是以'\0'结尾的,所以当把一个字符串存入一个数组时,也把结束符'\0'存入了数组,并以此做为字符串结束的标志。系统会自动在字符串末尾为其添加'\0'作为结束符,不需要手动填写。
3.2 字符数组的输入和输出
3.2.1 %c - 字符数组中字符的逐个输入与输出
例:
#include <stdio.h>
main()
{
int array[] = {'H','e','l','l','o',' ','w','o','r','l','d','!'};
for (int i = 0; i < 12; i++)
printf("%c", array[i]);
printf("\n");
int j;
char a[10];
printf("Please input sting:\n");
for (j = 0; j < 10; j++)
scanf("%c", &a[j]);
printf("The input string is:\n");
for (j = 0; j < 10; j++)
printf("%c", a[j]);
printf("\n");
}
运行结果:
这里在scanf输入数组a的元素值时,输入的字符长度需与数组a的长度一致,回车也为一个输入字符。
3.2.2 %s - 整个字符串依次输入与输出
例:
#include <stdio.h>
main()
{
char a[10];
printf("Please input sting:\n");
scanf("%s", &a);
printf("The input string is:\n");
printf("%s\n", a);
}
运行结果:
3.3 字符串处理函数
字符串处理函数在头文件<string.h>中定义。
函数名 | 格式 | 功能 |
---|---|---|
puts | puts(字符数组名) | 字符串输出 。将字符数组中的字符串输出到终端。 |
gets | gets(字符数组名) | 字符串输入。从终端输入一个字符串,并将该字符串赋值给字符数组。 |
strcat | strcat(字符数组名 1, 字符数组名 2) | 连接字符串。把字符数组名2的字符串连接到字符数组名1的字符串后面,并删去字符串1后的串结束标志'\0'。此函数返回值是字符数组名1的地址。 |
strcpy | strcpy(字符数组名 1, 字符数组名 2) | 复制字符串。把字符数组名2的字符串复制到字符数组名1中,串结束标志'\0'也一同复制。 |
strcmp | strcmp(字符数组名 1, 字符数组名 2) | 比较字符串。按照ASCII码顺序比较两个数组中的字符串,并由函数返回比较结果。 字符串 1 = 字符串 2,返回值为0; 字符串 1 > 字符串 2,返回值为一正数; 字符串 1 < 字符串 2,返回值为一负数; 注: 1) 在使用strcmp比较字符串时,字符串1和字符串2可以是字符数组,也可以是字符串常量; 2) 当两个字符串进行比较时,若出现不同的字符,则以第一个不同的字符的比较结果作为整个比较的结果。 |
strlen | strlen(字符数组名) | 字符串长度。测字符串的长度,不含字符串的结束标志'\0'。函数的返回值为字符串的实际长度。 |
strlwr | strlwr(字符串) | 小写字符串。将字符串转换成小写字母。 |
strupr | strupr(字符串) | 大写字符串。将字符串转换成大写字母。 |
例:
#include <stdio.h>
#include <string.h>
main()
{
char str1[100], str2[100];
int num;
printf("Input the first string:\n");
gets(str1);
printf("The first string is: ");
puts(str1);
num = strlen(str1);
printf("The first string length is: %d\n", num);
strlwr(str1);
printf("Lower first string: %s\n", str1);
strupr(str1);
printf("Upper first string: %s\n", str1);
printf("Input the second string:\n");
gets(str2);
printf("The second string is: ");
puts(str2);
num = strlen(str2);
printf("The second string length is: %d\n", num);
strlwr(str2);
printf("Lower second string: %s\n", str2);
strupr(str2);
printf("Upper second string: %s\n", str2);
printf("Compare the two strings: %d\n", strcmp(str1, str2));
printf("Combine second string to first string\n");
strcat(str1, str2);
printf("--> first string: %s, second string: %s\n", str1, str2);
printf("Copy second string to first string:\n");
strcpy(str1, str2);
printf("--> first string: %s, second string: %s\n", str1, str2);
}
运行结果: