第04章 数组习题参考答案.docx

上传人:b****8 文档编号:29663760 上传时间:2023-07-26 格式:DOCX 页数:22 大小:19.45KB
下载 相关 举报
第04章 数组习题参考答案.docx_第1页
第1页 / 共22页
第04章 数组习题参考答案.docx_第2页
第2页 / 共22页
第04章 数组习题参考答案.docx_第3页
第3页 / 共22页
第04章 数组习题参考答案.docx_第4页
第4页 / 共22页
第04章 数组习题参考答案.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

第04章 数组习题参考答案.docx

《第04章 数组习题参考答案.docx》由会员分享,可在线阅读,更多相关《第04章 数组习题参考答案.docx(22页珍藏版)》请在冰豆网上搜索。

第04章 数组习题参考答案.docx

第04章数组习题参考答案

第4章数组习题参考答案

第1题

'方法1随机数赋值

Dimn%,max%,min%,i%,p!

Dima()AsInteger'定义评委打分数组

n=Val(InputBox("输入评委人数"))'评委人数应大于2

ReDima(1Ton)AsInteger

Fori=1Ton

a(i)=Int(Rnd()*(100-50+1)+50)'数组a赋值

Printa(i);'输出a数组

s=s+a(i)'数组元素累加

Nexti

Print

max=a

(1):

min=a

(1)'设最大数、最小数为a

(1)

Fori=2Ton

Ifmax

Ifmax

Nexti

p=(s-max-min)/(n-2)

Print"选手得分为:

";p

'方法2输入评委打分

Dimn%,max%,min%,i%,p!

Dima()AsInteger'定义评委打分数组

n=Val(InputBox("输入评委人数"))

ReDima(1Ton)AsInteger

Fori=1Ton

a(i)=Val(InputBox("评委"&i&"打分"))'数组a赋值

Printa(i);'输出a数组

s=s+a(i)'数组元素累加

Nexti

Print

max=a

(1):

min=a

(1)'设最大数、最小数为a

(1)

Fori=2Ton

Ifmax

Ifmax

Nexti

p=(s-max-min)/(n-2)

Print"选手得分为:

";p

第2题

'方法1

Rem计算方法:

诞生年代除以12,取余数.如果能整除,余数视为零.

Rem按照下列数字表对应生肖动物:

Rem01234567891012

Rem猴鸡狗猪鼠牛虎兔龙蛇马羊

DimNF%,num%

Dima()'定义生肖数组

a=Array("猴","鸡","狗","猪","鼠","牛","兔","龙","蛇","马","羊")

NF=Val(InputBox("输入出生年份"))

num=NFMod12

Print"出生年份生肖为:

"&a(num)

第3题

'方法1

Dima(0To10)AsInteger'定义a数组存放各分数段统计结果

n=Val(InputBox("输入学生人数"))

Fori=1Ton'数组a赋值

score=Val(InputBox("输入学生成绩"))

Printscore;

Ifscore<60Then

a(5)=a(5)+1

ElseIfscore<=69Then

a(6)=a(6)+1

ElseIfscore<=79Then

a(7)=a(7)+1

ElseIfscore<=89Then

a(8)=a(8)+1

ElseIfscore<=100Then

a(9)=a(9)+1

EndIf

Nexti

Print

Print"输出各分数段统计结果如下:

"

Print"<60人数";a(5)

Print"60~69人数";a(6)

Print"70~79人数";a(7)

Print"80~89人数";a(8)

Print"90~100人数";a(9)

'方法2

Dima(0To10)AsInteger'定义a数组存放各分数段统计结果

n=Val(InputBox("输入学生人数"))

Fori=1Ton'数组a赋值

score=Val(InputBox("输入学生成绩"))

Printscore;

m=score\10'构造m与数组a元素下标对应

Ifm<6Then

a(5)=a(5)+1

ElseIfm<7Then

a(6)=a(6)+1

ElseIfscore<8Then

a(7)=a(7)+1

ElseIfscore<9Then

a(8)=a(8)+1

ElseIfscore<=10Then

a(9)=a(9)+1

EndIf

Nexti

Print

Print"输出各分数段统计结果如下:

"

Print"<60人数";a(5)

Print"60~69人数";a(6)

Print"70~79人数";a(7)

