高考专题复习专题十 矩阵问题信息技术.docx

上传人:b****5 文档编号:6470844 上传时间:2023-01-06 格式:DOCX 页数:23 大小:209.97KB
下载 相关 举报
高考专题复习专题十 矩阵问题信息技术.docx_第1页
第1页 / 共23页
高考专题复习专题十 矩阵问题信息技术.docx_第2页
第2页 / 共23页
高考专题复习专题十 矩阵问题信息技术.docx_第3页
第3页 / 共23页
高考专题复习专题十 矩阵问题信息技术.docx_第4页
第4页 / 共23页
高考专题复习专题十 矩阵问题信息技术.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

高考专题复习专题十 矩阵问题信息技术.docx

《高考专题复习专题十 矩阵问题信息技术.docx》由会员分享,可在线阅读,更多相关《高考专题复习专题十 矩阵问题信息技术.docx(23页珍藏版)》请在冰豆网上搜索。

高考专题复习专题十 矩阵问题信息技术.docx

高考专题复习专题十矩阵问题信息技术

专题十 矩阵问题

(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)请在划线处填入合适的代码。

Constn=120

Dima(1Ton)AsInteger

Dimb(1Ton)AsInteger

PrivateSubCommand1_Click()

DimmAsInteger,iAsInteger

DimStartAsInteger ′当前未分割数据的第1个元素下标

DimLeftAsInteger  ′当前未分割数据的个数

DimpaAsInteger   ′数组a的下标

DimpbAsInteger   ′数组b的下标

′读取n个转换前的数据,依次存储到a

(1)、a

(2)、……a(n)中,代码略

m=8

Start=1

Left=n

DoWhileLeft>3

 IfLeft

 m=______①____

 Else

pa=Start

pb=Start

Fori=1Tom*m

b(pb)=a(pa)

pb=pb+1

IfiModm=0Then

   ____②______

Else

   pa=pa+m

EndIf

Nexti

____③______

Start=Start+m*m

EndIf

Loop

Fori=StartTon

 b(i)=a(i)

Nexti

′依次输出转换后数据b

(1)、b

(2)、……b(n)中,代码略

EndSub

解析 n=120时,可依次分割出3个数据块,元素的个数分别为64(8×8)、49(7×7)、4(2×2),剩余元素为3个。

所以第3个数据块为4个元素。

剩余数量Left

下一次尝试m-1方块。

例如left=50,m=8,不够分割成8×8,下依次尝试7×7。

通过变量i,找出变量i和下一次数组a下标之间的关系。

通过观察发现每一段pa的值公差都为3,只需要计算出每一段的首项,该段后面的依次pa+3即可。

分析得出,每一段首项下标pa=i\3+1,后面的依次为pa=pa+3。

推广到n个数据,m×m方阵中。

每一段首项下标pa=i\m+start,后面的依次为pa=pa+m。

分割之后剩余数量left减去m*m。

答案 

(1)4 

(2)①m=m-1 或m=int(sqr(left))

②pa=start+i\m或pa=start+i/m 或pa=pa-(m-1)*m+1 或pa=start+(pa-start+1)modm

③left=left-m*m

1.矩阵中所有数据均存储在一个数组中,从第1列开始先存储一行,接着再存储下一行。

2.一个m行n列的数组,在列表框中输出时,用一个字符串变量表示一行,共循环m次。

他是一张二维表。

一般来说,用i表示某个元素所处的行,用j表示某个元素所处列。

3.矩阵的问题就是研究存储数组元素下标与他所在行和列的关系。

1.矩阵中某个元素的位置跟他前面有完整行数及所在列数有关,若矩阵的大小为m行n列,矩阵问题就是研究矩阵元素位置(i,j)和数组下标pa对应关系,pa=(i-1)*n+j,表达的含义是该元素处在第i行,说明他前面有i-1个完整行,该元素处在第j列,说明除了完整的行,还有j列是零头。

2.通常用双重循环来遍历整个矩阵,变量i和j表示行和列,也可以用一重循环输出,但此时循环变量表示数组下标。

代码如下。

Fori=1Tom

 s=""

 Forj=1Ton

s=s+a(i-1)*n+j

 Nextj

 List1.AddItems

Nexti

Fori=1Tom*n

 s=s+a(i)

 IfiModn=0Then

 List1.AddItems

 s=""

 EndIf

Nexti

3.若用一重循环来遍历m行n列矩阵,则下标为i数组元素所处行为(i-1)\n,他所处的列为(i-1)Modn+1

【例】编写“矩形面积”程序,实现如下功能:

