第八章 数组

目录

一、一维数组

1、一维数组的定义和引用

1、一维数组的定义

2、一维数组的引用

2、一维数组初始化

1、在定义数组时直接数组元素赋初值

2、只给一部分元素赋值,未赋值的部分元素值为0

3、在对全部数组元素赋初值时可以不指定数组长度

3、一维数组的应用

二、二维数组

1、二维数组的定义和引用

1、二维数组的定义

2、二维数组的引用

2、二维数组初始化

3、二维数组的应用

三、字符数组

1、字符数组的定义和引用

1、字符数组的定义

2、字符数组的引用

2、字符数组初始化

1、逐个字符赋给数组中各元素

2、在定义字符数组时进行初始化,此时可以省略数组长度

3、利用字符串给字符数组赋初值

3、字符数组的结束标志

4、字符数组的输入和输出

1、使用格式符 “%c” 进行输入和输出

2、使用格式符 “%s” 进行输入和输出

5、字符数组的应用

四、多维数组 

五、数组的排序算法

1、选择法排序

2、冒泡法排序

3、交换法排序

4、插入法排序

5、折半法排序

6、排序算法的比较

1、选择法排序

2、冒泡法排序

3、交换法排序

4、插入法排序

5、折半法排序

六、字符串处理函数

1、字符串复制

2、字符串连接

3、字符串比较

​编辑

4、字符串大小写转换

5、获取字符串长度

七、数组应用

1、反转输出字符串

2、输出系统日期和时间

3、字符串的加密和解密


一、一维数组

1、一维数组的定义和引用

1、一维数组的定义

一维数组用于存储一维数列中数据的集合。其一般形式如下:

类型说明符 数组标识符[常量表达式];

①类型说明符表示数组中所有元素的类型。

②数组标识符表示该数组型变量的名称,命名规则与变量名一致。

③常量表达式定义了数组元素的个数,即数组长度。例如 iArray[5] ,5表示数组中有5个元素,下标从0开始,到4结束

例如,定义一个数组:

int iArray[5];

 代码中的 int 为数组元素的类型,而 iArray 表示的是数组变量名,括号中的5表示的是数组中包含的元素个数。

在数组 iArray[5]中只能使用 iArray[0]、iArray[1]、iArray[2]、iArray[3]、iArray[4],而不能使用iArray[5],若使用iArray[5],则会出现下标越界的错误。

2、一维数组的引用

数组定义完成后,要使用该数组。可以通过引用数组元素的方式使用该数组中的元素。

数组元素的一般形式如下:数组标识符[下标]

例如,引用一个数组变量 iArray 中的第3个变量

iArray[2];

使用数组保存数据:

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int iArray[5], index, temp;					/*定义数组及变量为基本整型*/
	printf("please enter a Array:\n");				

	for (index = 0; index < 5; index++)					/*逐个输入数组元素*/
	{
		scanf("%d", &iArray[index]);
	}
	printf("Original Array is:\n");
	for (index = 0; index < 5; index++)					/*显示数组中的元素*/
	{
		printf("%d ", iArray[index]);
	}
	printf("\n");

	for (index = 0; index < 2; index++)			/*将数组中元素前后位置互换*/
	{
		temp = iArray[index];					/*元素互换的过充借助中间变量temp*/
		iArray[index] = iArray[4 - index];
		iArray[4 - index] = temp;
	}
	printf("Now Array is:\n");
	for (index = 0; index < 5; index++)						/*转换后的数组再次输出*/
	{
		printf("%d ", iArray[index]);
	}
	printf("\n");
	return 0;
}

变量 temp 用来实现数据间的转换,index 用于控制循环的变量。 

2、一维数组初始化

对于一维数组的初始化可以通过三种方法实现。

1、在定义数组时直接数组元素赋初值

int i,iArray[6]={1,2,3,4,5,6};

该方法是将数组中的元素值一次放在一对花括号中。经过上面的定义和初始化之后,数组中的元素 iArray[0]=1,iArray[1]=2,iArray[2]=3,iArray[3]=4,iArray[4]=5,iArray[5]=6。

#include<stdio.h>
int main()
{
	int index;				/*定义循环控制变量*/
	int iArray[6] = { 0,1,2,3,4,5 };			/*对数组中的元素赋值*/

	for (index = 0; index < 6; index += 2)				/*隔位输出数组中的元素*/
	{
		printf("%d\n", iArray[index]);
	}
	return 0;
}

