
第8章数组
第 8 章 数 组

本章知识点8.1一维数组的定义、引用与初始化数组名+一维下标”-表示数据8.2一维数组的应用8.3二维数组“数组名+二维下标”---表示数据8.4数组与函数
本章知识点 8.1 一维数组的定义、引用与初始化 “数组名+一维下标”-表示数据 8.2 一维数组的应用 8.3 二维数组 “数组名+二维下标”-表示数据 8.4 数组与函数

引例8.1:输入某个班级课成绩,要求:统计平均分之《程序设计基础》福上人数并输出。分析:(1)考虑最简单情况---只求平均分并不统计平均分之下的人数。输出在平均分以上的人数。(2)要求:?inti;把每个人的成绩保存下来,通过已②double s=0,sc,av;保存的成绩与平均分av作比较,统计出③for(i=1;i<=80;i++)平均分之上的人数。④scanf("%lf",&sc);I/sc一第i个成绩5S=S+SC;//次累加求和问题:怎么保存每个成绩??7?av=s/80;doublesc1,sc2,sc3...??8printf("%lfn",av)
引例8.1:输入某个班级《程序设计基础》课成绩,要求:统计平均分之 上人数并输出。 分析:(1)考虑最简单情况-只求平均分并 不统计平均分之下的人数。 ① int i; ② double s=0,sc,av; ③ for ( i=1;i<=80;i++) ④ { scanf(“%lf”,&sc); //sc—第i个成绩 ⑤ s=s+sc; //次累加求和 ⑥ } ⑦ av=s/80; ⑧ printf(“%lf\n” ,av); (2)要求:输出在平均分以上的人数。 -把每个人的成绩保存下来,通过已 保存的成绩与平均分av作比较,统计出 平均分之上的人数。 问题:怎么保存每个成绩? double sc1,sc2,sc3. ??

8.1一维数组一P1438. 1. 1一维数组的定义定义格式:中数组名整型常量表达式数据类型荐【:数组运算符合法的数组元素的数扰分号结尾不能用()米型例如://定义了有10个数据元素的int型数组a1int a[10];doublef[20l;1/定义了有20个数据元素的double型数组f2chars1[10]s2[20]//定义了有10个和20个数据元素的3char型数组s1和s2
8.1.1 一维数组的定义 ➢ 定义格式: 数据类型符 数组名[整型常量表达式]; 数组元素的数据 类型 合法的标识符 用分号结尾 例如: ① int a[10]; //定义了有10个数据元素的int型数组a ② double f[20]; //定义了有20个数据元素的double型数组f ③ char s1[10], s2[20]; //定义了有10个和20个数据元素的 char型数组s1和s2 8.1 一维数组—P143 [ ]: 数组运算符 元素个数 不能用( )

>数组定义说明:(1) 另定义数组的常量表达式中可以包括常量和符号常量,不能包含变量(即使是已赋值的变量也不行),也不能是变量表达式。即:数组大小(长度)必须是整型常量表达式。(2)C语言规定:数组下标最小值是0,数组下标最大值是数组大小减1数组元素的下标从0开始例如:int a[10];I/ a数组有10个元素---a[0]、a[1]...a[9](3)C语言不允许对数组的大小作动态定义,即数组的大小不能依赖于程序运行过程中变量的值,错误定义2:错误定义1:正确定义:int n = 10;#defineN 10:int n;②int a[n]; //错@ int a[N];②scanf("%d",&n):③int a[n];//错③int b[10.3];//错②doubleb[N+10l:④intc|n+10l;//错
(1)定义数组的常量表达式中可以包括常量和符号常量,不能包含变量 (即使是已赋值的变量也不行),也不能是变量表达式。即:数组大小 (长度)必须是整型常量表达式。 (2)C语言规定:数组下标最小值是0,数组下标最大值是数组大小减1。 数组元素的下标从0开始。 例如:int a[10]; // a数组有10个元素-a[0]、a[1].a[9] (3)C语言不允许对数组的大小作动态定义,即数组的大小不能依赖于程 序运行过程中变量的值。 ➢ 数组定义说明: 错误定义1: ①int n; ②scanf(“%d”,&n); ③int a[n];//错 错误定义2: ①int n = 10; ②int a[n]; //错 ③int b[10.3];//错 ④int c[n+10];// 错 正确定义: #define N 10; ① int a[N]; ② double b[N+10];

课堂练习:(1) int a[10];(2) double f[20];(3) char s1[5], s2[10];问题:定义了多少个元素?数组的数据类型?最后一个元素下标是多少?(1)定义了有10个元素的int型数组a,9(2)定义了有20个元素的double型数组f,19(3)定义了有10个和20个元素的char型数组s1和s2,496/115
课 堂 练 习 : (1) int a[10]; (2) double f[20]; (3) char s1[5], s2[10]; 问题:定义了多少个元素?数组的数据类型? 最后一个元素下标是多少? (1)定义了有10个元素的int型数组a,9 (2)定义了有20个元素的double型数组f,19 (3)定义了有10个和20个元素的char型数组 s1和s2,4 9 6/115

>数组定义说明:(4)数组元素存储空间的分配:数组定义后,每个数组元素的类型均相同一每个元素是一个变量,系统将给其分配一定大小的内存单元,所有数组元素占用内存中一段连续的存储单元。其所占内存单元的大小与数组元素的类型和数组的长度有关。数组所占内存单元的字节数三数组大小×sizeof(数组元素类型例如:inta[10l;/则数组a所占内存单元的大小为:10*sizeof(int)=10*4=40(字节)(5)第一个数组元素的地址是整个数组所占内存块的低地址,也是数组所占内存块的首地址,最后一个数组元素的地址是整个数组所占内存块的高地址(末地址)。例如,下面对数组的定义:末地址inta[10];//a包含10个元素:a[0],a|1],a[2]....,a[9]首地址a[0]a[1]a[2]a[3]a[8]a[7]a[9]
➢ 数组定义说明: (4)数组元素存储空间的分配:数组定义后,每个数组元素的类型均相 同—每个元素是一个变量,系统将给其分配一定大小的内存单元,所有数 组元素占用内存中一段连续的存储单元。其所占内存单元的大小与数组元 素的类型和数组的长度有关。 数组所占内存单元的字节数= 数组大小× sizeof(数组元素类型) 例如:int a[10]; //则数组a所占内存单元的大小为: 10 * sizeof(int) = 10 * 4 = 40(字节) (5)第一个数组元素的地址是整个数组所占内存块的低地址,也是数组所占内存 块的首地址,最后一个数组元素的地址是整个数组所占内存块的高地址(末地址)。 例如,下面对数组的定义: int a[10]; // a包含10个元素:a[0],a[1],a[2],.,a[9] a[0] a[1] a[2] a[3] . a[7] a[8] a[9] 末地址 首地址

8.1.2、一维数组元素的引用一P144引用格式:数组名[下标]引用说明:整型变量或整型表达式一-整型值(1)下标可以是整型常量例1:@ int i=3 , a[10]? a[i]= a[7]+ a[i*2];例2:int a[10];a第1个元素a[0]2000第2个元素a[1]2004占用的字节数为:第3个元素内存a[2]200810 *sizeof(int)地址...........=10*4=40第10个元素2036a[9]
8.1.2、一维数组元素的引用—P144 ➢ 引用格式: 数组名[下标] ➢ 引用说明: (1)下标可以是整型常量、整型变量或整型表达式—-整型值 例1: ① int i=3,a[10]; . ② a[i]= a[7]+ a[i*2]; 占用的字节数为: 10 * sizeof(int) = 10 * 4 = 40 a[0] a[1] a[2] a[9] . 内存 地址 2000 2004 2008 2036 a. 第1个元素 . 第2个元素 第3个元素 第10个元素 例2: int a[10];

引用说明:(2)数组元素的下标值只能是整数。(3)数组元素的下标值与数组定义时的长度(大小)是不同的概念:例1:inta[10f;10是数组长度例2:2a[3]=20;3是数组元素下标(4)只能逐个引用数组元素,不能一次引用整个数组。例3: int a[10];printf ("%d",a);(×)例4: for (i = 0; i < 10;i++)printf ("%d ",a[i]);( )9/115
9/115 引用说明: (2)数组元素的下标值只能是整数。 (3)数组元素的下标值与数组定义时的长度(大小)是不同的概念; 例1:int a[10]; 例2:a[3]=20; 10 是 数组长度 3是数组元素下标 (4)只能逐个引用数组元素,不能一次引用整个数组。 例3:int a[10]; printf ("%d", a); ( ) 例4:for (i = 0; i < 10; i++) printf ("%d ", a[i]); (√ )

>引用说明:(5)数组的每个元素相当于一个变量,有时也把数组元素称为下标变量,对普通变量的一切操作同样也适合于数组元素,例1:inta[10];a[1]=2;a[3]=4;//给数组元素a[1]a|3]赋值D②a[2]=a[1]+a[3];// 将a[1]+a[3]的值赋给a[2](6)数组引用注意:下标不能越界。例2:intx,a[5]:/ /a数组元素的下标是0—4x =a[5];/ /错:引用越界,只能引用a[o]~a[4](7)数组必须先定义,后使用。例3:intx=a[1];/ /错误,应先定义数组a,再引用a的元素int al10l;
➢ 引用说明: (5)数组的每个元素相当于一个变量,有时也把数组元素称为 下标变量,对普通变量的一切操作同样也适合于数组元素。 (6)数组引用注意:下标不能越界。 (7)数组必须先定义,后使用。 例1:int a[10]; ① a[1] = 2; a[3] = 4; // 给数组元素a[1]、a[3]赋值 ② a[2] = a[1] + a[3]; // 将a[1]+a[3]的值赋给a[2] 例2:int x,a[5]; //a数组元素的下标是 0—4 . x = a[5]; //错:引用越界,只能引用a[0]~a[4] 例3: int x = a[1];//错误,应先定义数组a,再引用a的元素 int a[10];