按一定比例随机生成a

(1)至a(100)数组元素的值:

0或1(0多1少);将这100个数组元素,按行依次转化为10×10的二维阵列;当数组元素的值为0时显示成“□”,当数组元素的值为1时显示成“◆”,并在列表框List1中输出。

寻找阵列中,由“□”字符构造出的最大面积的矩形,在标签Label1中显示最大面积所占的单位数。

程序运行界面如图所示。

实现上述功能的VB代码如下:

Dima(1To100)AsInteger

PrivateSubCommand1_Click()

DimiAsInteger,sAsInteger,smaxAsInteger

′用于随机生成数据,并将阵列按规则在列表框中输出,该部分功能的代码略。

smax=0

Fori=1To100

Ifa(i)=0Thens=search(i)

Ifs>smaxThensmax=s

Nexti

Label1.Caption=“最大面积的矩形,占”+Str(smax)+“个单位。

EndSub

Functionsearch(iAsInteger)AsInteger

DimxAsInteger,x1AsInteger,xendAsInteger

DimyAsInteger,y1AsIntegerDimsAsInteger

x=(i-1)Mod10+1 ′起始列号

y=(i-1)\10+1 ′起始行号

x1=x:

y1=y:

xend=10

search=0

DoWhiley1<=10

If__a((y1__-__1)__*__10__+__x)__=__1__Then__Exit__Do ′判断

x1=x

DoWhilex1<=xend

Ifa((y1-1)*10+x1)=1Then

 x1__=__x1__–__1 ′改错

Else

 x1=x1+1

EndIf

 Loop

 y1=y1+1

 s=(x1-x)*(____①____)填空

 Ifs>searchThensearch=s

Loop

EndFunction

请回答下列问题:

(1)根据程序的运行界面,没有Caption属性的控件为__________类(单选,填字母:

A.窗体/B.命令按钮/C.列表框/D.标签)。

(2)程序代码中,去除“判断”处语句,是否会影响程序的结果__________(选填:

是/否)。

(3)程序代码中,“改错”处的语句有误,请改正。

(4)程序代码中,将“填空”处的语句补充完整。

解析 自定义函数的功能是从第i个位置开始查找最大矩形面积,x和y表示第i个元素所处的行号和列号。

查找的过程是先扫描x行中所有列,找到一个不为0的就表示该行的列数,退出内循环。

接着再扫描下一行,找出构成一个最大的面积。

若删除划线处语句,进入内循环后,也马上退出内循环,此时的列数为0,面积也为0。

答案 

(1)C 

(2)否 (3)x1=Xend+1或ExitDO

(4)①y1-y

【变式训练】数组a规模为(m+1)×n,其中a

(1)~a(m*n)元素中存储数据,数据中m×n个元素按行序排列成一个数字矩阵如图所示。

计算每列数据的和依次存储在m+1行对应的数组元素中。

依据算法思想,设计一个计算并存储的程序,实现该功能的VB程序如下,但加框处代码有错,请改正。

Constm=6

Constn=5

Dima(1To(m+1)*n)AsInteger

PrivateSubCommand1_Click()

DimiAsInteger,jAsInteger

′读取m×n个正整数,依次存入数组a中,代码略

Fori=1Ton

  

=sum(i) ′

(1)

Nexti

′将计算后数据,按m+1行,n列输出到列表框中,代码略

EndSub

Functionsum(yAsInteger)AsInteger′函数功能是计算每列数据和

sum=0

Fori=

   ′

(2)

 sum=sum+a(i)

Nexti

EndFunction

解析 每列的和放在m+1行,因此他前面有完整的m行,在自定义函数中,计算y列的和,分别为y,y+n,y+2*n等等。

答案 

(1)a(m*n+i) 

(2)ytom*nStepn

1.编写VB程序,实现如下功能:

在文本框Text1中输入整数n(1-10),生成n2个10到99之间的随机整数,单击“生成矩阵”按钮Command1,并以n行n列矩阵的形式显示在列表框List1中,再单击“对角线”按钮Command2,则在标签Label1中输出该矩阵对角线(左上角到右下角)上的数值,运行界面如图所示,程序代码如下。

请在划线处填入合适的代码。

DimiAsInteger,nAsInteger

Dima(1To100)AsInteger

′随机生成n2个10~99之间的整数的代码略

PrivateSubCommand1_Click()  ′将n2个数以矩阵形式显示在List1中

 DimsAsString

 s=” ”

 Fori=1To____①____

s=s+Str(a(i))

If____②____Then

   List1.AddItems

 s=” ”

EndIf

 Nexti