2、只给一部分元素赋值,未赋值的部分元素值为0

int iArray[6]={0,1,2};

数组变量 iArray 包含6个元素,不过在初始化时只给出3个值。于是数组中前3个元素的值对应括号中出的值,在数组中没有的到值的元素被默认赋值为0。

#include<stdio.h>
int main()
{
	int index;
	int iArray[6] = { 1,2,3 };					/*对数组中的部分元素赋初值*/

	for (index = 0; index < 6; index++)				/*输出数组中所有元素*/
	{
		printf("%d\n", iArray[index]);
	}
	return 0;
}

3、在对全部数组元素赋初值时可以不指定数组长度

之前在定义数组时,都在数组变量后指定了数组的元素个数。c语言还允许在定义数组时不必指定长度,系统就会根据给定的初始化元素值的个数来定义数组的长度,例如:

int iArray[]={1,2,3,4}

不指定数组的元素个数 

#include<stdio.h>
int main()
{
	int index;
	int iArray[] = { 1,2,3,4,5 };

	for (index = 0; index < 5; index++)
	{
		printf("%d\n", iArray[index]);
	}
	return 0;
}

3、一维数组的应用

使用数组保存学生姓名

#include<stdio.h>

int main()
{
	char* ArrayName[5];				/*字符指针数组*/
	int index;						/*循环控制变量*/

	ArrayName[0] = "WangJiasheng";			/*为数组元素赋值*/
	ArrayName[1] = "LiuWen";			
	ArrayName[2] = "SuYuqun";
	ArrayName[3] = "LeiYu";
	ArrayName[4] = "ZhangMeng";
	
	for (index = 0; index < 5; index++)				/*使用循环显示名称*/
	{
		printf("%s\n", ArrayName[index]);
	}
	return 0;
}

二、二维数组

1、二维数组的定义和引用

1、二维数组的定义

二维数组的声明与一维数组相同,一般形式如下:数据类型 数组名[常量表达式1][常量表达式2];

 其中,“常量表达式1”称为行下标,“常量表达式2”称为列下标。如果有二维数组 array[n][m],则二维数组的下标取值范围如下:

①行下标的取值范围为 0~n-1。

②列下标的取值范围为 0~m-1。

③二维数组的最大下标元素是 array[n-1][m-1]。

例如,定义一个3行4列的整型数组:

int array[3][4];

上述代码声明一个3行4列的数组,数组名为 array,其下标变量的类型为整型。该数组的下标变量一共有3x4个,即 array[0][0]、array[0][1]、array[0][2]、array[0][3]、array[1][0]、array[1][1]、array[1][2]、array[1][3]、array[2][0]、array[2][1]、array[2][2]、array[2][3]。

在C语言中,二维数组是按行排列排列,即按行顺序存放。 

2、二维数组的引用

二维数组元素的引用的一般形式如下:数组名[下标][下标];

二维数组的下标可以是整型常量或整型表达式。

例如,对一个二维数组的元素进行引用:

array[1][2];

 上述代码表示的是对 array 数组中第2行的第3个元素进行引用。

不管是行下标还是列下标,其索引都是从0开始的。

2、二维数组初始化

在给二维数组赋初值时,有4种情况:

①可以将所有数据写在一个大括号内,按照数组元素排列顺序对元素赋值。例如:

int array[2][2]={1,2,3,4};

 如果大括号内的数据少于数组元素的个数,则系统将默认后面未被赋值的元素值为0.

②在为所有元素赋初值时,可以省略行下标,但是不能省略列下标。例如:

int array[][3]={1,2,3,4,5,6};

 系统会根据数据的个数进行分配,一共有6个数据,而数组每行分为3列,可以确定数组为2行。

③也可以分行给数组元素赋值。例如:

int a[2][3]={
  {1,2,3},{4,5,6}};

在分行赋值时,可以只对部分元素赋值,例如:

int a[2][3]={
  {1,2},{4,5}};

 在上述代码中,各个元素中的值为:a[0][0]值为1;a[0][1]值为2;a[0][2]值为0;a[1][0]值为4;a[1][1]值为5;a[1][2]值为0。

④二维数组也可以直接对数组元素赋值。例如:

