①根据考生的考试总分从高到低依次对考生的填报志愿进行投档;
②每位考生可填三个志愿学校,轮到该考生投档时依次对其三个志愿进行投档,若第一志愿学校还有剩余招生名额,就被第一志愿学校录取,结束该考生的投档,否则需对其后续志愿学校进行同样的投档操作,若该考生所填的所有志愿学校都没有剩余招生名额,则该考生无法被任何学校录取,该考生的投档结束。
③当所有学校都已完成计划招生数时,停止投档,录取结束。
编写 VB 程序,实现上述“平行志愿”投档录取的功能,单击“读取考生数据”按钮 Command1, 则从数据库中获取所有考生的成绩、志愿信息以及每个学校的计划招生数,单击“投档录取”按钮 Command2,开始进行投档录取, 并在列表框 List1 中输出每个学校的计划招生数、实际招生数、录取分数线和最低录取名次信息,程序运行界面如图所示。请回答下列问题:
Const schCnt = 5 '学校数量
Const stuMaxCnt = 10000 '最多考生人数
Dim zsCnt(1 To schCnt) As Integer '存储每个学校的计划招生人数
Dim zsCnt2(1 To schCnt) As Integer '存储每个学校的实际招生人数
Dim a(1 To stuMaxCnt) As Single '存储考生总分成绩
Dim b(1 To stuMaxCnt * 3) As Integer '存储考试志愿,每个考生有3个志愿,每个志愿为学校编号
Dim stuCnt As Integer '实际考生总人数
Private Sub Command1_Click()
'从数据库中读取所有考生的总分和志愿信息存储到数组a和数组b中(第1个考生总分存储到a(1),第1个考生的3个志愿分别存储到b(1)、b(2)、b(3)中, …),然后按总分对数组a和数组b进行降序排序,总分相同时,需根据各科成绩决定排序先后,但名次相同,考生总人数存储到stuCnt变量中;
'读取每个学校的计划招生数,存储到数组zsCnt中;
'以上功能代码略
End Sub
Private Sub Command2_Click()
Dim sch As Integer '学校代码,用1~5中的一个数字表示某学校代码
Dim i As Integer, j As Integer, finished As Integer, prevScore As Single
Dim stuMc(1 To stuMaxCnt) As Integer
Dim MinScore(1 To schCnt) As Single
Dim MinMc(1 To schCnt) As Integer
finished = 0: i = 1
prevScore = -1
Do While
If a(i) = prevScore Then
stuMc(i) = stuMc(i - 1)
Else
End If
prevScore = a(i)
For j = 1 To 3
If zsCnt2(sch) < zsCnt(sch) Then
zsCnt2(sch) = zsCnt2(sch) + 1
MinScore(sch) = a(i)
MinMc(sch) = stuMc(i)
Exit For
End If
Next j
finished = 0
For j = 1 To schCnt
If zsCnt2(j) = zsCnt(j) Then
finished = finished + 1
End If
Next j
i = i + 1
Loop
'在List1中输出每所学校的代码、计划招生数、实际招生数、录取分数线、最低录取名次,代码略
End Sub
Const n =6
Dim a(1 To n * n) As Integer
Private Sub Form_Load() '产生n*n个数组元素,每行按n个数显示在list1中
For i = 1 To n * n
a(i) = Int(Rnd * 90) + 10
s = s + Str(a(i))
IfThen
List1.AddItem s
s = ""
End If
Next i
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer, w As Integer, s As String
For i = 1 To n * n
k = i
For j = k + n To
If a(k) > a(j) Then k = j
Next j
If Then t = a(k): a(k) = a(i): a(i) = t
Next i
'将排序后数组a的元素,按每行n个数显示在list2中,代码略
End Sub
s ="waste" : n = Len(s)
s1 = Text1.Text : flag = False
For i=1Ton
If Mid(s,i,1) = Mid(s1, 1,1) Then
flag = True
For j = 2 To Len(s1)
If Mid(s1, j, 1)<>Mid(s, (j+i-2) Mod n + 1, 1) Then flag = False: Exit For
Next j
If flag Then Exit For
End If
Next i
执行该程序段后,若flag变量值为True,则文本框Text1中输入的内容不可能的是( )
Function Stod(ch As String)As String
Dim n As Integer, i As Integer
Dims As String, st As String
For i=1 To Len(ch)
s=Mid(ch, i, 1)
If s>="a" Ands<="z" Then
s=Chr(Asc(s)-32)
End If
______________
Stod=st
Next i
End Function
Private Sub Command1_Click()
Dim article, f As String, s1, s2 As String
Dim i As Integer, m As Integer
Dim flag As Boolean
article=Stod(Text1. Text):f=Stod(Text2. Text)
m=0:flag=False
For i=1 To Len(article)
y=Mid(article, i, 1)
If y>="A"Andy<="Z"Then
If flag=False Then
s1=
s2=Mid(article, i+Len(f), 1)
If s1=f And Not(s2>="A" And s2<="Z") Then
m=m+1
End If
flag=True
End If
Else
flag=False
End If
Next i
Label2.Caption="单词"+Text2.Text+“出现"+Str(m)+"次"
End Sub
Private Sub Command1_Click( )
Dim s1, s2, result, t As String
Dim span, jw As Integer
s1=Text1. Text:s2=Text2. Text
span=Len(s1)-Len(s2)
If span<0 Then
t=s1:s1=s2:s2=t
span= ①
End If
For i=1 To span
s2="0"+s2
Next i
jw=0:result=" "
For i= ② To 1 Step-1
x=Val(Mid(s1, I, 1))+Val(Mid(s2,i,1))+jw
jw=x\2
result=Str(x Mod 2)+result
Next i
If jw=1 Then result="1"+result
Text3. Text=result
End Sub
以3×3数据块为例,原矩阵和转置矩阵的结果如图所示。
小明发现对这个矩阵进行转置后,主对角线上的数字没有发生变化,所以决定编写VB程序随机生成一个n×n的矩降再试一下。程序实现的功能如下:在文本框Text1中输入整数n(2≤n≤10),单击“生成矩阵”按钮Command1,生成n2个10到99之间(包含10和99)的随机整数,并以n行、n列矩阵的形式显示在列表框List1中,将转置后的矩阵也显示在List1中。再单击“主对角线”按钮Command2,则在标签Label1中输出两矩阵主对角线上的元素,运行界面如图所示,程序代码如下,请在画线处填入合适的代码。
Const max=100
Dim n As Integer
Dim a(1 To max)As Integer
Dim b(1 To max)As Integer
Private Sub Command1_Click( )
n=Val(Text1.Text)
For i=1 To n*n
a(i)= ①
Next i
p=1
For i=1 To n*n
b(i)=a(p)
If i Mod n=0 Then
p=p-n*(n-1)+1
Else
②
End If
Next i
List1.Clear
List1. AddItem Str(n)+"*"+Str(n)+"方阵”
Call Output(a( ))
List1.AddItem"转置矩阵"
Call Output(b( ))
End Sub
Private Sub Command2_Click( )
Label1.Caption="原矩阵":L.abel2.Caption="转置矩阵"
For i=1 To n
Label1.Caption=Label1.Caption & Str(a(i+(i-1)*n))
Label2.Caption=label2.Caption & Str(b(i+(i-1)*n))
Next i
End Sub
Sub Output(a()As Integer)
Dim line As String
line=""
For i=1 To n*n
If i>1 And i Mod n=1 Then
List1. AddItem line
line=Str(a(i))
Else
③
End If
Next i
List1. AddItem line
End Sub
以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②;③。
dic={"Name":"admin","Password":"j1l234y"}
user-input("请输入用户名:")
psd-input("请输入密码:")
if
print("用户名或密码错误!")
else:
print(" 登录成功!")
配股除权价=(除权登记日收盘价+配股价×每股配股比例)/( 1+每股配股比例)
全额参与配股的最大配售量计算规则如下:
1)该股的配售比例是0.19。也就是说,假如你有10000股该股股份,最大配售量即为10000×0.19=1900(股)。
2)如果所获配股份额不足1股,那么0.65股及以上的为1股,0.65股以下的为0股。
回答下列问题:
flag=False
pgj=7.02 #配股价
bili=0.19 #每股配股比例
spi-flatinput("请输入除权登记日收盘价:")
num =floatinput("请输入持有的股份数:")
cqj = ① #配股除权价
maxps= num*bili #最大配售量
if ② :
flag=True
if flag :
print("配股除权价", cqj,"最大配售量:" ,int(maxps)+1)
else:
print("配股除权价:", cq,"最大配售量:" ,nt(maxps))
① ②
①输入各点的坐标(最后一个点的坐标后不加逗号),存人变量a中;
②将原点坐标加到坐标序列a的最前端;
③以逗号为界从a中取出各点的坐标,存入列表b中;其中列表b中的第一个和第二个数字为第一个点的x坐标和y坐标,第三个和第四个数字为第二个点的x坐标和y坐标,以此类推;
④计算折线长度。若以b[]标记为相邻两个点中前者的x坐标,则b[i+2]为后者的x坐标,b[i+1]为前者的y坐标,b[i+3]为后者的y坐标。i最小值为0,最大值为len(b)-4,步长为2。运用for语句求折线长度。
程序如下:
from math import sqrt
a=input("请输入各点的坐标:")
① #补上原点坐标
b=a.splt(",") #取出各点的坐标
if len(b) %2== 1:
print("输入的坐标有误")
else:
s=0
for i in range(0, len(b)-2, ② ):
s=s+sqt((int(b[i+2])-int(b[i])* *2+(int(b[i+3])-int(b[i+1])**2)
else:
print("折线长度为:", s)
b=5
If(a<b):
Print(“a*b”)
上面程序运行结果是( )
s1 = Text1.Text: s2 = "" n = Len(s1)
i = 1: j = n
Do While i <= j
If i Mod 2 = 1 Then
s2 = s2 + Mid(s1, j, 1)
Else
s2 = Mid(s1, n - j + 1, 1) + s2
End If
i = i + 1
j = j - 1
Loop
Text2.Text = s2
在文本框Text1中输入“python”,执行该程序段后,文本框Text2中显示的是( )
它的可以用哪个流程图表达( )。
Const m = 6, n = 8, wt = 200
Dim d(1 To m + n) As String, a(1 To m + n) As Integer
Private Sub Form_Load()
'读取m + n 个人的体重及去向数据存入d 数组,代码略
End Sub
Private Sub Command1_Click()
Dim i As Integer, p As Integer, q As Integer, s As String
Dim num As Integer, num1 As Integer, num2 As Integer
'以下代码实现从d 数组中提取每个人的体重数据,根据去向分段存入a 数组
p = 1 : q =
For i = 1 To m + n
s = Mid(d(i), 1, Len(d(i)) - 1)
If Mid(d(i), , 1) = "W" Then
a(p) = Val(s): p = p + 1
Else
a(q) = Val(s): q = q + 1
End If
Next i
num1 = GetNum(1, m)
num2 = GetNum(m + 1, m + n)
If num1 > num2 Then num = num1 Else num = num2
Label1.Caption = "过河需要最少往返次数:" + Str(num)
End Sub
Function GetNum(head As Integer, tail As Integer) As Integer
Dim i As Integer, j As Integer, k As Integer, cnt As Integer, t As Integer
'以下代码实现对数组a 降序排序
i = head
Do While i < tail
k = i: i = tail
For j =
If a(j - 1) < a(j) Then
t = a(j): a(j) = a(j - 1): a(j - 1) = t
i = j
End If
Next j
Loop
cnt = 0: i = head: j = tail
Do While i <= j
If Then j = j - 1
cnt = cnt + 1: i = i + 1
Loop
GetNum = cnt
End Function
count = 0: n=7: i= 1
Do While i<=n
If a(i)> a(i+1)Then
count = count + 1
t = a(i): a(i) = a(i + 1): a(i+1) =t
End If
If i=n Then i=0:n=n-1
i=i+1
Loop
Text1.Text = Str (count)
数组元素a(1)到a(8)的值依次是“15,2,1,17,19,14,25,26”,执行该程序段后,文本框Text1中显示的是( )
警察抓小偷,有四个嫌疑人甲乙丙丁,其中一人是小偷。甲说“不是我”,乙说“是丙”,丙说“是丁”,丁说“丙在冤枉人”。他们中只有一人说了假话,编程判断谁是小偷。(注:在Python运算中,True的值为1,False的值为0)
persons=[‘甲’,‘乙’,‘丙’, ‘丁’] for thief in persons: flag =(thief!=‘甲’)+(thief==‘丙’)+(thief ==‘丁’)+(thief!=‘丁’) if flag == 3: print(thief) |
运行结果是:
第一步:将身份证号码的第1位数字与7相乘;将身份证号码的第2位数字与9相乘;将身份证号码的第3位数字与10相乘;将身份证号码的第4位数字与5相乘;将身份证号码的第5位数字与8相乘;将身份证号码的第6位数字与4相乘;将身份证号码的第7位数字与2相乘;将身份证号码的第8位数字与1相乘;将身份证号码的第9位数字与6相乘;将身份证号码的第10位数字与3相乘;将身份证号码的第11位数字与7相乘;将身份证号码的第12位数字与9相乘;将身份证号码的第13位数字与10相乘;将身份证号码的第14位数字与5相乘;将身份证号码的第15位数字与8相乘;将身份证号码的第16位数字与4相乘;将身份证号码的第17位数字与2相乘。
第二步:将第一步身份证号码1~17位相乘的结果求和,全部加起来。
第三步:用第二步计算出来的结果除以11,这样就会出现余数为0,余数为1,余数为2,余数为3,余数为4,余数为5,余数为6,余数为7,余数为8,余数为9,余数为10共11种可能性。
第四步:如果余数为0,那对应的最后一位身份证的号码为1;如果余数为1,那对应的最后一位身份证的号码为0;如果余数为2,那对应的最后一位身份证的号码为X;如果余数为3,那对应的最后一位身份证的号码为9;如果余数为4,那对应的最后一位身份证的号码为8;如果余数为5,那对应的最后一位身份证的号码为7;如果余数为6,那对应的最后一位身份证的号码为6;如果余数为7,那对应的最后一位身份证的号码为5;如果余数为8,那对应的最后一位身份证的号码为4;如果余数为9,那对应的最后一位身份证的号码为3;如果余数为10,那对应的最后一位身份证的号码为2。
余数列表 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
校验码对照表 |
1 |
0 |
X |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
B2 某男性公民公民身份号码本体码为44052418800101001,其校验码字符值仍可按B1各步骤与方法计算如下:
=28+36+0+ 25+16+16+2+8+48+0+0+9+0+5+0+0+2=195
195÷11=17 , 即(ai×Wi)(mod 11)为8。
查表2得出校验码字符值ai为4。
该男性公民的公民身份号码为440524188001010014。
def check(s):
s1=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
s2='10X98765432'
k=0
for i in :
k=k+int(s[i])*s1[i]
return
sfz=input('请输入身份证号:')
if t !=18:
print('位数有误,请重新输入!')
else:
if sfz[-1]=='x':
sfz=sfz[:-1]+"X"
if :
print('合法身份证号')
else:
print('非法身份证号')
实现上述功能的VB程序代码如下,请回答以下问题:
Const n = 50
Dim a(1 To n) As Integer
Dim f(n + 1 To 2 * n) As Boolean
Private Sub Command1_Click()
Dim i As Integer, j As Integer
Randomize
For i = n + 1 To 2 * n
f(i) = False
Next i
For j = 1 To n
a(j) = Int(Rnd * n) + n + 1
If f(a(j)) = True Then j = j - 1 Else ①
Next j
For i = 1 To n
List1.AddItem CStr(i) + "号-" + CStr(a(i)) 'cstr 把数值类型转换为字符串类型,并去前导空格
Next i
End Sub
Private Sub Command2_Click()
Dim i As Integer, j As Integer, m1 As Integer, m2 As Integer
m1 = 0: m2 = n \ 2
For i = n + 1 To 2 * n
If ② Then
m1 = m1 + 1: a(m1) = i
Else
m2 = m2 + 1: a(m2) = i
End If
Next i
For j = 1 To n \ 2
List2.AddItem "第" + CStr(2 * j - 1) + "名" + Str( ③ ) List2.AddItem "第" + CStr(2 * j) + "名" + Str(a(n \ 2 + j))
Next j
End Sub
① ② ③
n = 0
m = 0
For i = 1 To 100
If Rnd > 0.5 Then
n = n + 1
Else
m = m + 1
Next i
……
小明仔细分析该程序段后,发现其中缺少的语句是( )
from random import randint
n=input("请输入一串数字:")
k=randint(0,len(n)) #randint用于随机生成[0,len(n)]之间的整数
for i in range(k):
for j in range(len(n)-1):
if n[j]>n[j+1]:
break
else:
n=n[:len(n)-1]
continue #continue跳过当前循环的剩余语句,直接进行下一轮循环
n=n[:j]+n[j+1:]
执行该程序段后,输入“1529”,则变量n可能是( )
import random
a= #随机产生三位正整数
flag=True
for i in range():
if a%i==0:
flag=False
if flag:
print(a,"是素数")
else:
print(a,"不是素数")