【C】数组

文章目录

    • 数组的概念
    • 数组的赋值
    • 冒泡排序
    • 二维数组
    • 二维数组练习题
    • 二维数组行列互换


数组的概念

在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中,数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因比按数组元素的类型不同,数组又被分为数值数组、字符数组、指针数组、结构数组等名种类别。

数组:具有相同类型的数据组成的序列,是有序集合。


数组的定义

//定义一个数据类型是int类型,数组名称为a,数组长度为10的一维数组
int a [10];

注意点:

对于同一个数组,其所有的元素的数据类型都是相同的

数组名是用户定义的数组标识符,应该规范命名

方括号中的长良表示数据元素的个数,也就是数组的长度

允许在同一个类型中,说明多个数组和变量

数组下标是从0开始的


数组的赋值


可以使用循环动态的赋值

#include
void main()
{
	int a [10];
	//使用循环动态赋值
	for (int i = 0; i < 10; i++) {
		a[i] = i;
	}
}

使用初始化赋值

//在初始化的时候就赋值
int a [3] = {1,2,3};

冒泡排序

冒泡排序就是将一个数组里面的数按照从大到小的顺序来进行排序

如 3 4 1 6 5这几个数来进行冒泡排序

第一次排序

原本的数据 3 4 1 6 5

3小于4所以3应该在4右边,所以数据变为 4 3 1 6 5

1小于3所以1应该在3右边,所以数据不变 4 3 1 6 5

1小于6所以1应该在6右边,所以数据变为 4 3 6 1 5

1小于5所以1应该在5右边,所以数据变为 4 3 6 5 1

经过第一次的排序最小的值已经出现在最右边,那么第二次排序就可以舍去最右边的来进行

也就是说第二次排序的数据有 4 3 6 5

每进行一次排序都会舍去一个最小的,直到完成

具体的实施代码如下

#include
void main()
{
	int num[] = { 9, 8, 10, 7, 6, 0, 11 };
	int temp;
	for (int i = 6; i >0; i--)
	{
		for (int j = 0; j < i; j++) 
		{
			if (num[j]>num[j+1])
			{
				temp = num[j];
				num[j] = num[j + 1];
				num[j + 1] = temp;
			}
		}
	}
	for (int i = 0; i < 7; i++)
	{
		printf("%d\n", num[i]);
	}
}

二维数组


二维数组的一般形式为

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

例如定义a为3x4(三行四列)的数组,定义b为5x10(五行十列)的数组

float a [3] [4];

char b [5] [10];

二维数组可以看作多个一维数组的组合,或者说是元素为一维数组的数组


二维数组的静态赋值

//直接分行给二维数组赋初值
int a [3] [4] = {{1,2,3,4},{5,6,7,8},{1,3,5,7}};
//按照数组的排列顺序赋值
int a [2] [3] = {1,2,3,4,5,6};
//可以对部分元素赋值,每一行的第一个
int a [3] [4] = {{1},{5},{9}};

二维数组的动态赋值

	int arrays[3][4];
	for (int i = 0; i < 2; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			arrays[i][j] = j;
		}
	}

二维数组练习题

如表,一个学习小组有五个人,每个人有三门课的考试成绩。将各个数据保存到二维数组a[5] [3]中,并且求每个人的平均成绩

Math 80 61 59 85 76
C 75 65 63 87 77
Foxpro 92 71 70 90 85

代码如下

#include
void main()
{
	//每行都是一个人的三科成绩
	float a[5][3] = { {80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85} };
	//存储每个人平均成绩
	float studentAvgScore[5];
	float sum = 0.0;
	for (int i = 0; i < 5; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			sum += a[i][j];
		}
		studentAvgScore[i] = sum / 3.0;
		sum = 0.0;
	}
	printf("每个人的平均成绩是\n");
	for (int i = 0; i < 5; i++)
	{
		printf("%7.2f\n", studentAvgScore[i]);
	}
}

二维数组行列互换


将a[2] [3] 转换成a[3] [2]

化繁为简:无论多少维数组,化成一维数组

#include
void main()
{
	int a[2][3] = { {1,2,3},{4,5,6} };
	int b[3][2],tmp;
	printf("原二维数组的样式\n");
	for (int i = 0; i < 2; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			printf("%d\t", a[i][j]);
		}
		printf("\n");
	}

	for (int i = 0; i < 2; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			b[j][i] = a[i][j];

		}
	}
    printf("转换后的二维数组的样式\n");
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 2; j++)
		{
			printf("%d\t", b[i][j]);
		}
		printf("\n");
	}
}

你可能感兴趣的:(C语言,排序算法,数据结构,c++,数组)