上接第六天 (break语句和continue语句)的流程图
数组:一组相同类型的数据的集合
顾名思义一次性定义多个变量(一组变量)
//本质上是相同类型变量的集合
不用数组 就一个一个输入 int ....
一维数组
整型 ?字符型
二维数组
整型 ?字符型
--------------------------------------------------
语法:
类型说明符 ? 数组名 [常量表达式];
(1).类型说明符
?? ??? ?整型 int short long long long
?? ??? ?浮点
?? ??? ?字符
(2).数组名
?? ??? ?代表着 数据集合 (内存空间的一个名字)
?? ??? ?从数据类型角度来看?
?? ??? ?数组名(a)代表
?? ??? ?
(3).[] //表示此时定义的是一个数组
(4).常量表达式
?? ? ?表示数组的长度 ---变量的个数
例子:
int array[5];//定义一个数组,这个数组放了5个int型变量 ?这个数组名叫array
int array[40];
数组本身也是一种"数据类型"
"注意 整型 字符型 浮点型 为数据类型的基本类型"
类型:?? ?变量?? ?常量?? ?大小?? ?内存
变量的定义: 数据类型 变量名
?? ??? ??? ?int[10] a; // a所代表的类型是 int[10]
int a = 10;//a是int型
int a[10];//把名字去掉 剩下的就是a对应的数据类型 此处为int[10]的类型
int a[10];//数组再内存空间上的特点
//数组的给值
//初始化
//赋值 ?数组赋值不能整体赋值
int a[10] ={1,2,3,4,5,6,7,8,9,10};//{} ?//表示初始化 ?--初始化器
?? ??? ??? ??? ??? ??? ??? ??? ? ?//全部初始化
?? ??? ??? ??? ??? ??? ??? ??? ? ?
?? ??? ??? ??? ??? ??? ??? ??? ? ?
//数组元素的访问
语法: a[下标];//0开始的
?? ??? ??? ? ? //1开始的
?? ?数组下标:本质上是偏移量※
赋值的方式---给数组中输入一些值?
scanf("%d",& a[i]);//
数组的特点:
1.连续性 --一片连续空间
2.有序性 --元素依次存储
3.单一性 --单一元素的元素
a[i] //下标运算---本质 实际是一个地址的运算
下标本质上是一个偏移量?
?? ?a[0] 偏一个0 是本身
?? ?a[1] 偏一个1 是下一位
?? ?
?? ??? ?a[i]<==>i[a] ?一样的
?? ??? ?
数组越界问题:
1.不是语法问题 ---编译器不会报错;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?cautious!!!
a[-1] 向前偏移?
数组总结 :?? ?数组名代表的类型
?? ??? ??? ?下标的意义 ----偏移量
?? ??? ??? ?1.数组概念:
?? ??? ??? ?数组:一组相同类型数据的集合
?? ??? ??? ?2.语法
?? ??? ??? ?数据类型 数组名[数组长度];
?? ??? ??? ?3.定义?
?? ??? ??? ?int a[10];
?? ??? ??? ?连续性 有序性 单一性
?? ??? ??? ?4.注意
?? ??? ??? ?a.数组名
?? ??? ??? ?代表的数据类型 --数组类型 int a[10];//a代表的类型为int[10]
?? ??? ??? ?代表的值 --数组首元素的地址//&a[0]
?? ??? ??? ?b.数组长度与下标
?? ??? ??? ?数组长度--表示几个元素(变量)
?? ??? ??? ?下标---偏移量
?? ??? ??? ??? ??? ?[0~数组长度-1]
?? ??? ??? ?int a[10]; [0~9]
?? ??? ??? ?5.数组的初始化
?? ??? ??? ?int a[10] ={1,2,3,4,5,6,7,8,9,10};//全部初始化
?? ??? ??? ?int a[10] ={1,2,3,4,5};//部分初始化--一次给到数组元素
?? ??? ??? ??? ??? ??? ??? ??? ??? ?//没给值的而元素,默认为0
?? ??? ??? ?将数组初始化为0
?? ??? ??? ?int a[10]={}; //都初始化为0
?? ??? ??? ?int a[10]={0};//都初始化为0
?? ??? ??? ?数组不初始化----数组为垃圾值
?? ??? ??? ?
?? ??? ??? ?6.数组长度可省略
?? ??? ??? ?有前提--必须要有初始化的值
?? ??? ??? ?int a[]={1,2,3};//编译器会通过值来计算数组长度
?? ??? ??? ?
?? ??? ??? ?
排序:按一定的顺序排列
?? ?
?? ?升序 1 2 3 4
?? ?降序 4 3 2 1 ??? ??? ?
------------------
选择排序:
? ? 为合适的位置,选择一个合适的数
01234567//下标
52368714//数值
0号位置:最小值
i=0;
for(j=1;i<len;++i)
{
?? ?if(a[j]<a[0])
?? ?{
?? ??? ?交换
?? ?}
}
1号位置 也找最小值
i=0;
for(j=2;i<len;++i)
{
?? ?if(a[j]<a[1])
?? ?{
?? ??? ?交换
?? ?}
}
发现是在一个循环里面?
for(i=0;i<len-1;++i) //位置 i=len-1 ---控制位置
{
?? ?//找最小值
?? ?//i=1
?? ?for(i=i+1;j<len;++j)//
?? ?{
?? ??? ?if(a[j]<a[i]);
?? ??? ?{
?? ??? ??? ?交换
?? ??? ?}
?? ?}
}
冒泡排序:
思想:
?? ?相邻两个元素两两比较,小的放前,大的放后
?? ?
01234567//下标
15368724//数值
第一趟?
n=8 比较7次 冒一个数
第二趟
n=7 比较6次 冒一个数
...
第7趟
n=2 比较次数1 冒一个数
第n-1躺?
n
for(j=1;j<n;++j) //1~n-1 //
{
for(int i = 0;i<n-j;++i)
{
?? ?if(a[i]>a[i+1])
?? ?{
?? ??? ?交换
?? ?}
}
}