-2022届高三信息技术选考总复习 专题26 矩阵 课件(34张PPT)

文档属性

名称 -2022届高三信息技术选考总复习 专题26 矩阵 课件(34张PPT)
格式 pptx
文件大小 1.1MB
资源类型 教案
版本资源 浙教版(2019)
科目 信息技术(信息科技)
更新时间 2021-10-31 22:33:24

图片预览

文档简介

(共34张PPT)
专题26 矩 阵
1.矩阵中所有数据均存储在一个数组中,从第1列开始先存储一行,接着再存储下一行。
2.一个m行n列的数组,在列表框中输出时,用一个字符串变量表示一行,共循环m次。他是一张二维表。一般来说,用i表示某个元素所处的行,用j表示某个元素所处列。
3.矩阵的问题就是研究存储数组元素下标与他所在行和列的关系。
A B C D
E F G H
I J  K  L
M N O P
Q R S T
5行4列矩阵
实际存储的变量
列 行    第1列 第2列 第3列 第4列
第1行 a(1) a(2) a(3) a(4)
第2行 a(5) a(6) a(7) a(8)
第3行 a(9) a(10) a(11) a(12)
第4行 a(13) a(14) a(15) a(16)
第5行 a(17) a(18) a(19) a(20)
4.矩阵中某个元素的位置跟他前面有完整行数及所在列数有关,若矩阵的大小为m行n列,矩阵问题就是研究矩阵元素位置(i,j)和数组下标pa对应关系,pa=(i-1)*n+j,表达的含义是该元素处在第i行,说明他前面有i-1个完整行,该元素处在第j列,说明除了完整的行,还有j列是零头。
5.通常用双重循环来遍历整个m行n列矩阵,变量i和j表示行和列,也可以用一重循环输出,但此时循环变量表示数组下标。代码如下。
For i=1 To m s=”” For j=1 To n   s=s+ Str(a((i-1)*n+j)) Next j List1.AddItem s Next i For i=1 To m*n
s=s+Str(a(i))
If i Mod n=0 Then
  List1.AddItem s
  s=””
End If
Next i
6.若用一重循环来遍历m行n列矩阵,列号总是在[1,n]之间循环,可能通过对下标取余获得列号。由于pa Mod n的范围在[0,n-1],根据约瑟夫环的知识,某位置所处的列为(pa-1) Mod n+1。在每一行中,除了最后一列,其下标整除n的值均比该行前面的列整除n的值大1,例第一行,前n-1个元素的下标整除n为0,第n个元素的下标整除n为1,因此下标为pa数组元素所处行为(pa-1)\n+1。
7.若用一重循环来遍历m行n列矩阵,下标为pa数组元素处在矩阵第1列的元素特征用VB表达式表示pa Mod n=1 。最后一列的特征是pa Mod n=0。
考点一 根据数组元素下标,计算所处行和所处列
每个元素的行号和列号总是从1开始,而下标整除n或Mod n的最小值为0。充分利用其公式来理解题目的含义。
【例1】 将一组数据(个数:n^2)分成n段有序(升序)数据,例如:当n=4时,排序结果如图所示。
D
有如下VB程序段:
For i=1 To n
For j=n*(i-1)+1 To____(1)____
For k=____(2)____To ____(3)____
    If a(k)>a(k+1) Then t=a(k): a(k)=a(k+1): a(k+1)=t
Next k
Next j
Next i
上述程序段划线处的表达式分别为(  )
A.(1)n*i-1 (2)n*(i-1)+1 (3)n*(2*i-1)-j
B.(1)n*(i-1) (2)n*i-1 (3)n*i-j
C.(1)n*i-1 (2)n*i+j (3)n*(2*i-1)
D.(1)n*i (2)n*(i-1)+1 (3)n*i-j
解析 该题主要考查了冒泡排序算法思想。结合现在比较常见的数组矩阵下标问题,考查冒泡排序的左端点和右端点的变化情况。起点是该行中的第1列,终点是该行中n-j+1列,但a(k)和a(k+1)比较,因此k的终值该列的n-j,即(i-1)*n+n-j。
【变式1】 编写VB程序生成一个n行n列的数字矩阵(数组元素为1-99之间的随机整数),显示在列表框List1中。并在列表框List2中输出每行的最大值及其所在的位置。
Const n=4
Dim a(1 To n*n) As Integer,i As Integer,j As Integer,w As Integer
Dim s As String,pos As Integer,Max As Integer
For i=1 To n
Max=0: s=””
For j=1 To n
pos=____①____
a(pos)=Int(1+Rnd*99)
s=s+Str(a(pos))
A
If____②____ Then
    Max=a(pos)
    w=j
