魏祥 荆蕾 烟台大学文经学院 1
1 荆蕾 烟台大学文经学院
什么是数组? 是一种数据类型,属于构造类型的一种,由基本 类型的数据按照顺序组合而成 数组:相同类型的数据的集合,数组中每个数据 称为数组的元素。 令用来处理类型相同的一批数据
3 ❖是一种数据类型,属于构造类型的一种,由基本 类型的数据按照顺序组合而成 ❖数组:相同类型的数据的集合,数组中每个数据 称为数组的元素。 ❖用来处理类型相同的一批数据 什么是数组?
引例: 处理某班10名学生某门课的成绩,求所有学生的平均成 绩及最高成绩 nan float sum, ave, al, a2, a3, a4, a5, a6, a7, a8, a9, a10; scanf(“%f%%f%f%f”,&al,&a2,a3,&a4,&a5); scanf(%f%f%f%f”,ca6,&a7,&a8,&a9,&a10); Sum=a1+a2+a3+a4+a5+a6+a7+a8+a9+a10; ave=sum/10 max =al if (a2> max)max=a2; if(a3> max)max=a3; 实际程序是不能这样写
4 处理某班10名学生某门课的成绩,求所有学生的平均成 绩及最高成绩 引例: main( ) { float sum, ave, a1, a2, a3,a4,a5,a6,a7,a8,a9, a10; scanf(“%f%f%f%f%f”,&a1,&a2,&a3,&a4,&a5); scanf(“%f %f%f%f%f”,&a6,&a7,&a8,&a9,&a10); sum=a1+a2+a3+a4+a5+a6+a7+a8+a9+a10; ave=sum/10; max = a1 ; if (a2> max ) max=a2; if (a3> max ) max=a3; ……….. ‘ 实际程序是不能这样写 }
引例: 思考: 学生成绩的下标是可以变化的 ai(i=1,2,…10) 能否使用循环来写程序? C语言中如何表示下标变量呢? 使用数组!
5 引例: 思考: 学生成绩的下标是可以变化的 ai ( i=1,2,…..10 ) 能否使用循环来写程序? C语言中如何表示下标变量呢? 使用数组!
52—维数组 521一维数组定义 维数组:只有一个下标的数组。 般形式为:类型符数组名[常量表达式l; 数组的类型实际上是 、数组名不能与同一函表示数组元素的个数,可 指数组元素的取值类数中其它变量名相同 以是整形常量、符号常量、 型。对于同一个数组,2、数组表数组在内常量表达式,不能为变量 其所有元素的数据类存中存放的首地址 #define n 30 型都是相同的。 int n=30: int ane int an: 例如:inta[10; 7
7 5.2 一维数组 5.2.1 一维数组定义 一维数组:只有一个下标的数组。 一般形式为:类型符 数组名 [常量表达式] ; 数组的类型实际上是 指数组元素的取值类 型。对于同一个数组, 其所有元素的数据类 型都是相同的。 1、数组名不能与同一函 数中其它变量名相同 2、数组名代表数组在内 存中存放的首地址 表示数组元素的个数,可 以是整形常量、符号常量、 常量表达式,不能为变量 例如: int a[10]; eg: #define N 30 int a[N]; eg: int n = 30 ; int a[n];
内存 我们定义数组 首地址a int a 10l 后,计算机会干什么呢? all o。 特点: 分配的地址空间连续 按照下标从小到大存放 a⑨9 首地址用数组名表示 8
8 我们定义数组 int a[10]; 后,计算机会干什么呢? 。。。。 。。。。 首地址a a[0] a[1] a[9] 内 存 特点: 分配的地址空间连续 按照下标从小到大存放 首地址用数组名表示
52.3数组元素的引用 引用一维数组元素的方法为 数组名[下标] eg:定义数组inta01; a数组里面有10个元素,分别为:a|0la[a2]…:81a91 、C语言中下标从0开始,数组a的最后一个元素是a9] 2、C语言中对数组的引用不检验数组边界。 3、下标只能为整型变量、常量或整型表达式。 a[1=3;:for(=0:<10++)a-1]=a[i; s=S a0:
9 引用一维数组元素的方法为: 5.2.3 数组元素的引用 eg:定义数组 int a[10] ; a 数组里面有10个元素,分别为:a[0] a[1] a[2] …. a[8] a[9] 1、C语言中下标从0开始,数组a的最后一个元素是a[9]。 2、C语言中对数组的引用不检验数组边界。 3、下标只能为整型变量、常量或整型表达式。 数组名[下标] a[1]=3; for(i=0;i<10;i++) s=s + a[i]; a[i-1]=a[i];
52.2一维数组的初始化 数组元素赋初值有两种方法: 数组定义时初始化、赋值语句初始化。 1、数组定义时初始化 数组初始化的一般形式为: 类型符数组名常量表达式}={值,值,…,值}; 例如:inta[10={3,5,2,8,5,6,3,7,8,0} 注意: 如果只给部分元素赋初值,剩余元素默认为0; 给全部元素赋初值时,元素个数可以省略。 1/>初值的个数必须小于元素的个数
11 数组元素赋初值有两种方法: 数组定义时初始化、 赋值语句初始化。 1、数组定义时初始化 数组初始化的一般形式为: 类型符 数组名[常量表达式]={值,值,……,值}; 例如: int a[10]={ 3,5,2,8,5,6,3,7,8,0 }; 5.2.2 一维数组的初始化 注意: ➢如果只给部分元素赋初值,剩余元素默认为0; ➢给全部元素赋初值时,元素个数可以省略。 ➢初值的个数必须小于元素的个数
52.2一维数组的初始化 2、使用赋值语句初始化 用赋值语句初始化是在程序执行过程中实现的。 例如:inta[10]; a[0]=5;a[1]=8;a[2]=9 eg:给数组a中的10个元素全部赋值为1 eg:接收用户从键盘上输入的10个数据,并赋值给数组a。 int a[10l, k; int k, a[10]: for(k=0k<10水k++) for(k=0;k<10;k++) scanf(“%d”,&ak) 14只能对单个元素赋值,不能对数组整体赋值
14 5.2.2 一维数组的初始化 2、使用赋值语句初始化 用赋值语句初始化是在程序执行过程中实现的。 例如:int a[10]; a[0]=5;a[1]=8;a[2]=9; int a[10],k; for(k=0;k<10;k++) scanf(“%d”,&a[k]); int k,a[10]; for(k=0;k<10;k++) a[k]=1; eg:给数组a中的10个元素全部赋值为1. 只能对单个元素赋值,不能对数组整体赋值。 eg:接收用户从键盘上输入的10个数据,并赋值给数组a
524一维数组的基本操作 例5-2输入N个数据存入数组中,输出其中最大元素 及其下标 开始 输入N个数组元素 循环初始化:i=0、max=al0l、imax If (imax max=ai Imax=l i++ 16 打印、退出 i++
16 5.2.4 一维数组的基本操作 例5-2 输入N个数据存入数组中,输出其中最大元素 及其下标 开始 输入N个数组元素 循环初始化:i=0、max=a[0]、imax=0 If (imax) max=a[i]; imax=i; i++ Y 打印、退出 N Y N i++