EndSub

PrivateSubCommand2_Click() ′将对角线上的数输出在Label1中

 DimdjxAsString

 Fori=1to____③____

 djx=djx+____④____

 Nexti

Label1.Caption=djx

EndSub

解析 共有n*n个元素,当i是n倍数的时候,表示一行结束,要输出该行,同时变量初始化。

共有n个对角线,他们的下标分别为1,n+2,2n+3,可以找到规律是有多少完整行加列数。

答案 ①n*n ②iModn=0 ③n ④a((i-1)\n*n+(i-1)Modn+1)

2.对一个n×n的矩阵以“行”为单位进行升序排序,如下表所示是一个4×4的矩阵以行为单位进行升序排序。

小杜编写了实现上述功能的程序,程序功能如下:

程序运行时,在文本框Text1中输入n(1<=n<=10),单击“产生”按钮Command1产生n×n个随机数,随机数的范围为[0,9],随机存储在数组a中,并以矩阵的形式在列表框List1上显示。

单击“排序”按钮Command2,对矩阵以“行”为单位进行升序排序,并在列表框List2输出排序后的矩阵。

在程序运行界面如下图所示,实现上述功能的VB程序如下,请在划线处填入合适的代码。

DimnAsInteger

Dima(1To100)AsInteger

′随机生成数并存储在List1中 代码略

PrivateSubCommand1_Click() ′按行排序

DimiAsInteger,jAsInteger,tAsInteger

DimsAsString

s=” ”

Fori=1To______①____

 k=i

 Forj=i+1To____②____

Ifa(j)

 Nextj

 Ifk<>iThent=a(k):

a(k)=a(i):

a(i)=t

 If IModn=0 Then List2.AddItems:

s=” ”

Nexti

EndSub

PrivateSubCommand2_Click() ′按列排序

 DimiAsInteger,jAsInteger,tAsInteger

DimsAsString

s=” ”

Fori=1Toi-1

 k=i

 Forj=i+nTo____③____

Ifa(j)

 Nextj

 Ifk<>iThent=a(k):

a(k)=a(i):

a(i)=t

 If IModn=0 Then List2.AddItems:

s=” ”

Nexti

EndSub

解析 n个数需排n-1趟,每一趟的结束位置是该行的最后一个数。

同样的,若按列排序,每列的最后一个位置在最后一行。

答案 ①n-1 ②(i-1)[BS)]*n ③(n-1)*n+(i-1)Modn+1 stepn

3.小岩设计了一个顺时针旋转矩阵的程序,其功能为:

运行程序时,在文本框Text1中输入矩阵规模n,点击“产生矩阵”按钮Command1,在列表框List1中显示一个n*n的矩阵,该矩阵数据由从1开始的连续自然数组成。

点击“旋转矩阵”按钮Command2,该矩阵顺时针旋转90度并显示在列表框List2中,此后每点一次“旋转矩阵”按钮Command2,列表框List2中显示的矩阵顺时针旋转90度。

请完成程序填空。

DimnAsInteger

DimstAsString

Dima(1To100)AsInteger

Dimb(1To100)AsInteger

PrivateSubCommand1_Click()

 ′产生矩阵,代码略

EndSub

PrivateSubCommand2_Click()  ′旋转矩阵

 Fori=1Ton           ′行

 st=” ”

 Forj=1Ton         ′列

   b((i-1)*n+j)=____①____

   st=st+adj(Str(b((i-1)*n+j)),3)

 Nextj

 List2.AddItemst

 Nexti 

EndSub

Functionadj(aAsString,nAsInteger)AsString

 ′在字符串a前加入适当的空格,使a的长度为n位,代码略

EndFunction

解析 从题图上可知,发生了行号和列号的互换。

答案 ①j+(i-1)*n

4.在美国国家信息交换码中,ASCII值从32到127是可以打印并显示的字符,把这96个字符随机调整次序,生成密码本。

根据输入的密钥和明文,单击“加密”按钮Command1,输出密文。

基本算法如下。

1)用数组mab分别记录1~96个字符的ASCII值,用数组zm记录对应字符在密码本中位置,如mab(9)=65,表示密码本中第9个字符是“A”,则对应的zm(65)=9;

2)把密钥中每个字符的ASCII值的各个数字进行累加(如Hi分别为(7+2)+(1+0+5)),将累加的和除以9取余数后加7,作为将密码本转换成二维表的列数;

3)每个明文在转换后二维表中位置作为密文,该位置是用十六进制表示的行号和列号。

程序运行的界面如下图所示:

实现上述功能的VB程序如下,请回答以下问题:

