程序改错和填空题选
运行结果:13
20、设有用26个字母表示的26个表达式:A=1,B=1/(A+1),C=1/(B+2),?,Z=1/(Y+25)。试求出这26个字母中其值小于0.1的字母个数。 SET TALK OFF CLEAR LETT=1 N=0
FOR K=1 TO 26 改正:FOR K=1 TO 25 LETT=1/LETT+K 改正:LETT=1/(LETT+K) IF LETT<0.1 N=N+1 ENDIF ENDFOR ? N
SET TALK ON RETURN
运行结果:16
21、求所有符合算式AB*BA=3627的最大的两位数AB(即A*10+B)。其中A、B是1~9之间的一位整数。 SET TALK OFF CLEAR
FOR X=11 TO 99 A=INT(X/10) B=MOD(X,10)
Y=A*10+B 改正:Y=A+10*B IF X*Y=3627 EXIT ENDIF ENDFOR
? X 改正:? Y SET TALK ON RETURN
“运行结果:93\
22、设一个数列的前3项都是1,从第4项开始,每一项都是其前3项之和。试求出此数列的前25项中大于54321的项数。 SET TALK OFF CLEAR
STORE 1 TO F1,F2,F3 N=0
FOR K=1 TO 25 改正:FOR K=4 TO 25 或 FOR K=1 TO 22 F=F1+F2+F3 IF F>54321 N=N+1 ENDIF F1=F2 F2=F3
F3=F1 改正:F3=F ENDFOR ? N
SET TALK ON RETURN
“运行结果:5\
23、已知一个由分数组成的数列:1/2,3/5,8/13,21/34,?,其特点是:从其中第2个分数起,每个分数的分子都是前一分数的分子分母之和而其分母都是其分子与前一分数的分母之和。试求出此数列的前25项中其值大于0.618的项数。 SET TALK OFF CLEAR F1=1 F2=2 N=0
FOR K=1 TO 25 F=F1/F2
6
程序改错和填空题选
IF F>0.618 N=N+1 ENDIF
F1=F2 改正:F1=F1+F2 F2=F1 改正:F2=F1+F2 ENDFOR ? N
SET TALK ON RETURN
\运行结果:20\
24、回文指的是正读和反读都一样的一串字符,如121、1221。试求出[1421,4112]内所有回文数的和。 SET TALK OFF CLEAR S=0
FOR X=1421 TO 4112
A=X/1000 改正:A=INT(X/1000) B=INT((X-A*1000)/100)
C=INT((X-A*1000-B*100)/10) D=X-A*1000-B*100-C*10 IF A=D AND B=C
S=S*X 改正:S=S+X ENDIF ENDFOR ? S
SET TALK ON RETURN
\运行结果:74250\
25、求出[1234,6789]内中间两位数字之和等于首尾两位数字之积的数的个数。 SET TALK OFF CLEAR N=0
FOR X=1234 TO 6789 A=INT(X/1000)
B=INT(X-A*1000)/100 改正:B=INT((X-A*1000)/100)
C=INT(X-A*1000-B*100)/10 改正:C=INT((X-A*1000-B*100)/10) D=X-A*1000-B*100-C*10 IF B+C=A*D N=N+1 ENDIF ENDFOR ? N
SET TALK ON RETURN
\运行结果:175\
26、将大于1000且能被4和6中至少一个数整除的所有整数按从小到大顺序排列后,求前面20个数之和。 SET TALK OFF CLEAR S=0 K=0 X=1000
DO WHILE K<=20 改正:DO WHILE K<20 X=X+1
IF MOD(X,4*6)=0 改正:IF MOD(X,4)=0 OR MOD(X,6)=0 S=S+X K=K+1 ENDIF ENDDO ? S
SET TALK ON RETURN
\运行结果:20610\
7
程序改错和填空题选
27、若一个自然数恰好等于某个整数的平方,则称此数为完全平方数。如144是完全平方数,因为它等于12的平方。求[1000,9999]内所有完全平方数的和。 SET TALK OFF CLEAR S=0
FOR X=1000 TO 3000
Y=SQRT(X) 改正: Y=INT(SQRT(X)) 或改下一语句为 IF X=INT(Y)*INT(Y) IF X=Y*Y S=S+X ENDIF ENDFOR
? X 改正:? S SET TALK ON RETURN
\运行结果:43539\
28、若一个自然数恰好是它的平方的末后几位数,则称此数为自同构数。如5和76都是自同构数,因为它们的平方分别是25和5776。求[2,99999]内所有自同构数之和。(提示:若X是M位同构数,则X的平方除以10的M次方的余数就是X) SET TALK OFF CLEAR S=0
FOR X=2 TO 99999 Y=X*X
M=LEN(LTRIM(STR(X))) && 设X是M位数
IF MOD(Y,10*M)=X 改正:IF MOD(Y,10**M)=X S=S+X ENDIF ENDFOR
? Y 改正:? S SET TALK ON RETURN
运行结果:101114
29、求满足条件A*B=54321且使A+B的值最小的自然数对A、B中较大的一个数。(提示:设A<=B,当A越大时A+B越小) SET TALK OFF CLEAR C=54321
K=INT(SQRT(C)) FOR A=1 TO K
B=INT(C)/A 改正:B=INT(C/A) IF A*B=C
MAX=A 改正:MAX=B ENDIF ENDFOR ? MAX
SET TALK ON RETURN
\运行结果:953\
30、设A=123,B=541,求A/B的精确值中小数点后40位数字中数字1的个数。(提示:基于人工计算的思想) SET TALK OFF CLEAR A=123 B=541 N=0
FOR K=1 TO 40
A=A+0 改正:A=A*10 Q=INT(A)/B 改正:Q=INT(A/B) IF Q=1 N=N+1 ENDIF
A=MOD(A,B)
8
程序改错和填空题选
ENDFOR ? N
SET TALK ON RETURN
\运行结果:3\
31、求出将十进制整数98765432等值转换为二进制形式表示后其中数字1的个数。(提示:模拟人工计算的“2除取余”法) SET TALK OFF CLEAR
A=98765432 P=2
N=0 (增加一条) DO WHILE A>0 R=MOD(A,P) IF R=1
N=1 改正:N=N+1 ENDIF
A=INT(A/P) ENDDO ? N
SET TALK ON RETURN
运行结果:13
32、4087求出将十进制整数98765432等值转换为二进制形式表示后其中数字0的个数。(提示:模拟人工计算的“2除取余”法) SET TALK OFF CLEAR
A=98765432 P=2 N=0
DO WHILE A=0 改正:DO WHILE A>0 R=MOD(A,P) IF R=0
N=P+1 改正:N=N+1 ENDIF
A=INT(A/P) ENDDO ? N
SET TALK ON RETURN
运行结果:14
33、 求出将十进制整数99887766554等值转换为十六进制形式表示后其中字母C的个数。(提示:模拟人工计算的“16除取余”法) SET TALK OFF CLEAR
A=99887766554 P=16 N=0
DO WHILE A=0 R=MOD(A,P)
IF R=11 改正:IF R=12 N=N+R 改正:N=N+1 ENDIF
A=INT(A/P) ENDDO ? N
SET TALK ON RETURN
\运行结果:2\
34、对自然数A、B、C,若A
9
程序改错和填空题选
SET TALK OFF CLEAR C=25000
N=1 改正:N=0 FOR A=1 TO C
B=INT(SQRT(C*C-A*A))
IF A*A+B*B=C*C 改正:IF A*A+B*B=C*C AND A
SET TALK ON RETURN
\运行结果:5\
35、4094对自然数A、B、C,若A
FOR A=1 TO C B1=SQRT(C*C-A*A) B=INT(B1)
IF B=B1 改正:IF B=B1 AND A
SET TALK ON RETURN
\运行结果:7\
40、求方程3X-7Y=1在条件|X|<100且|Y|<40下的整数解的个数。 SET TALK OFF CLEAR N=0
FOR X=-99 TO 99 Y=INT((3*X-1)/7)
IF 3*X-7*Y=1 OR ABS(Y)<40 改正: IF 3*X-7*Y=1 AND ABS(Y)<40 N=N+X 改正:N=N+1 ENDIF ENDFOR ? N
SET TALK ON RETURN
\运行结果:26\
41、求方程3X-7Y=1在条件|X|<100且|Y|<40下的所有整数解的|X|+|Y|的最大值。 SET TALK OFF CLEAR
MAX=140 改正:MAX=0 FOR X=-99 TO 99 Y=INT((3*X-1)/7)
Z=ABS(X+Y) 改正:Z=ABS(X)+ABS(Y)
IF 3*X-7*Y=1 AND ABS(Y)<40 AND MAX>Z 改正:IF 3*X-7*Y=1 AND ABS(Y)<40 AND MAX SET TALK ON RETURN 运行结果:127 42、求100-1000内的第10个素数。(素质是指只能被1和本身整除的数) 10