Print"80~89人数";a(8)

Print"90~100人数";a(9)

'方法3

Dima(0To10)AsInteger'定义a数组存放各分数段统计结果

n=Val(InputBox("输入学生人数"))

Fori=1Ton'数组a赋值

score=Val(InputBox("输入学生成绩"))

Printscore;

m=score\10'构造m与数组a元素下标对应

a(m)=a(m)+1'm对应的分数段数组元素累加

Nexti

Fori=0To5'<60分的分数段数组元素累加

s=s+a(i)

Nexti

Print

Print"输出各分数段统计结果如下:

"

Print"<60人数";s

Print"60~69人数";a(6)

Print"70~79人数";a(7)

Print"80~89人数";a(8)

Print"90~100人数";a(9)

第4题

身份证号码数字编码表

'方法1

DimIDAsString'定义ID存放身份证号码

Dima(0To16)'定义a数组存放身份证号码数字

Dimw()'定义w数组存放加权因子

Dimy()'定义y数组存放第18位编码表校验码

w=Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2)'a数组赋值

y=Array(1,0,x,9,8,7,6,5,4,3,2)'b数组赋值

ID=InputBox("输入身份证号码")

n=Len(ID)'计算身份证号码长度

Fori=1Ton'输出数组a

Char=Mid(ID,i,1)'获得身份证号码每一位字符

a(i-1)=Val(Char)'将身份证号码字符转化为数值

s=s+a(i-1)*w(i-1)'计算权求和sum(ai*wi)

Nexti

y18=sMod11'计算模y=mod(s,11)

Printy(y18)'输出校验码

第5题

'方法1

Dima()'定义a数组用于存放m*n矩阵数据

m=Val(InputBox("输入行数没m"))

n=Val(InputBox("输入列数n"))

ReDima(1Tom,1Ton)

Fori=1Tom'数组a赋值

Forj=1Ton

a(i,j)=Int(Rnd()*100)

Nextj

Nexti

Fori=1Tom'输出a数组

Forj=1Ton

Printa(i,j);

Nextj

Print

Nexti

Print

s1=0's1存放所有元素的和

Fori=1Tom'求所有元素的和

Forj=1Ton

s1=s1+a(i,j)'所有元素累加

Nextj

Nexti

s2=0's2存放非四周的所有元素和

Fori=2Tom-1'求除去四周的所有元素的和

Forj=2Ton-1

s2=s2+a(i,j)'非四周元素累加

Nextj

Nexti

s=s1-s2'求四周元素的和

Print"四周元素和为:

";s

'方法2

Dima()'定义a数组用于存放m*n矩阵数据

m=Val(InputBox("输入行数没m"))

n=Val(InputBox("输入列数n"))

ReDima(1Tom,1Ton)

Fori=1Tom'数组a赋值

Forj=1Ton

a(i,j)=Int(Rnd()*100)

Nextj

Nexti

Fori=1Tom'输出a数组

Forj=1Ton

Printa(i,j);

Nextj

Print

Nexti

Print

s1=0's1存放第一行所有元素的和

s2=0's2存放最后一行所有元素的和

Forj=1Ton'求第一行、最后一行元素的和

s1=s1+a(1,j)'第一行所有元素累加

s2=s2+a(m,j)'最后一行所有元素累加

Nextj

s3=0's3存放第一列、最后一列元素和

Fori=2Tom-1'求第一列、最后一列除去第一行、最后一行元素的和

s3=s3+a(i,1)+a(i,n)'第一列、最后一列元素累加

Nexti

s=s1+s2+s3'求四周元素和

Print"四周元素和为:

";s,s1,s2,s3

第6题

'方法1基本处理

Dima()AsInteger'定义a数组用于存放数据

n=Val(InputBox("输入行数n"))

ReDima(1Ton,1Ton)'定义a数组大小(行列数)

Fori=1Ton'数组每行赋初值

a(i,1)=1'数组第1列元素赋值、

a(i,i)=1'对角线元素赋值

Nexti

Fori=3Ton'数组元素计算赋值

Forj=2Toi-1

a(i,j)=a(i-1,j-1)+a(i-1,j)

Nextj

Nexti

Fori=1Ton'输出多行

Forj=1Toi'输出一行

Printa(i,j);

Nextj

Print

Nexti

