【C语言基础】数组

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>中定义。

字符串处理函数
函数名格式功能
putsputs(字符数组名)字符串输出 。将字符数组中的字符串输出到终端。
getsgets(字符数组名)字符串输入。从终端输入一个字符串,并将该字符串赋值给字符数组。
strcatstrcat(字符数组名 1, 字符数组名 2)连接字符串。把字符数组名2的字符串连接到字符数组名1的字符串后面,并删去字符串1后的串结束标志'\0'。此函数返回值是字符数组名1的地址。
strcpystrcpy(字符数组名 1, 字符数组名 2)复制字符串。把字符数组名2的字符串复制到字符数组名1中,串结束标志'\0'也一同复制。
strcmpstrcmp(字符数组名 1, 字符数组名 2)

比较字符串。按照ASCII码顺序比较两个数组中的字符串,并由函数返回比较结果。

字符串 1 = 字符串 2,返回值为0;

字符串 1 > 字符串 2,返回值为一正数;

字符串 1 < 字符串 2,返回值为一负数;

注:

1) 在使用strcmp比较字符串时,字符串1和字符串2可以是字符数组,也可以是字符串常量;

2) 当两个字符串进行比较时,若出现不同的字符,则以第一个不同的字符的比较结果作为整个比较的结果。

strlenstrlen(字符数组名)字符串长度。测字符串的长度,不含字符串的结束标志'\0'。函数的返回值为字符串的实际长度。
strlwrstrlwr(字符串)小写字符串。将字符串转换成小写字母。
struprstrupr(字符串)大写字符串。将字符串转换成大写字母。

例:

#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);
}

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值