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
IfMaxMax=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
IfMaxMax=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)在