C语言学习:11、数组

什么是数组

字面意思,就是一组数据。

专业的解释就是:相同数据类型变量的有序组合;

数组作为一个整体,需要有个名字,就是数组名;

数组的大小的固定的,创建好之后就不能变了。

创建数组的方法

type Name[size];

程序示例1:数组的创建

//创建一个数组,数组名为arr1,数组中有10个元素,每个元素的类型是int
int arr1[10];

//创建一个数组,数组名为arr2,数组中国有5个元素,每个元素的类型是double
double arr2[5];

数组里面元素的访问

通过数组名+下标的方式访问数组里面的元素;

数组里面的元素是按顺序分布的,那个顺序就是每个元素对应的下标;

数组元素的排序是从0开始的,比如5个元素的数组,排序是0、1、2、3、4;

//arr[-1]和arr[5]是不存在的
int arr[5];//所对应的元素分别是arr[0]、arr[1]、arr[2]、arr[3]、arr[4]

注意:

        只有整数型才能作为数组的下标;

        超过数组下标的就叫下标越界;

数组的应用:

1、计算累加和:编程求出0到100之间任意一个数的累加和

思路:

        1、从键盘输入一个整数

        2、判断这个数是不知在0--100之间;

        3、不在0--100之间就退出;

        4、在0--100之间就开始计算;

程序实例1:

#include 

int main()
{
	int x = 0;
	int i = 0;
	int sum = 0;
	int flag = 0;

	do {
		printf("请输出一个整数:");
		scanf_s("%d", &x);

		flag = (0 <= x) && (x <= 100);

		if (flag)
		{
			sum = 0;
			for (i = 0; i <= x; i++)
			{
				sum = sum + i;
			}

			printf("sum = %d\n", sum);
		}
	} while (flag);
	

	return 0;
}

以上的代码没有使用数组也能正常运行,但是效率不是很高,比如我第一次输入100,计算结果5050,第二次再输入100,计算结果也是5050,要得到这个结果就需要把1到100的for循环来一遍,每次都要搞100边,是不是很浪费体力,在计算机身上就是浪费电力,算法不好,处理器的功耗就高了,

以上缺点可以通过数组来解决

程序实例2:

#include 

int main()
{
	int x = 0;
	int i = 0;
	int sum[101];
	int flag = 0;

	//把0到x之间所有的累加都算出来,存在sum[x]中,
	for (x = 0; x <= 100; x++)
	{
		sum[x] = 0;
		for (i = 0; i <= x; i++)
		{
			sum[x] += i;
		}
	}

	//这样累加和就是查表了,不用每次都计算
	do {
		printf("请输出一个整数:");
		scanf_s("%d", &x);

		flag = (0 <= x) && (x <= 100);

		if (flag)
		{
			printf("sum = %d\n", sum[x]);
		}
	} while (flag);
	

	return 0;
}

程序实例2的代码用二重循环来把所有的累加和都算出来,在存在数组中,代码量大了一点,可以用递归来让代码更简单些。

程序实例3:

#include 

int main()
{
	int x = 0;
	int sum[101];
	int flag = 0;

	//使用递归算法,把0到x之间所有的累加都算出来,存在sum[x]中,
	sum[0] = 0;
	for (x = 1; x <= 100; x++)
	{
		sum[x] = sum[x - 1] + x;
	}

	//这样累加和就是查表了,不用每次都计算
	do {
		printf("请输出一个整数:");
		scanf_s("%d", &x);

		flag = (0 <= x) && (x <= 100);

		if (flag)
		{
			printf("sum = %d\n", sum[x]);
		}
	} while (flag);
	

	return 0;
}

数组的初始化

在定义数组的时候就给个初始值,叫数组的初始化。

//定义一个数组名为arr的数组,并初始化里面的值;
//arr[0] =1, arr[1] = 2, arr[2] = 3, arr[3] = 4, arr[4] = 5,
int arr[5] = {1, 2, 3, 4, 5};

自动确认数组的大小

如果定义数组的时候没有制定数组元素的个数,而是直接给出了初始化的值,编译器会根据初始化值的个数确定元素的个数,也就是数组的大小

//编译器会自动确认数组arr[]为arr[5]
int arr[] = {1, 3, 5, 7, 9};

将部分数组元素初始化为0

如果定义数组时,指出了数组大小,但是只初始化了部分元素的初始值,剩下没被初始化的元素默认为0

//arr[0]==2, arr[1]==4, arr[2]==0, arr[3]==0, arr[4]==0,
int arr[5] = {2, 4};

将所有的元素都初始化为0

如果定义数组是,指出来数组的大小,但是初始化的时候,只初始化一个0,那就表示所有的元素值都是0

//arr[0]==arr[1]==arr[2]==arr[3]==arr[4]==0

int arr[5] = {0};

数组的本质

数组是一片连续的内存,用于存储数组里面的元素;

可以使用sizeof函数获取数字的大小(字节数)

程序实例4:

#include 

int main()
{
	int sum[100];
	
	printf("数组sum所占的字节数为%d\n", sizeof(sum));

	printf("数组sum中元素个数为%d\n", sizeof(sum)/sizeof(sum[0]));
	

	return 0;
}

输出结果为

数组sum所占的字节数为400
数组sum中元素个数为100

你可能感兴趣的:(C语言学习笔记,c语言,学习,开发语言)