一、一维数组(掌握)
1、数组的定义:具有相同类型的数据的集合
【特点】(1)连续存储数据,访问比较简便。
(2)一次存储多个数据。
2、认识数组:
(1)数组的声明:
数据类型 数组名[数组元素个数];
【注意】1、数组元素个数是一个常量表达式
2、数组名是一个常量,因为它是数组的首地址。
数组的类型: 数据类型 [元素个数] (复合类型,是由基础类型构成的自定义类型),相当于声明了多个元素。
(2)计算数组的大小
数组每个元素类型的大小*数组元素的个数,可以使用sizeof求出。
(3)计算出数组元素个数
数组元素个数 = 数组大小/数组每个元素类型的大小
3、数组的初始化
(1)完全初始化
(2)部分初始化
4、赋值
不能对数组整体赋值,只能对每个元素单独赋值。
练习:1、从终端输入10个数,保存在一个整型数组里,然后以赋值的形式打印出数组下标及对应的元素。
例如 a[0]=5
2、int b[5]={1,2,3,4,5}; int a[5];将b中的所有元素拷贝到a中。
3、从终端输入6个数,找出其中最大的那个数,输出这个数和其下标。
【扩展】数组的下标(索引)
数组的下标从0开始,到数组元素个数-1结束
数组的下标在非声明时,可以是表达式。
【扩展】字符数组
(1)定义:由字符元素构成的数组
(2)声明: char ch[5];
(3)初始化:
如果要使用字符串给字符数组初始化,则数组实际元素个数要多一个(多的那个存储’\0’ )。
练习:1、定义一个字符数组,输入10个字符到数组中,将字符数组内容逐个输出,每个字符之间用空格隔开。
A B C D E F G H I J
A B C D E F G H I J
二、数组排序(掌握)
1、冒泡排序
基本思想:比较相邻的元素,根据升序或降序要求,决定元素是否交换。
对升序:
(1)找到所有元素中的最大的,放在最后一个位置,最后一个位置不再变动。
(2)找到剩余元素中最大的,放在倒数第二个位置上,倒数第二个位置也不再变动。
(3)以此类推,直到按照升序排序完成。
升序时采用大数沉底法,降序时采用小数上升法。
a[5] = {5,4,3,2,1};
升序排序
第一轮
5和4比较,交换,4,5,3,2,1
5和3比较,交换,4,3,5,2,1
5和2比较,交换,4,3,2,5,1
5和1比较,交换,4,3,2,1,5
冒出了5
第二轮 4,3,2,1,5
4和3比较,交换,3,4,2,1,5
4和2比较,交换,3,2,4,1,5
4 和1比较,交换,3,2,1,4,5
第三轮 3,2,1,4,5
3和2比较,交换, 2,3,1,4,5
3和1比较,交换,2,1,3,4,5
第四轮 2,1,3,4,5
2和1比较,交换,1,2,3,4,5
双层循环
数组名a
N个元素
外层循环:控制轮数
for(int i = 0;i<N-1;i++)
内层循环:控制比较和交换的过程
for(int j =0;j<N-1-i;j++)
{
//考虑升序还是降序
if(a[j]>a[j+1])
{
//交换过程,采用临时变量保存某一个元素
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}