'方法2三角形格式输出

Dima()AsInteger'定义a数组用于存放数据

n=Val(InputBox("输入行数n"))

ReDima(1Ton,1Ton)'定义a数组大小(行列数)

Fori=1Ton'数组每行赋初值

a(i,1)=1'数组第1列元素赋值、

a(i,i)=1'对角线元素赋值

Nexti

Fori=3Ton'数组元素计算赋值

Forj=2Toi-1

a(i,j)=a(i-1,j-1)+a(i-1,j)

Nextj

Nexti

Fori=1Ton'输出多行

Forj=1Toi'输出一行

PrintTab(40-i*3+j*6);a(i,j);

Nextj

Print

Nexti

'方法3算法优化,三角形格式输出

Dima()AsInteger'定义a数组用于存放数据

n=Val(InputBox("输入行数n"))

ReDima(1Ton,1Ton)'定义a数组大小(行列数)

Fori=1Ton

Forj=1Toi

Ifj=1Ori=jThen

a(i,j)=1'数组第1列元素赋值、对角线元素赋值

Else

a(i,j)=a(i-1,j-1)+a(i-1,j)'数组其他元素赋值

EndIf

PrintTab(40-i*3+j*6);a(i,j);'输出数组元素

Nextj

Print

Nexti

补充习题

第1题

设有如下两组数据:

(1)1,3,5,2,4,18,50,25

(2)5,27,30,35,60,41,87,33

编写一个程序,把上面两组数据分别读入两个数组中,然后把两个数组中对应下标的元素相加,即1+5,3+27,……,25+33,并把相应的结果放入第三个数组中,最后输出第三个数组的值。

'方法1

Dima(),b(),c()'定义a,b数组用于存放两组数据,C数组存放a,b相加的结果

a=Array(1,3,5,2,4,18,50,25)'a数组赋值

b=Array(5,27,30,35,60,41,87,33)'b数组赋值

n=UBound(a)'计算数组最大下标

Fori=0Ton'输出数组a

Printa(i);

Nexti

Print

Fori=0Ton'输出数组b

Printb(i);

Nexti

Print

ReDimc(0Ton)'定义(确定)数组c实际大小

Fori=0Ton

c(i)=a(i)+b(i)

Nexti

Fori=0Ton'输出数组c

Printc(i);

Nexti

Print

'方法2

Dima(0To7),b(0To7),c()'定义a,b数组存放两组数据,C数组存放a,b相加的结果

n=UBound(a)'计算数组最大下标

Fori=0Ton'数组a赋值、输出

a(i)=Val(InputBox("输入数据"))

Printa(i);

Nexti

Print

Fori=0Ton'输出数组b

b(i)=Val(InputBox("输入数据"))

Printb(i);

Nexti

Print

ReDimc(0Ton)'定义(确定)数组c实际大小

Fori=0Ton

c(i)=a(i)+b(i)

Nexti

Fori=0Ton'输出数组c

Printc(i);

Nexti

Print

第2题

有一个n×m的矩阵,编写程序,找出其中最大的那个元素所在的行和列,并输出其值及行号和列号。

'方法1

Dima()'定义a,b数组用于存放两组数据,C数组存放a,b相加的结果

x=Val(InputBox("输入行数"))

y=Val(InputBox("输入列数"))

ReDima(1Tox,1Toy)

Fori=1Tox'数组a赋值

Forj=1Toy

a(i,j)=Int(Rnd()*100)

Nextj

Nexti

Fori=1Tox'输出a数组

Forj=1Toy

Printa(i,j);

Nextj

Print

Nexti

Print

Max=a(1,1)'设最大数为a(1,1)

row=1'则最大数行下标为1

col=1'则最大数列下标为1

Fori=1Tox'求最大数max及其所在的行row、列col

Forj=1Toy

IfMax

Max=a(i,j)

row=i

col=j

EndIf

Nextj

Nexti

Print"最大数为:

";Max;"行为:

";row;"列为:

";col

'方法2

Dima()'定义a,b数组用于存放两组数据,C数组存放a,b相加的结果

x=Val(InputBox("输入行数"))

y=Val(InputBox("输入列数"))

ReDima(1Tox,1Toy)

Fori=1Tox

Forj=1Toy

a(i,j)=Int(Rnd()*100)'数组a赋值

