I=8
DO WHILE I<=10 STORE 1 TO T,J
DO WHILE J<=I T=T*J J=J+1 ENDDO S=S+T I=I+1 ENDDO ?S RETURN
六.写程序结果(每题4分,共20分) 1. 有Visual Basic程序: Private Sub Form_Click()
Dim i As Integer,j As Integer i=10 Do
i=i+j
for j=10 to i step -3 i=i+j next j
Loop While i<50 Print i;j End Sub
2. 有Visual Basic程序:
Private Sub procl(x As Integer,y As Integer,z As Integer) x=3*z y=2*z z=x+y End Sub
Private Sub Command1_Click()
Dim x As Integer,y As Integer,z As Integer x=1:y=2:z=3 Call procl(x,x,z) Print x;x;z Call procl(x,y,y)
Print x;y;y End Sub
3. 有以下Visual FoxPro程序: CLEAR I=20 t=0
do while I>=1 j=2
do while j<= I-1 if int(I/j)= I/j exit endif j=j+1 enddo if j=I t=t+1 endif I=I-1 enddo ?t return
4. 有如下Visual FoxPro程序
主程序:MAIN.PRG
PUBLIC Z STORE 1 TO I,M X1=\X2=\Y=0
DO WHILE I<=3
X=VAL(LTRIM(X1)+REPLICATE(X2,I)) J=1
DO WHILE J<=2 DO EXA WITH X Y=Y+Z J=J+1
ENDDO M=M+J
?\,4)+\ ??\,4)+\ ??\,6) I=I+1 ENDDO RETURN 子程序:EXA.PRG PARAMETERS F
IF MOD(F,4)=0 Z=MOD(F,4)
ELSE Z=INT(F/4)
ENDIF
RETURN
运行上面的程序,显示的结果为: 5.有学生成绩表XSCJ.DBF,字段为:学号(C,10),姓名(C,8),数学(N,3,0),英语(N,3,0),记录数据如下:
Record# 学号 姓名 数学 英语 1 0811060101 肖天海 82 91 2 0811060202 王岩盐 63 95 3 0811060203 刘星魂 75 86 4 0811060105 张月新 94 73 5 0811060208 李明玉 78 67 其中:学号的前8位为班级编号。 有如下Visual FoxPro程序: CLEAR
SELECT * FROM XSCJ ORDER BY 学号 INTO DBF CJ USE CJ
DO WHILE .NOT. EOF()
STORE 0 TO PYSCJ,PSJCJ,YM,SM BJBM=SUBSTR(学号,1,8) NBJ=0 YM=英语 SM=数学
DO WHILE SUBSTR(学号,1,8)=BJBM
IF 数学 PYSCJ=PYSCJ+英语 PSJCJ=PSJCJ+数学 NBJ=NBJ+1 SKIP ENDDO ? BJBM,\:\,PYSCJ/NBJ,PSJCJ/NBJ,YM,SM ENDDO CLOSE DATABASE 运行上面的程序,显示的结果为: 七.程序改错(每题5分,共10分) 1.输入一个字符串,将所有的小写字母都转换为大写字母,输入的字符串以#号结尾。 Private Sub Form_Click() Dim s1 As String, s2 As String, i As Integer, t As String s1 = InputBox(\输入字符串,#号结束\ i = 1 s2 = Mid(s1, i, 1) While t <> \ If t >= \ s2 = s2 + t i = i + 1 t = Mid(s1, i, i) Wend Print \新字符串为:\End Sub 2.下面的程序是将一个十进制整数转换成二进制数,转换后按位放到一维数组a中,然后输出。如输入一个数据8,将输出1 0 0 0。程序中有两处错误,请改正。 Dim a(10) As Integer Dim k As Integer Dim yu As Integer Dim i As Integer i = 1 k = InputBox(\Do While k <> 0 yu = k/2 a(i) = yu k = k \\ 2 i = i + 1 Loop For yu = i To 1 Step -1 Print a(yu); Next yu 八、 程序填空(每空5分,共35分) 1.单击窗体后输入1个不小于6的正整数,然后输出该数所有的质数因子(如输入6则输出“ 2 3”,输入60则输出“ 2 2 3 5”,等等)。 Private Sub f(k As Integer) Dim i As Integer i = 2 Do While k > 1 If ____________ Then k = k / i: Print i; Else i = i + 1 Loop End Sub Private Sub Form_Click() Dim n As Integer Do n = InputBox(\ Loop ______________ Call f(n) Print End Sub 2. 单击“读文件”按钮将文本文件读入并逐行在列表框控件List1中显示;然后单击“分解”按钮将List1每行中的英文字母、其他字符分别显示在List2、List3各行中。 运行结果如下图所示。 Private Sub Command1_Click() '读文件 Dim s As String Open \ While Not EOF(1) Line Input #1, s: List1.AddItem s Wend Close #1 End Sub Private Sub Command2_Click() '分解 Dim i As Integer, n As Integer, s1 As String, s2 As String For i = 1 To_______________ n = Len(List1.List(i - 1)) ReDim a(n) As String * 1 For j = 1 To n a(j) = Mid(List1.List(i - 1), j, 1) Next j s1 = \ For j = 1 To n If a(j) >= \Else s2 = s2 + a(j) Next j List2.AddItem s1 List3.AddItem s2 Next i End Sub 3.在Visual FoxPro中,某数据库有以下三个表: “选课”表:学号(C,6),课程号(C,8),成绩(N,5,1)内容见下表。 “课程”表:课程号(C,8),课程名(C,10) 建立表单,运行时实现以下功能: (1) 选择学号、课程号,可查询该生该单科成绩及名次(假设分数均不相同) (2) 可查询该生所选考试科目中成绩合格的科目名称 “查询”按钮的CLICK事件代码如下: xh=thisform.combo1.value kh=thisform.combo2.value x=thisform.commandgroup1.value __________________________ do case case x=1 sele 成绩 from 选课 where 学号=xh and 课程号=kh into array ax sele 学号,成绩 from 选课 where 课程号=kh order by 成绩 desc into table temp1 use temp1 loca for 学号=xh do while not bof() mc=mc+1 skip -1 enddo thisform.text1.value=str(ax,5,1)+\名次:\ case x=2 sele 选课.学号,课程名,成绩 from 选课,课程 ____________________________ use temp2 k=space(0) do while not eof() if 成绩>=60 k=k+课程名+space(2) endif skip enddo _________________________________ endcase