End If
Next j
List1.AddItem s
List2.AddItem i & ”行” &____③____& ”列最大:” & Max
Next i
划线处的代码应为(  )
A.①(i-1)*n+j ②a(pos)>Max ③w   B.①i*n+j ②a(pos)>Max ③j
C.①(i-1)*n+j ②a(j)>Max ③w   D.①i*n+j ②a(j)>Max ③j
解析 变量i控制行,j控制列,第i行第j列存储在数组(i-1)*n+j中,这行中所有数与max比较,找出最值。
考点二 利用矩阵知识解决综合问题
掌握利用一维数组表示二维矩阵的综合知识。
【例2】 (2017·11月浙江省选考)由数组a生成数组b的方法描述如下:
1)将数组a中的n个元素依次分割出若干个数据块,每个数据块有m×m个元素,m最大值为8,最小值为2。分割时,按尽可能大的数据块进行分割;
2)对每个分割出的数据块用“方阵转换法”进行转换,每次转换后得到的数据块依次存储在数据b中;
3)数组a分割后的剩余元素(个数小于4),直接依序存储到数组b中。
例如n=140时,可依次分割出3个数据块,元素的个数分别为64(8×8)、64(8×8)、9(3×3),剩余元素为3个。
“方阵转换法”过程如下:将数据块中m×m个元素按行序排列成一个数字方阵,从该数字方阵中按列序得到转换后元素的次序。以3×3数据块为例,转换过程如下图所示:
小明依据上述描述设计了如下VB程序。请回答下列问题:
(1)当n=120时,分割出的第3个数据块元素个数为________。
(2)请在划线处填入合适的代码。
Const n=120
Dim a(1 To n) As Integer
Dim b(1 To n) As Integer
Private Sub Command1_Click()
Dim m As Integer,i As Integer
Dim Start As Integer  ′当前未分割数据的第1个元素下标
Dim Left As Integer  ′当前未分割数据的个数
Dim pa As Integer   ′数组a的下标
Dim pb As Integer   ′数组b的下标
′读取n个转换前的数据,依次存储到a(1)、a(2)、……a(n)中,代码略
m=8
Start=1
Left=n
Do While Left>3
If Leftm=____①____
Else
pa=Start
pb=Start
For i=1 To m*m
    b(pb)=a(pa)
    pb=pb+1
    If i Mod m=0 Then
      ____②____
    Else
      pa=pa+m
    End If
Next i
  ____③____
Start=Start+m*m
End If
Loop
For i=Start To n
b(i)=a(i)
Next i
′依次输出转换后数据b(1)、b(2)、……b(n)中,代码略
End Sub
答案 (1)4 (2)①m-1或int(sqr(left)) ②pa=start+i\m或pa=start+i/m或pa=pa-(m-1)*m+1或pa=start+(pa-start+1) mod m ③left=left-m*m
解析 n=120 时,可依次分割出3 个数据块,元素的个数分别为64(8×8)、49(7×7)、4(2×2),剩余元素为3 个。所以第3 个数据块为4 个元素。剩余数量Left【变式2】 编写“矩形面积”程序,实现如下功能:按一定比例随机生成a(1)至a(100)数组元素的值:0或1(0多1少);将这100个数组元素,按行依次转化为10×10的二维阵列;当数组元素的值为0时显示成“□”,当数组元素的值为1时显示成“◆”,并在列表框List1 中输出。寻找阵列中,由“□”字符构造出的最大面积的矩形,在标签Label1中显示最大面积所占的单位数。程序运行界面如图所示。实现上述功能的VB代码如下:
Dim a(1 To 100) As Integer
Private Sub Command1_Click()
Dim i As Integer,s As Integer,smax As Integer
′用于随机生成数据,并将阵列按规则在列表框中输出,该部分功能的代码略。
smax=0
For i=1 To 100
If a(i)=0 Then s=search(i)
If s>smax Then smax=s
Next i
Label1.Caption=”最大面积的矩形,占”+Str(smax)+”个单位。”
End Sub
Function search(i As Integer) As Integer
Dim x As Integer,x1 As Integer,xend As Integer
Dim y As Integer,y1 As Integer
Dim s As Integer
x=(i-1) Mod 10+1   ′起始列号
y=(i-1)\10+1  ′起始行号
x1=x: y1=y: xend=10
search=0
Do While y1 <=10
If a((y1-1)*10+x)=1 Then Exit Do ′判断
x1=x
Do While x1 <=xend
If a((y1-1)*10+x1)=1 Then
Else
    x1=x1+1
End If
Loop
y1=y1+1
s=(x1-x)*(________)  ′填空
If s>search Then search=s
Loop
End Function
请回答下列问题:
(1)根据程序的运行界面,没有Caption属性的控件为________类(单选,填字母: A.窗体/ B.命令按钮/ C.列表框/ D.标签)。
(2)程序代码中,去除“判断”处语句,是否会影响程序的结果________(选填:是/否)。
(3)程序代码中,“改错”处的语句有误,请改正。
(4)程序代码中,将“填空”处的语句补充完整。
答案 (1)C (2)否 (3)x1=Xend+1 或Exit DO (4)y1-y
解析 自定义函数的功能是从第i个位置开始查找最大矩形面积,x和y表示第i个元素所处的行号和列号。查找的过程是先扫描x行中所有列,找到一个不为0的就表示该行的列数,退出内循环。接着再扫描下一行,找出构成一个最大的面积。若删除划线处语句,进入内循环后,也马上退出内循环,此时的列数为0,面积也为0。
1.(2020·4月嘉兴)有如下VB程序段:
Const n=3
Dim a(1 To n*n) As Integer
Dim i As Integer,j As Integer,s As String
For i=1 To n
s=””
For j=1 To n
a((i-1)*n+j)=Int(Rnd*i+j)
s=s+Str(a((i-1)*n+j))
Next j
List1.AddItem s
Next i
执行程序后,列表框List1中输出的不可能是(  )
A.1 2 3 B.1 2 3 C.1 2 3 D.1 2 3
 2 2 2   2 2 4    1 2 3    2 3 4
 3 3 3   3 3 4    1 2 3    3 4 5