int a[2][3];
a[0][0]=1;
a[0][1]=2;

使用二维数组保存数据 

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int a[2][3], b[3][2];							/*定义两个数组*/
	int max, min;									/*表示最大值和最小值*/
	int h, l, i, j;									/*用于控制循环*/

	for (i = 0; i < 2; i++)								/*通过键盘为数组元素赋值*/
	{
		for (j = 0; j < 3; j++)
		{
			printf("a[%d][%d]=", i, j);
			scanf("%d", &a[i][j]);
		}
	}
	printf("输出二维数组: \n");						/*信息提示*/
	for (i = 0; i < 2; i++)
	{
		for (j = 0; j < 3; j++)
		{
			printf("%d\t", a[i][j]);
		}
		printf("\n");									/*使元素分行显示*/
	}
	/*求数组中的最大元素机器下标*/
	max = a[0][0];
	h = 0;
	l = 0;
	for (i = 0; i < 2; i++)
	{
		for (j = 0; j < 3; j++)
		{
			if (max < a[i][j])
			{
				max = a[i][j];
				h = i;
				l = j;
			}
		}
	}
	printf("数组中最大元素是:\n");
	printf("max:a[%d][%d]=%d\n", h, l, max);
	/*求数组中最小元素及其下标*/
	min = a[0][0];
	h = 0;
	l = 0;
	for (i = 0; i < 2; i++)
	{
		for (j = 0; j < 3; j++)
		{
			if (min > a[i][j])
			{
				min = a[i][j];
				h = i;
				l = j;
			}
		}
	}
	printf("数组中最小元素是:\n");
	printf("min:a[%d][%d]=%d\n", h, l, min);
	/*将数组a转换后存入数组b中*/
	for (i = 0; i < 2; i++)
	{
		for (j = 0; j < 3; j++)
		{
			b[j][i] = a[i][j];
		}
	}
	printf("输出转换后的二维数组:\n");
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 2; j++)
		{
			printf("%d\t", b[i][j]);
		}
		printf("\n");
	}
	return 0;
}

①使用 “\t” 转换字符(横向跳到下一个制表位置)

②使用双重循环比较二维数组中的每一个元素。 

③最后将数组转换成3行2列的数组,其中通过循环的控制,将一个数组中元素的数值赋值到转换后的数组中。

3、二维数组的应用

输入任意一个3行3列的二维数组,求对角元素之和。

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int a[3][3];							/*定义一个3行3列的数组*/
	int i, j, sum = 0;						/*定义循环控制变量和保存数据变量sum*/
	printf("please input:\n");
	for (i = 0; i < 3; i++)						/*利用循环对数组元素进行赋值*/
	{
		for (j = 0; j < 3; j++)
		{
			scanf("%d", &a[i][j]);
		}
	}
	for (i = 0; i < 3; i++)						/*使用循环计算对角线的总和*/
	{
		for (j = 0; j < 3; j++)
		{
			if (i == j)
			{
				sum = sum + a[i][j];			/*进行数据的累加计算*/
			}
		}
	}
	printf("the result is :%d\n", sum);			/*输出最后的结果*/
	return 0;
}

三、字符数组

1、字符数组的定义和引用

1、字符数组的定义

字符数组的定义与其他数据类型的数组定义类似,一般形式如下:char 数组标识符[常量表达式]

例如定义一个数组 cArray:

char cArray[5];

 其中,cArray 表示数组的标识符,5表示数组中包含5个字符型变量元素。

2、字符数组的引用

字符数组的引用与其他类型数据引用一样,也是使用下标的形式。例如,引用上面定义的数组 cArray 中的元素。

cArray[0]='H';
cArray[1]='e';
cArray[2]='l';
cArray[3]='l';
cArray[4]='o';

2、字符数组初始化

1、逐个字符赋给数组中各元素

这是最容易理解的初始化字符组的方式。例如,初始化一个字符数组:

char cArray[5]={'H','e','l','l','o'};

使用字符数组输出一个字符串。

#include<stdio.h>
int main()
{
	char cArray[5] = { 'H','e','l','l','o' };				/*初始化字符数组*/
	int i;													/*循环控制变量*/
	for (i = 0; i < 5; i++)										/*进行循环*/
	{
		printf("%c", cArray[i]);							/*输出字符数组元素*/
	}
	printf(&
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半边山的海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值