专题9 二维数组的定义与引用(课件)-山东省(春季高考)软件与应用技术类《C语言程序设计知识》考纲讲练测
|
38页
|
1人阅读
|
0人下载
精品
内容正文:
考纲讲练测
AI职教
zhijiao.xkw.com
专题9二维数组的定义与引用
山东省春季高考软件与应用技术类
得岗明本号到为山乐有身德、)界作等指用校术典《得寓得序会计用积号的场得》。产售
程■山质量看零专散件与用技术是专业号试关明(C得■理传设计分》国写。精在对标重用强周度点
是年其准位期.等表进这量量量交重静.然习三大纪装表学文特,些身九大装心乌节1专树接.进进
号海织植进,这其节,有想横树凯、望越均,进业小三立地,每这产修一感一雕国
县此数修与复更典,处力生女高层铺量自点,
AI职教
zhijiao.xkw.com
酮
考点解读
考纲要求①
理解二维数组的定义及初始化
考纲要求②
掌握二维数组元素的引用
考查重点
两维长度须常量、下标从0起、行优先存放
考情分析二维数组是数组一章的重点,选择题与读程序题中出现较多
AI职教
zhijiao.xkw.com
鼠
思维导图
类型说明符数组名[行][列]
两维长度都必须是常量
数组的定义
元素在内存中按行优先存放
第二维长度永远不能省略
数组名[行标[列标,两个下标
元素的引用
行标0~M-1、列标0~N-1
二维数组
单个元素用法同普通变量
不能整体赋值与整体输入
的定义与引用
分行全部赋值、分行部分赋值
数组的初始化
按一维形式按行优先连续填
未赋值的元素一律自动为0
全部赋值时可省略第一维
外层管行、内层管列
行列统计先在内层前清零
数组与循环
对角线i==j与i+j==n-1
转置、杨辉三角、极值与下标
69
AI职教
zhijiao.xkw.com
鼠
知识梳理
从一行数据到一张表
维数组与二维数组的区别
比较项
维数组
,一维数组只排一行
二维数组
下标个数
1个
2个
·实际问题常是行列结构
形状
一排数据
行×列的表
·成绩表、矩阵都是二维
定义示例
int a[4];
inta[3][4]:
·C语言支持多维数组
元素个数
4个
3X4=12个
·三维以上较少用到
典型问题
求平均分
矩阵、成绩表
AI职教
zhijiao.xkw.com
知识梳理
二维数组的定义形式
程序段:几种合法的二维数组定义
int
a[3][4];
·类型说明符数组名[行][列]
float scores[5][3];
·第一个常量表示行数
double d[3][3];
·第二个常量表示列数
/*第一个是行数,第二个是列数*
·两对括号都要写
/*inta[3][4]与inta[4][3]*/
·最后以分号结束
/*元素个数相同、形状不同*/
AI职教
zhijiao.xkw.com
知识梳理
两维长度都必须是常量
程序段:合法的长度与非法定义
#define M 3
·长度不能是变量
#define N 5
·不允许动态定义数组
int c[M][N];
/*对:c[3][5]*/
·可用基本常量3、4
ntb[2+1][2*2];/*对*/
·可用符号常量M、N
int n 3;
·可用常量表达式2*2
int d[n][4];
/*错:变量*/
inte[3][];/*错:二维不能省*/
AI职教
zhijiao.xkw.com
知识梳理
元素个数与占用字节
常见二维数组占多少字节
定义
个数
共计
·元素个数等于行数乘列数
inta[3][4]:
12
48字节
·3行4列共12个元素
float f[2][5];
10
40字节
·每个元素占4个字节
double d[3]
9
72字节
·总字节数=12×4=48
[3];
·占用空间与数值无关
intb[10][5]:
50
200字节
1ongL[4][2]:
8
32字节
AI职教
zhijiao.xkw.com
知识梳理
内存按行优先连续存放
inta[3][4];的存放顺序
·先存第0行的全部元素
顺序
元素
偏移
1
a[o][o]
0
·再存第1行、第2行
2
a[0][1]
4
·元素前后两两紧挨着
3
a[o][2]
8
·a[0][3]后面是a[1][0]
4
a[o][3]
12
·偏移=(行×列数+列)×字节
5
a[1][0]
16
12
a[2][3]
44
AI职教
zhijiao.xkw.com
知识梳理
相当于多个一维数组
程序段:a、a[o]、a[o][o]的区别
inta[3][4];
·整张表是一个二维数组
/米
a
整张表的名字、首地址*/
·每一行就是一个一维数组
/*a[0]
第0行这一整行*/
·行名a[0]、a[1]是地址
/*a[0][]第g行第g列的值*/
·a[0][0]才是元素的值
/*a=b;
错:不能整体赋值*
·数组名都不能整体赋值
/*a[0]=b[0];错:行名也是地址*/
AI职教
zhijiao.xkw.com
知识梳理
元素的引用与两个下标
程序段:合法的引用形式
inta[3][4];
·形式:数组名[行标][列标]
a[0][8]=1;
/*第1行第1列*/
。两个下标各用一对括号
a[2][3]=12;
*最后一个*∥
·行标范围0M-1
a[i][j]=o;
/*变量下标*/
·列标范围0心N-1
a[i+1][j*2]=7;/*表达式*/
·下标可以是整型表达式
/*行标日~2,列标日~3*/
AI职教
zhijiao.xkw.com
知识梳理
引用形式的正误
哪些写法是对的
写法
对不对
·两个下标必须各一对括号
a[1][2]
对
。a[1,2]是逗号表达式
a[i][j]
对
·a[1]取到的是一整行
a[i+1][j*2]
对
·a[1][2][3]多写-个下标
a[1,2]
错
·圆括号会被当成函数调用
a[1]
错(整行)
a[1][2][3]
错(越界)
AI职教
zhijiao.xkw.com
知识梳理
元素当变量、数组不能整体操作
程序段:逐个元素输入才是对的
inta[3][4],i,j;
·单个元素用法同普通变量
for(i=0;1<3;i++)
·能赋值、能运算、能输入
for(j=0;j<4;j++)
。scanf中要写取地址符
scanf("%d",&a[i][j]);
·整个数组不能整体赋值
/*a=0;
错:整体赋值*/
·不能一条scanf输全部
/*一条scanf只读一个元素*/
AI职教
zhijiao.xkw.com
知识梳理
分行赋值:清楚不错位
程序段:分行全部赋值与部分赋值
inta[2][3]={{1,2,3},{4,5,6}};
·外层花括号包整张表
/*第一行123,第二行456*/
·里面每对花括号是一行
intb[2][3]={{1},{4,5}};
·分行全部赋值最直观
/*b[0][0]=1,b[1][0]=4*/
·分行部分赋值缺的补0
/*b[1][1]=5,其余为0*/
·跳过某行写一对空括号
intc[3][2]={{1},{,{4,5}};
/*第二行为0,用)占位*/
AI职教
zhijiao.xkw.com
知识梳理
一
维形式赋值与省略第一维
程序段:按一维形式赋值与省略第一维
inta[2][3]={1,2,3,4,5,6};
。一层花括号按行优先连续填
/*行优先依次填:123/456*/
·每满一行就换到下一行
intb[][3]={1,2,3,4,5,6};
·全部赋值可省第一维长度
/*6÷3=2行,第二维必须写3*/
·第二维长度任何情况不能省
intc[][3]={1,2},{4,5,6}};
·初值个数不能超过总数
/*两对花括号=2行*/
AI职教
zhijiao.xkw.com
知识梳理
初始化与定义中的易错写法
六种易错写法
·{0}
才是整表清零
写法
结果
inta[2][3]={0};
全为0(对)
·一行初值不能超过列数
{{1,2,3,4},{5}}
编译报错
·初值总数不能超过元素数
inta[2][];
编译报错
·定义之后不能再整体赋值
a={o};
编译报错
·第二维长度始终不能省
{1},{4,5}]
其余自动为0
inta[2][3];直接用
值不确定
AI职教
zhijiao.xkw.com
知识梳理
双重循环:外层行、内层列
程序段:二维数组的遍历与求和
int a[3][4],i,j,sum =0;
·外层管行标i
for(i=0;1<3;i++)
。内层管列标j
for(j=8;j<4;j++)
·条件写i<M、j<N
scanf("%d",&a[i]j]);
·每行结束要换行输出
for(i=0;i<3;i++)
·按列访问只要对调两层
for(j=0;j<4;j+)
sum +a[i][j];
AI职教
zhijiao.xkw.com
知识梳理
行列统计、对角线与典型应用
五个必背写法
◆每行之和:外层行、内层列,先清零
。每行求和先进内层清零
◆
每列之和:外层列、内层行,先清零
·每列求和外层换成列标
◆最大值:先取首元素,记下i、j
。主对角线=j
◆两条对角线:i=j与i+j=n-1
·副对角线i+j=n-1
◆转置:只换j>i的上三角
·转置只处理上三角j>i
AI职教
zhijiao.xkw.com
背诵环节
1.二维数组的定义方式是什么?两个中括号里的常量分别表示什么?
【答案】类型说明符数组名[常量表达式们[常量表达式2];第一个常量是行数,第二个是
列数,二者都必须是常量表达式、都不能含变量,第二维长度任何时候都不能省略。
2.inta[3][4];定义了什么样的数组?共有多少个元素?行标、列标各是
什么范围?
【答案】定义了一个3行4列的二维数组,共有3×4=12个元素;行标范围0~
2,列标范围0~3,元素个数=行数×列数。
AI职教
zhijiao.xkw.com
背诵环节
3.二维数组在内存中是怎样存放的?元素a[i门][j]的偏移量怎么算?
【答案】按行优先存放:先存第0行,再存第1行,依次类推;元素前后紧挨着。偏移量
=(行标×列数十列标)×每个元素的字节数。
4.二维数组元素的引用形式是什么?a[1们与a[1们[0]有什么区别?
【答案】形式是数组名[行标][列标],两对方括号都要写。a[1]表示第1行这一整行
(一维数组名、地址常量),a[1们[0]才是这一行第1个元素的值。
AI职教
zhijiao.xkw.com
背诵环节
5.二维数组的初始化有哪四种方式?未赋初值的元素是多少?
【答案】分行全部赋值、分行部分赋值、按一维数组形式赋值、省略第一维长度;无论用哪
种方式,没有给初值的元素一律自动为0。
6.什么情况下可以省略二维数组第一维的长度?为什么第二维不能省?
【答案】省略第一维长度时不必给全部元素赋值:只要第二维长度写明,系统按初值个数或
花括号层数就能算出需要几行,初值没填满也可以省;系统确定的是行数,列数是定义时在
第二维里已经写明的固定值,所以第二维长度任何时候都不能省。
AI职教
zhijiao.xkw.com
鼠
常考题
1.定义二维数组时,两个中括号里都必须是常量表达式。()
【答案】√
【解析】两维长度都必须是常量。
2.下列二维数组的定义中,合法的是()。
A、inta[3][];
B、inta[][4]={1,2,3,4}};
C int n=3;int a[n][4]
D、inta(3)(4);
【答案】B
【解析】省略第一维要给全初值。
AI职教
zhijiao.xkw.com
鼠
常考题
3.执行inta[3][4];之后,能够引用的最大行标是3。()
【答案】×
【解析】行标最大是3-1=2。
4.执行inta[2][3]={1,2},{4};之后,a[1][2]的值是0。()
【答案】√
【解析】没给初值的元素自动为0。
AI职教
zhijiao.xkw.com
酮
常考题
5.执行inta[3][4];之后,该数组的元素个数是()。
A、7个
B、12个
0、34个
D、4个
【答案】B
【解析】3×4=12个元素。
6.下列对二维数组元素的引用中,错误的是()。
A、a[1][2]
B、a[i][j]
C、a[1,2]
D、a[i+1][j*2]
【答案】C
【解析】两个下标要各用一对方括号。
AI职教
zhijiao.xkw.com
酮
常考题
7.定义了inta[4][5];之后,最后一个元素是a[3][]。
【答案】4
【解析】最大列标=列数-1=4。
8.执行inta[2][3]={1,2},{4,5,6};后,a[0][2]的值是
【答案】0
【解析】第一行缺的元素自动为0。
AI职教
zhijiao.xkw.com
模拟题
1.(单项选择题)若有inta[4][5];,则该数组占用的字节数是(
)。
A、20
B、40
C、80
D、100
【答案】C
【解析】4×5×4=80字节。
2.(判断题)inta[2][3];与inta[3][2];两个数组占用的字节数相同。
【答案】√
【解析】元素个数都是6,占字节相同。
A职教
zhijiao.xkw.com
模拟题
3.(单项选择题)执行inta[2][3]={1,2,3,4,5,};后,a[1][1]的值
是()。
A、2
B、4
0、5
D、6
【答案】C
【解析】行优先连续填:a[1][1]=5。
4.(判断题)二维数组可以用一条
scanf语句整体输入全部元素。
()
【答案】X
【解析】只能用双重循环逐个输入。
AI职教
zhijiao.xkw.com
模拟题
5.(单项选择题)要定义3行4列的整型数组,
正确的写法是()。
A、inta[3,4];B、inta[3][4];C、inta[4][3];D、inta[3][3];
【答案】B
【解析】行数在前、列数在后。
6.(填空题)执行inta[3][4]={1们,{2,3};后,a[2][0]的值是
【答案】0
【解析】整行没赋值,全部为0。
A职教
zhijiao.xkw.com
模拟题
7.(单项选择题)在inta[3][4];中,紧跟在a[0][3]后面存放的元素
是()。
A、a[0][4]
B、a[1][0]
0、a[1][3]
D、a[2][0]
【答案】B
【解析】行优先:第0行后接第1行。
8.(填空题)若inta[3][4];,则a[1][2]之前共有
个元素(不
含它本身)。
【答案】6
【解析】1×4+2=6个元素。
AI职教
zhijiao.xkw.com
鼠
模拟题
9.(单项选择题)若有inta[3][4;且i=1、j=2,则a[i][j]是
()。
A、第1行第2列
B、第2行第3列
C、第2行第2列
D、第1行第3列
【答案】B
【解析】行标1是第2行,列标2是第3列。
AI职教
zhijiao.xkw.com
课堂练习
1.二维数组的行标和列标都从0开始。()
【答案】√
【解析】行标、列标都从0起。
2.执行inta[2][3]={1,2,3},{4,5,6}};后,a[1][0]的值是4。
()
【答案】√
【解析】第二行第一个元素是4。
69
AI职教
zhijiao.xkw.com
鼠
课堂练习
3.下列定义中,把第二维长度非法省略的是()。
A、inta[3][4];
B、inta[][4]={1,2,3,4}:
c、inta[3][];
D、inta[2][2+2]:
【答案】C
【解析】第二维长度任何时候都不能省。
4.3阶方阵中,主对角线元素的下标满足的条件是()。
A、i==j
B、i+j=2C、i>j
D、i<j
【答案】A
【解析】主对角线:i=j。
69
AI职教
zhijiao.xkw.com
鼠
课堂练习
5.执行inta[3][4]={[1,2},{3};后,值为0的元素共有()。
A、6个
B、7个
C、8个
D、9个
【答案】D
【解析】12-3=9个元素为0。
6.执行inta[2][3]={0};之后,元素a[1][2]的值是
【答案】0
【解析】{0}使全部元素为0。
AI职教
zhijiao.xkw.com
课堂练习
7.按行优先输出inta[2][2]={{1,2},{3,4};的全部元素,顺序是
()。
A、1234
B、1324
C、4321
D、1243
【答案】A
【解析】先第一行再第二行。
8.输出3行4列数组的全部元素时,内层循环的条件应写成
j水
【答案】4
【解析】列数4,条件写j<4。
g
AI职教
zhijiao.xkw.com
课堂练习
9.3阶方阵副对角线上元素的行标与列标之和恒等于
【答案】2
【解析】副对角线:i+j==n1,即2。
10.执行inta[3][3]={1,2,3},{4,5,6},{7,8,9};后,a[1][2]-a[2]
[1]是()。
A、-2
B、0
C、2
D、6
【答案】A
【解析】6-8=-2。
AI职教
zhijiao.xkw.com
酮
课堂练习
11·求3行4列数组每行元素之和,两层循环应分别控制()。
A、外层列、内层行
B、外层行、内层列
C、外层行、内层行
D、外层列、内层列
【答案】B
【解析】外层行、内层列,逐行求和。
AI职教
zhijiao.xkw.com
鼠
课堂练习
12.下表列出4段定义或语句,判断说法正确的是()。
序号
定义或语句
a[1][1们
1
inta[2][2]={{1,2},{3,4}};
4
2
inta[2][3]={{1},{4,5};
5
3
inta[☐[2]={1,2,3,4};
4
4
inta[2][3]={1,2,3,4,5,6};
5
A、序号1是3B、序号2是5C、序号3是2D、序号4是6
【答案】B
【解析】序号2的a[1][1]=5。
AI职教
zhijiao.xkw.com
课堂小结
1.二维数组的定义:类型说明符数组名[常量表达式][常量表达式2];行×列=
元素个数,两维长度都须常量、第二维不能省;行优先连续存放
2.二维数组元素的引用:数组名[行标][列标],行标0~M-1、列标0~N-1;
单个元素用法同普通变量,不能整体赋值与整体输入输出
3,二维数组的初始化:分行全部赋值、分行部分赋值、按一维形式赋值,未赋值元素自
动为0;全部赋值时可省略第一维,第二维不能省
4.二维数组与双重循环、典型应用与易错点:外层管行、内层管列,逐行统计先清
零;行和列和、极值与下标、对角线、转置、杨辉三角是典型考法
A职教
zhijiao.xkw.com
◆◆
感谢观看