解析 语句a((i-1)*n+ j)=Int(Rnd*i+j)对第i行的每一列赋值,值的范围是[j,j+i-1],因此A选项的第2行的第3列不可能出现。
A
2.将一组数据(共n*n个数),分别存放在a(1)…a(n*n)中,通过下面程序实现n段有序(升序),例如:当n=4时,排序结果如图所示:
有如下VB程序段:
For i=1 To n
For j=n*(i-1)+1 To____①____
For k=____②____ To ____③____
    If a(k)>a(k+1) Then
      t=a(k):a(k)=a(k+1):a(k+1)=t
    End If
Next k
Next j
Next i
上述程序段划线处的表达式正确的是(  )
A.①n*i-1 ②n*(i-1)+1 ③n*(2*i-1)-j
B.①n*(i-1) ②n*i-1 ③n*i-j
C.①n*i-1 ②n*i+j ③n*(2*i-1)
D.①n*i ②n*(i-1)+1 ③n*i-j
解析 本题考查矩阵与冒泡排序相关知识。通过三重循环完成该功能。第二重For循环控制每一段需要排序的数据的起始位置和终止位置,每一行都为n个数据。故①处填n*i-1;第三重For循环控制每一段数据的比较范围,根据比较关系为a(k)与 a(k+1);从前往后比较,故②③处填n*(i-1)+1和n*(2*i-1) -j,答案选A。
A
3.有一个n行m列网格状临时停车场,如图a所示:在网格中随机分布若干个石头,网格中“□”表示空位,“●”表示石头。停放一辆车需要长为clen个空位、宽1个空位的空间,且车只能南北停放。编写程序,实现统计该车共有多少种停放方法。
图a
图b
程序实现过程:生成规模为n×m的网格,在网格边界添加一圈交通锥“▲”,并将“□”、“●”、“▲”按行依次存入数组a中,在文本框Text3中输入停放该车最小长度clen值,在文本框Text4中输出共有多少种停放方法。程序运行界面如图b所示,实现上述功能的VB代码如下:
Dim a(1 To 200) As String
Dim n As Integer,m As Integer
Private Sub Command1_Click()
Dim i As Integer,j As Integer,k As Integer
Dim s As String
n=Val(Text1.Text)+2
m=Val(Text2.Text)+2
List1.Clear
For i=1 To n*m
If i <=m Or i>m*(n-1) Or____①____Then ′在矩阵周围加上一圈边界
a(i)=”▲”
Else
k=Int(Rnd*2)
If k=1 Then a(i)=”□” Else a(i)=”●”
End If
Next i
′在列表框List1中显示网格,代码略
End Sub
Private Sub Command2_Click()
Dim i As Integer,j As Integer,c As Integer,x As Integer,y As Integer
Dim cnt As Integer,clen As Integer
Dim flag As Boolean
clen=Val(Text3.Text)
y=1
Do While y <=m
For x=1 To n
If a((x-1)*m+y)=”□” Then
    c=c+1
Else
    If c>=clen Then
      cnt=____②____
    End If
    ____③____
End If
Next x
y=y+1
Loop
Text4.Text=Str(cnt)
End Sub
请回答下列问题:
(1)根据图a所示,车长需3个空位的汽车共有________种不同的停法。
(2)请在划线处填入合适的代码。
答案 (1)4 (2)①i Mod m=0 Or i Mod m=1 ②cnt+c-clen+1 ③c=0
解析 本题考核的是矩阵有关算法思想。
(1)按图中所示,第2列和第5列有大于等于3个车位的空间,因此第5列只有一种停法。第2列有5个空位,停法1:第1至3个空位;停法2:第2至4个空位;停法3:第3至5个空位,共有3种停法。
(2)矩阵外围的特征是第1行元素的下标小于等于m,最后一行元素的下标大于(m-1)*n。第1列特征是i Mod n=1,最后1列的特征是i Mod n=0,因此①的答案为i Mod m=0 Or i Mod m=1。在矩阵中,当前元素的位置是由它所在行和它在列来表达组成,x是他所在行的编号,y是他所在列的编号,该元素保存在数组中的下标是(x-1)*m+y。程序的功能是从第1列开始,查找每列连续的”□”的个数,把每个连续的空位保存在c中,如第2列当y=2时,x=1出现空位,且x=2时不是空位,第一个c的值是1,当x=4时,出现空位,并不断地往下找空位c。若停车需clen个空位,由(1)可知,c个空位可以停的方法是c-clen+1。计算完后,要把空位置0。
同课章节目录