(1)若输入密钥为“AB”,则根据算法及密码本,字母“A”加密后的密文是____________。

(2)请在划线处填入合适的代码。

DimMab(96)AsInteger′存储密码本中每个字符的ASCII值

Dimzm(127)AsInteger′存储ASCII值32至127的字符在密码本数组mab中的下标

PrivateSubForm_Load()

′产生密码本及96个字符在密码本中位置,代码略。

EndSub

Functionp(sAsString)AsInteger

DimiAsInteger,t1AsLong

DimsumAsInteger,s1AsString

t1=0

i=1

DoWhilei<=Len(s)

s1=Mid(s,i,1)

t1=Asc(s1)

____①____

i=i+1

Loop

p=sumMod9+7

EndFunction

PrivateSubCommand1_Click()

DimiAsInteger,tAsInteger,hangAsInteger

DimsAsString,s1AsString,LieAsInteger

List1.Clear

s1=Text1.Text

t=p(s1)

Label5.Caption=”将密码本换成一张”+Str(t)+”列的二维表”

i=1

DoWhilei<=96

s=s+Chr(Mab(i))+” ”

IfiModt=0Ori=96Then

List1.AddItems

s=” ”

EndIf

i=i+1

Loop

wz=”123456789ABCDEF”

s=Text2.Text

Fori=1ToLen(s)

s1=Mid(s,i,1)

___②____

hang=(t1-1)\t+1

lie=(t1-1)Modt+1

s2=____③____

Nexti

Text3.Text=s2

EndSub

解析 字母AB的值分别65、66,各个数字相加为23,23Mod9+7=12,即转换成12列的矩阵,因此字母A在第2行第3列。

p函数的功能是,根据输入的密钥s,转换成p列的二维表,把密钥中每个字符的ASCII值的各个数字进行累加,将累加的和除以9取余数后加7,保证列数在[7,15]之间;②要求的是根据明文在密码本中位置,转换成相应的行号和列号,t1就是该字母在密码表中的位置。

每个明文在转换后二维表中十六进制的行号和列号作为密文。

答案 

(1)23 

(2)①sum=sum+t1\10Mod10 ②t1=zm(Asc(s1)) ③s2+Mid(wz,hang,1)+Mid(wz,lie,1)

5.试场编排方法:

每试场人数30,尾数试场可能不足30,按6行5列的布局编排试场,每个试场的座位号如图a所示。

编写一个VB程序实现上述功能:

在文本框Text1中输入学生数n,在文本框Text2中输入试场号m,单击“确定”按钮Command1,在列表框中List1中输出第m试场的编排表,程序运行界面如图b所示。

第1列

第2列

第3列

第4列

第5列

第1行

1

12

13

24

25

第2行

2

11

14

23

26

第3行

3

10

15

22

27

第4行

4

9

16

21

28

第5行

5

8

17

20

29

第6行

6

7

18

19

30

图a

图b

(1)999个学生的考号依次是001,002,…,998,999。

根据上述试场编排方法,可知第3试场第2行第3列的学生考号是________。

(2)小王根据上述算法,设计了一个加密程序,其VB代码如下,请在划线处填入合适的代码。

Constk=30

Functionadj(sAsString)AsString

′功能:

在字符串s前添加若干个空格,代码略。

EndFunction

Functionconvert(nAsInteger)AsString

′功能:

把n转字符串,不足3位则在前面补0,代码略。

EndFunction

PrivateSubCommand1_Click()

Dimkh(1To999)AsString

DimnAsInteger,mAsInteger,kcsAsInteger

DimiAsInteger,jAsInteger,lineAsString

DimstartAsInteger,offset1AsInteger,offset2AsInteger

n=Val(Text1.Text)

m=Val(Text2.Text)

Fori=1Ton

kh(i)=convert(i)

Nexti

IfnModk=0Thenkcs=n\'kElse____①______

Ifm>kcsOrm<1Then

Label3.Caption=”无该试场!

Else

____②____

Fori=1To6

line=” ”

offset1=i

line=line+adj(kh(start+offset1))

Forj=2To5

    IfjMod2=1Then

      offset1=offset1+12

      line=line+adj(kh(start+offset1))

    Else

      ____③____

      line=line+adj(kh(start+offset2))

    EndIf

Nextj

List1.AddItemline

Nexti

EndIf

EndSub

解析 从语句m>kcs来看,kcs表示最大的试场号,试场号往往从1开始编起,当学生人数不是k的倍数时,是k整数倍加1。

Stat表示本试场前面已经有的学生编号,因

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 教育学心理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1