Printa(i,j);'数组a输出

Nextj

Print

Nexti

Max=a(1,1)'设最大数为a(1,1)

row=1'则最大数行下标为1

col=1'则最大数列下标为1

Fori=1Tox'求最大数max及其所在的行row、列col

Forj=1Toy

IfMax

Max=a(i,j)

row=i

col=j

EndIf

Nextj

Nexti

Print"最大数为:

";Max;"行为:

";row;"列为:

";col

第3题

某数组中有10个元素,元素的值由键盘输入,要求将前5个元素与后5个元素对换。

即第1个元素与第10个元素互换,第2个元素与第9个元素互换……。

请输出数组中原来各元素的值和对换后各元素的值。

'方法1

Dima(1To10)'定义a数组存放10个数据

Fori=1To10'数组a赋值

a(i)=Int(Rnd()*100)

Nexti

Fori=1To10'输出数组a

Printa(i);

Nexti

Print

'数组元素数值交换

Fori=1To5

t=a(i)

a(i)=a(11-i)

a(11-i)=t

Nexti

Fori=1To10'输出交换后a数组各元素值

Printa(i);

Nexti

Print

'方法2

Dima(1To10)'定义a数组存放10个数据

Fori=1To10'数组a赋值

a(i)=Int(Rnd()*100)

Printa(i);'输出数组a

Nexti

Print

'数组元素数值交换

Fori=1To5

t=a(i)

a(i)=a(11-i)

a(11-i)=t

Nexti

Fori=1To10'输出交换后a数组各元素值

Printa(i);

Nexti

Print

'方法3

Dima(1To10)'定义a数组存放10个数据

Fori=1To10'数组a赋值

a(i)=Val(InputBox("输入数据"))

Printa(i);'输出数组a

Nexti

Print

'数组元素数值交换

Fori=1To5

t=a(i)

a(i)=a(11-i)

a(11-i)=t

Nexti

Fori=1To10'输出交换后a数组各元素值

Printa(i);

Nexti

Print

'方法4任意多个元素值交换

Dima()

n=Val(InputBox("输入数据个数"))

ReDima(1Ton)'定义a数组存放n个数据

Fori=1Ton'数组a赋值

a(i)=Int(Rnd()*100)

Printa(i);'输出数组a

Nexti

Print

'数组元素数值交换

Fori=1Ton\2

t=a(i)

a(i)=a(11-i)

a(11-i)=t

Nexti

Fori=1Ton'输出交换后a数组各元素值

Printa(i);

Nexti

Print

第4题

有一个数列,前两项为1,从第三项开始,每一项都是前现两项之和,输出该数列前30项。

Dima(1To30)AsLong'定义a数组存放数列各项

a

(1)=1

a

(2)=1

Fori=3To30'计算数列各项

a(i)=a(i-1)+a(i-2)

Nexti

Fori=1To30'输出数列各项

Printa(i);

Nexti

第5题

随机产生15个不重复的A~Z之间的大写字母,存放在字符数组中。

提示:

(1)要产生A~Z的字符,通过Rnd函数产生[65,90]两位随机整数,再通过Chr函数转换成为相应字符。

(2)要产生不重复字符,需要将每次产生的字符同数组中已有的字符进行比较,若有相同的字符,则重新产生。

Dima(1To15)AsString'定义a数组存放产生的字符

a

(1)=Chr(Int(Rnd()*(90-65+1)+65))'产生第一个字符

Fori=2To15'产生其它的字符,比较相同后重新产生

a(i)=Chr(Int(Rnd()*(90-65+1)+65))'产生一个新的字符,

Forj=1Toi-1'新产生的字符与其前产生的字符比较

Ifa(i)=a(j)Then'若与其前产生的字符相同

i=i-1'则i值减1,达到重新产生的目的

ExitFor

EndIf

Nextj

Nexti

Fori=1To15'输出数组

Printa(i);

Nexti

Print

第6题

将从键盘上输入的一个数插入到数组指定位置。

提示:

在数组中插入元素的过程是:

(1)输入插入的位置及要插入的数;

(2)增加数组元素个数;

(3)将待插入位置以后的数逐一后移一位,腾出插入位置;

(4)在

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

当前位置:首页 > 解决方案 > 其它

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

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