《VFP程序题已改.doc》由会员分享,可在线阅读,更多相关《VFP程序题已改.doc(28页珍藏版)》请在课桌文档上搜索。
1、-程 序 设 计 题 选1、求100以最大的自然数N,使得从1开场的连续N个自然数的倒数之和小于3.5。SET TALK OFFCLEARS=0FOR N=1 TO 100 S=(S+1)/N 改正:S=S+1/N IF S=3.5 LOOP 改正:E*IT ENDIFENDFOR N-1SET TALK ONRETURN 运行结果:182、 求100以最小的自然数N,使得从1开场的连续N个自然数的倒数之和大于3.6。SET TALK OFFCLEARS=0FOR N=1 TO 100S=S+1/NIF S3.6 LOOP 改正:E*ITENDIFENDFOR NSET TALK ONRETU
2、RN运行结果:213、求50以最大的自然数N,使得从102开场的连续N个偶数之和小于3000。SET TALK OFFCLEARS=0FOR N=1 TO 50A=100+2*N S=S*A 改正:S=S+A IF S=3000 LOOP 改正:E*IT ENDIFENDFOR N-1SET TALK ONRETURN运行结果:234、求50以最小的自然数N,使得从102开场的连续N个偶数之和大于2000。SET TALK OFFCLEARS=0FOR N=1 TO 50A=102+2*N 改正:A=100+2*NS=S+AIF S2000 LOOP 改正:E*ITENDIFENDFOR NS
3、ET TALK ONRETURN运行结果:175、 求出100以使得算式1*2+2*3+N*(N+1)的值小于5000的最大的自然数N。SET TALK OFFCLEARS=0FOR N=1 TO 100A=N*(N+1)S=S+AIF S5000 E*ITENDIFENDFOR N 改正: N-1SET TALK ONRETURN运行结果:236、 求出100以使得算式1*2+2*3+N*(N+1)的值大于6000的最小的自然数N。SET TALK OFFCLEAR S=0FOR N=1 TO 100 A=N*(N+1) S=S+A IF S6000 LOOP 改正:E*IT ENDIFEN
4、DFOR NSET TALK ONRETURN运行结果:267、求出100以使得算式1+(1+2)+(1+2+N)的值小于1000的最大的自然数N。SET TALK OFFCLEARS=0T=0FOR N=1 TO 100 S=S+N T=T+S IF T1000 E*IT ENDIFENDFOR N 改正: N-1SET TALK ONRETURN运行结果:178、 求出100以最大的奇数N使得算式(1-1/2)+(1/3-1/4)+(1/N-1/(N+1)的值小于0.68。 SET TALK OFF CLEAR S=0 FOR N=1 TO 100 STEP 2 A=1/N-1/(N+1)
5、 S=S+A IF S0.68 E*IT ENDIF ENDFOR N-2 SET TALK ON RETURN 运行结果:359、*国在2000年时人口总数为1亿,假设以每年3%的速度递增,试求出至少要到哪一年该国人口总数才会翻一翻。 SET TALK OFF CLEAR S=1 FOR N=2001 TO 2100 S=S*1.03 IF S=2 改正:IF S=2 LOOP 改正:E*IT ENDIF ENDFOR N SET TALK ON RETURN 运行结果:20249、设等比数列:1,2,4,8,。求使得此数列的前N项之和大于100000的最小的自然数N。 SET TALK O
6、FF CLEAR A=1 S=1 改正:S=0 FOR N=1 TO 100 S=S+A IF S100000 E*IT ENDIF A=2+A 改正:A=A*2 ENDFOR N SET TALK ON RETURN 运行结果:1710、设等比数列:1,2,4,8,。求使得此数列的前N项之和小于2345678的最大的自然数N。 SET TALK OFF CLEAR A=1 S=0 FOR N=1 TO 100 S=S+A IF S=2345678 E*IT ENDIFA=2+A改正:A=A*2 ENDFOR N改正: N-1 SET TALK ON RETURN 运行结果:2111、求出45
7、678的所有非平凡因子即除1和它本身以外的约数中是奇数的因子个数。 SET TALK OFF CLEAR A=45678 N=0 FOR B=3 TO A STEP 2 IF MOD(B,A)=0 改正:IF MOD(A,B)=0 N=N+1 ENDIF ENDFOR B 改正: N SET TALK ON RETURN 运行结果:712、求出20677和42067的最大公约数。 SET TALK OFF CLEAR A=20677 B=42067 FOR D=1 TO A IF MOD(A,D)=0 AND MOD(B,D)=0MA*=B改正:MA*=D ENDIF ENDFOR D改正:M
8、A* SET TALK ON RETURN 运行结果:71313、求前1,100能被6或8整除的所有自然数的平方根的和将第1位小数四舍五入,结果只保存整数。 SET TALK OFF CLEAR S=0 FOR N=1 TO 100 IF MOD(N,6)=0 AND MOD(N,8)=0改正:IF MOD(N,6)=0 OR MOD(N,8)=0S=SQRT(S+N)改正:S= S+SQRT(N) ENDIF ENDFOR ROUND(S,0) SET TALK ON RETURN 运行结果:16214、求所有符合算式AB*BA=2701的最小的两位数AB即A*10+B。其中A、B是19之间
9、的一位整数。 SET TALK OFF CLEAR FOR *=11 TO 99 A=*/10改正:A=INT(*/10) B=MOD(*,10)Y=10*A+B改正:Y=10*B+A IF *Y=2701 E*IT ENDIF ENDFOR * SET TALK ON RETURN 运行结果:3715、数列:1,2,4,7,11,16,,其规律是相邻两项之差依次是1,2,3,4,5,。试求出此数列于5000的最小的项。 SET TALK OFF CLEAR A=1 FOR N=0 TO 1000 A=A+N IF A5000 LOOP 改正:E*IT ENDIF ENDFOR N改正: A
10、SET TALK ON RETURN 运行结果:505116、数列:1,2,4,7,11,16,,其规律是相邻两项之差依次是1,2,3,4,5,。试求出此数列中小于6000的最大的项。 SET TALK OFF CLEAR A=0改正:A=1 FOR N=0 TO 1000 IF A+N6000 E*IT ENDIF A=A+N ENDFOR A SET TALK ON RETURN 运行结果:599617、数列F(N):F(1)=1,F(2)=4,当N=3,4,5,时,F(N)=3*F(N-1)-F(N-2)。试求出100以最小的自然数N使得此数列的第N项大于87654321。 SET TA
11、LK OFF CLEAR DIMENSION F(100) F(1)=1 F(2)=4 FOR N=3 TO 100 F(N)=3*F(N-1)-F(N-2)IF F(N)87654321LOOP改正:E*IT ENDIF ENDFOR N SET TALK ON RETURN 运行结果:2018、求出100以最大的自然数N,使得从1开场的连续N个自然数的立方之和小于999999。 SET TALK OFF CLEAR S=0 FOR N=1 TO 100 A=N*N*N S=S+A IF S999999改正:IF S678 E*IT ENDIF ENDFOR NSET TALK ONRETU
12、RN运行结果:1320、设有用26个字母表示的26个表达式:A=1,B=1/(A+1),C=1/(B+2),Z=1/(Y+25)。试求出这26个字母中其值小于0.1的字母个数。SET TALK OFFCLEARLETT=1N=0FOR K=1 TO 26改正:FOR K=1 TO 25LETT=1/LETT+K改正:LETT=1/(LETT+K) IF LETT54321 N=N+1 ENDIF F1=F2 F2=F3 F3=F1改正:F3=FENDFOR NSET TALK ONRETURN运行结果:523、一个由分数组成的数列:1/2,3/5,8/13,21/34,其特点是:从其中第2个分
13、数起,每个分数的分子都是前一分数的分子分母之和而其分母都是其分子与前一分数的分母之和。试求出此数列的前25项中其值大于0.618的项数。SET TALK OFFCLEARF1=1F2=2N=0FOR K=1 TO 25 F=F1/F2 IF F0.618 N=N+1 ENDIF F1=F2 改正:F1=F1+F2 F2=F1 改正:F2=F1+F2ENDFOR NSET TALK ONRETURN运行结果:2024、回文指的是正读和反读都一样的一串字符,如121、1221。试求出1421,4112所有回文数的和。SET TALK OFFCLEARS=0FOR *=1421 TO 4112 A=
14、*/1000 改正:A=INT(*/1000) B=INT(*-A*1000)/100) C=INT(*-A*1000-B*100)/10) D=*-A*1000-B*100-C*10 IF A=D AND B=C S=S* 改正:S=S+* ENDIFENDFOR SSET TALK ONRETURN运行结果:7425025、求出1234,6789中间两位数字之和等于首尾两位数字之积的数的个数。SET TALK OFFCLEARN=0FOR *=1234 TO 6789 A=INT(*/1000) B=INT(*-A*1000)/100 改正:B=INT(*-A*1000)/100) C=I
15、NT(*-A*1000-B*100)/10 改正:C=INT(*-A*1000-B*100)/10) D=*-A*1000-B*100-C*10 IF B+C=A*D N=N+1 ENDIFENDFOR NSET TALK ONRETURN运行结果:17526、将大于1000且能被4和6中至少一个数整除的所有整数按从小到大顺序排列后,求前面20个数之和。SET TALK OFFCLEARS=0K=0*=1000DO WHILE K=20 改正:DO WHILE K20 *=*+1 IF MOD(*,4*6)=0 改正:IF MOD(*,4)=0 OR MOD(*,6)=0 S=S+* K=K+
16、1 ENDIFENDDO SSET TALK ONRETURN运行结果:2061027、假设一个自然数恰好等于*个整数的平方,则称此数为完全平方数。如144是完全平方数,因为它等于12的平方。求1000,9999所有完全平方数的和。SET TALK OFFCLEARS=0FOR *=1000 TO 3000 Y=SQRT(*) 改正: Y=INT(SQRT(*) 或改下一语句为 IF *=INT(Y)*INT(Y) IF *=Y*Y S=S+* ENDIFENDFOR * 改正: SSET TALK ONRETURN运行结果:4353928、假设一个自然数恰好是它的平方的末后几位数,则称此数为
17、自同构数。如5和76都是自同构数,因为它们的平方分别是25和5776。求2,99999所有自同构数之和。提示:假设*是M位同构数,则*的平方除以10的M次方的余数就是*SET TALK OFFCLEARS=0FOR *=2 TO 99999 Y=* M=LEN(LTRIM(STR(*) & 设*是M位数 IF MOD(Y,10*M)=* 改正:IF MOD(Y,10*M)=* S=S+* ENDIFENDFOR Y 改正: SSET TALK ONRETURN运行结果:10111429、求满足条件A*B=54321且使A+B的值最小的自然数对A、B中较大的一个数。提示:设A0R=MOD(A,P
18、)IF R=1N=1 改正:N=N+1ENDIFA=INT(A/P)ENDDO NSET TALK ONRETURN运行结果:1332、4087求出将十进制整数98765432等值转换为二进制形式表示后其中数字0的个数。提示:模拟人工计算的2除取余法SET TALK OFFCLEARA=98765432P=2N=0DO WHILE A=0 改正:DO WHILE A0R=MOD(A,P)IF R=0N=P+1 改正:N=N+1ENDIFA=INT(A/P)ENDDO NSET TALK ONRETURN运行结果:1433、求出将十进制整数等值转换为十六进制形式表示后其中字母C的个数。提示:模拟
19、人工计算的16除取余法SET TALK OFFCLEARA=P=16N=0DO WHILE A=0R=MOD(A,P)IF R=11 改正:IF R=12N=N+R 改正:N=N+1ENDIFA=INT(A/P)ENDDO NSET TALK ONRETURN运行结果:234、对自然数A、B、C,假设ABC且A*A+B*B=C*C,则称A,B,C为一组勾股弦数,其中A、B、C分别称为勾、股、弦。试求出弦为25000的勾股弦数组的个数。SET TALK OFFCLEARC=25000N=1 改正:N=0FOR A=1 TO CB=INT(SQRT(C*C-A*A)IF A*A+B*B=C*C 改
20、正:IF A*A+B*B=C*C AND ABN=N+A 改正:N=N+1ENDIFENDFOR NSET TALK ONRETURN运行结果:535、4094对自然数A、B、C,假设ABC且A*A+B*B=C*C,则称A,B,C为一组勾股弦数,其中A、B、C分别称为勾、股、弦。试求出弦为1300的勾股弦组数。SET TALK OFFCLEARC=1300N=0FOR A=1 TO CB1=SQRT(C*C-A*A)B=INT(B1)IF B=B1 改正:IF B=B1 AND ABN=N+B 改正:N=N+1ENDIFENDFOR NSET TALK ONRETURN运行结果:740、求方程
21、3*-7Y=1在条件|*|100且|Y|40下的整数解的个数。SET TALK OFFCLEARN=0FOR *=-99 TO 99Y=INT(3*-1)/7)IF 3*-7*Y=1 OR ABS(Y)40 改正: IF 3*-7*Y=1 AND ABS(Y)40N=N+* 改正:N=N+1ENDIFENDFOR NSET TALK ONRETURN运行结果:2641、求方程3*-7Y=1在条件|*|100且|Y|40下的所有整数解的|*|+|Y|的最大值。SET TALK OFFCLEARMA*=140 改正:MA*=0FOR *=-99 TO 99Y=INT(3*-1)/7)Z=ABS(*
22、+Y) 改正:Z=ABS(*)+ABS(Y)IF 3*-7*Y=1 AND ABS(Y)Z 改正:IF 3*-7*Y=1 AND ABS(Y)40 AND MA*ZMA*=ZENDIFENDFOR MA*SET TALK ONRETURN运行结果:12742、求1001000的第10个素数。素质是指只能被1和本身整除的数SET TALK OFFCLEAN=0K=0FOR I=100 TO 1000F=1FOR J=2 TO I 改正:FOR J=2 TO I-1IF MOD(I,J)=0F=0E*ITENDIFENDFORIF F=1N=IK=K+I 改正:K=K+1IF K=10E*ITEN
23、DIFENDIFENDFOR NRETURN运行结果:14943、对自然数A、B、C,假设ABC且A*A+B*B=C*C,则称A,B,C为一组勾股弦数,其中A、B、C分别称为勾、股、弦。试求出弦为2500的勾股数组中ABC的值最大为多少.。SET TALK OFFCLEARC=2500MA*=0FOR A=1 TO CB=INT(SQRT(C*2-A*2) 改正:B=INT(SQRT(C*2-A*2)IF A*A+B*B=C*C AND AA+B+C 改正:IF MA*+Y 改正:IF MA*+YMA*=*+YENDIFENDIFENDFORENDFOR MA*SET TALK ONRETUR
24、N运行结果:4947、24有8个正整数因子(即:1,2,3,4,6,8,12,24),而24正好被其因子个数8整除。求100,300之间能被其因子数目整除的数的个数。SET TALK OFFCLEAC=0FOR N=100 TO 300S=0FOR I=1 TO N -1 改正:FOR I=1 TO NIF INT(I/10)=0 改正:IF INT(I/10)=I/10 或改为 IF MOD(I,10)=0S=S+1ENDIFENDFORIF MOD(N,S)=0C=C+1ENDIFENDFOR CSET TALK ONRETURN运行结果:1948、分子分母为正整数,分子小于分母的分数称为
25、真分数。对于分数的分子分母取值围为 50,90 且分母能被3整除的真分数共有多少个.SET TALK OFFCLEAN=1 改正:N=0FOR A=50 TO 90FOR B=50 TO 90IF MOD(B,3)=0 改正:IF MOD(B,3)=0 AND ABN=N+1ENDIFENDFORENDFOR NSET TALK ONRETURN运行结果:28749、分子分母为正整数,分子小于分母的分数称为真分数。对于分数的分子分母取值围为 50,90 且分母能被3整除、分子能被5整除的真分数共有多少个.SET TALK OFFCLEAN=1 改正:N=0FOR A=50 TO 89FOR B
26、=50 TO 90IF MOD(B,3)=0 改正:IF MOD(B,3)=0 AND MOD(A,5)=0 AND A0R=INT(A/B) 改正:R=MOD(A,B)B=R 改正:A=BA=B 改正:B=RENDDO ASET TALK ONRETURN运行结果:7353、利用分解质因数的方法求出18000中含有质因数的个数一样的重复计数,例如,180中含有5个质因数:2、2、3、3、5。SET TALK OFFCLEAR*=18000N=0K=1 改正:K=2DO WHILE *1IF MOD(*,K)=0N=N+1*=INT(*/K)E*IT 改正:LOOPENDIFK=K+1ENDD
27、O NSET TALK ONRETURN运行结果:354、分子分母为正整数,分子小于分母且分子分母无公因数的分数称为最简真分数。对于分数的分母取值围为 50,90 时的最简真分数共有多少个.SET TALK OFFCLEAN=0FOR A=2 TO 89 &分子FOR B=50 TO 90&分母IF AB 改正:IF AIMIN=IENDIFENDIFENDFOR MINSET TALK ONRETURN运行结果:152156、50个小学生按至50序号顺时针围成一圈,做出局游戏,教师站在圈外顺时针从第一个人数起,每数到5时,这人从圈里出来,继续数1,2,3,4,5,数到第5个学生时,他就出局,已出局的位置不再参加计数,直至所有的学生出局为止,问最后一个出局的学生序号是多少号。SET TALK OFFCLEADIME A(50)FOR I=1 TO 50A(I)=0改正:A(I)=I ENDFORK=0F
链接地址:https://www.desk33.com/p-6481.html