程序改错11.docx
《程序改错11.docx》由会员分享,可在线阅读,更多相关《程序改错11.docx(41页珍藏版)》请在冰豆网上搜索。
![程序改错11.docx](https://file1.bdocx.com/fileroot1/2023-5/19/b45bccf9-e7f2-4992-aab8-b61300c00bb0/b45bccf9-e7f2-4992-aab8-b61300c00bb01.gif)
程序改错11
VFP改错题(上机)
1、本程序求给定两个正整数的最小公倍数和最大公约数。
SETTALKOFF
CLEA
INPUT'N='TON
INPUT'M='TOM
X=MIN(N,M)
******1******
FORI=1TOX FORI=XTO1STEP-1
******2******
IFM/I=INT(M/I)ORN/I=INT(N/I) IFM/I=INT(M/I)ANDN/I=INT(N/I)
GYS=I
******3******
LOOP EXIT
ENDIF
ENDFOR
?
'最大公约数 最小公倍数'
?
GYS,M*N/GYS
SETTALKON
2、本程序实现:
输入一个正整数M,判断并显示1~M中有哪些数可以分为两个相等的素数。
(如M=10,有3个数符合,即2+2=4,3+3=6和5+5=10)
SETTALKOFF
CLEA
INPUT'M='TOM
IFINT(M)!
=MORABS(M)!
=M
?
'不符合题目要求!
'
ELSE
S=0
FORJ=2TOM/2
******1******
FORI=2TOJ/2 FORI=2TOJ-1
IFJ%I=0
EXIT
ENDIF
******2******
ENDDO ENDFOR
IFI=J
S=S+1
?
ALLTRIM(STR(J*2,19))+'="+ALLTRIM(STR(J,19))+'+'+ALLTRIM(STR(J,19))
ENDIF
ENDFOR
?
STR(M,19))+'中共有:
'+STR(S,3))+'个数满足条件'
ENDIF
SETTALKON
3、本程序实现:
输入一个数,判断是否是素数。
SETTALKOFF
CLEA
INPUT'X='TOX
FORI=2TOX-1
******1******
IFINT(X/I) IFINT(X/I)=X/I
EXIT
ENDIF
ENDFOR
******2******
IFI<=X IFI=X
?
'是素数!
'
ELSE
?
'不是素数!
'
ENDIF
SETTALKON
4、本程序实现:
将给定的正整数的值分解因子,并输出各个质数因子(如24的因子有2、2、2和3)
SETTALKOFF
CLEA
******1******
ACCEPT 'M='TOM INPUT'M='TOM
IFINT(M)!
=MORABS(M)!
=M
?
'输入的数据不符合题目要求!
'
******2******
ENDIF ELSE
I=2
DOWHILI<=M
IFM%I=0
?
?
STR(I,6)
M=INT(M/I)
LOOP
ENDIF
I=I+1
?
STR(M)+'的质数因子有:
'
ENDDO
ENDIF
SETTALKON
5、本程序实现:
:
利用公式SIN(X)=X/1!
-X3/3!
+X5/5!
+…+(-1)n-1X2n-1/(2n-1)!
,直到最后一项的绝对值小于等于10-5为止。
SETTALKOFF
CLEA
INPUT'X='TOX
S=X
T1=X
T2=1
N=1
T=-1
******1******
DOWHILABS(T1/T2)<1E-5 DOWHILABS(T1/T2)>1E-5
T1=T1*X*X
******2******
T2=T2*(2*N)*(2*N+1) T2=T2*(2*N)*(2*N+1)*T
S=S+T1/T2
T=T*(-1)
N=N+1
ENDDO
?
S
SETTALKON
6、本程序实现:
利用公式ex=1+X+X2/2!
+X3/3!
+…+Xn/n!
,输入X和N,计算ex的近似值。
SETTALKOFF
CLEA
INPUT'X=' TO X
INPUT'N=' TO N
******1******
STORE1TOA,B STORE1TOS,A,B
FOR I=1 TO N
A=A*X
B=B*I
******2******
S=A/B S=S+A/B
ENDFOR
?
'S=',S
SETTALKON
7、本程序实现:
对任意一个正数值型数据(该数可有小数若干位,整数部分不超过12位)自动进行小数部分四舍五入取2位,并将其转换为中文大写金额。
SETTALKOFF
C1='零壹贰叁肆伍陆柒捌玖'
C2='分角元拾佰仟万拾佰仟亿拾佰仟'
INPUT'输入一个正数='TOY
Y=Y*100
Y=ROUND(Y,2)
I=1
D=SPACE(0)
DOWHILY>0
P=MOD(Y,10)
******1******
D=D+SUBSTR(C1,2*P+1,2) D=SUBSTR(C2,2*I-1,2)+D
******2******
D=D+SUBSTR(C2,2*I-1,2) D=SUBSTR(C1,2*P+1,2)+D
I=I+1
Y=INT(Y/10)
ENDDO
SETTALKON
8、本程序首先对矩阵按行读入数据,并将它转置。
SETTALKOFF
INPUT'N='TON
DIMEA(N,N)
FORI=1TON
FORJ=1TON
******1******
INPUT'A('+STR(I,1)+','+STR(J,1)+')='TOA(J,I) TOA(I,J)
ENDFOR
ENDFOR
FORI=1TON
******2******
FORJ=1TON FORJ=1TOI
T=A(I,J)
A(I,J)=A(J,I)
A(J,I)=T
ENDFOR
ENDFOR
SETTALKON
9、本程序实现:
对输入的正整数,判别其中包含指定数码的个数(如2312132中包含数码1的个数为2)。
SETTALKOFF
INPUT'输入数值='TOM
INPUT'输入数码'TON
S=0
DOWHIL.T.
******1******
Y=MOD(M/10) Y=MOD(M,10)
IFY=N
S=S+1
ENDIF
************
M=INT(M/N) M=INT(M/10)
IFM=0
EXIT
ENDIF
ENDDO
?
S
SETTALKON
10、本程序实现:
已知某表中有数值型字段X1,X2。
如果记录中X1,X2字段的值都大于0,则显示两值之和,并将上述和累加。
SETTALKOFF
CLEA
ACCEPT'请输入表名:
' TO NAME
******1******
USENAME USE&NAME
Z=0
DOWHIL.NOT.EOF()
IFX1>0ANDX2>0
Y=X1+X2
?
'记录号'+STR(RECNO(),2)+':
'+STR(Y)
Z=Z+Y
ENDIF
******2******
CONT SKIP
ENDDO
USE
?
Z
SETTALKON
11、本程序用于输入一个表名,若表存在则打开,并显示出其各个字段名。
SETTALKOFF
DOWHILE .T.
ACCEPT'请输入表名:
' TOFNAME
******1******
IFFILE()<>FNAME IF.NOT.FILE(FNAME)
WAIT'此表不存在'
ELSE
USE&FNAME
ZDSM=FCOUNT()
******2******
?
'此表中的字段有:
'+ZDSM+'个' ?
'此表中的字段有:
'+STR(ZDSM)+'个'
FORI=1TOZDSM
?
STR(I)+' '
?
?
FIELD(I)
ENDFOR
ENDIF
ENDDO
SETTALKON
12、本程序比较从键盘输入的若干个数的大小,并输出其中的最大和最小数。
SETTALKOFF
CLEA
INPUT'M='TOM
STOREMTOD,X
DOWHIL.T.
INPUT'N='TON
IFD D=N
ENDIF
IFX>N
X=N
ENDIF
YN='A'
******1*****
DOWHILUPPER(YN) NOT(UPPER(YN)='Y'ORUPPER(YN)='N')
WAIT'是否继续(Y/N)'TOYN
ENDDO
******2******
IFLOWER(YN)='Y' UPPER(YN)='Y'或LOWER(YN)='y'
EXIT
ENDIF
ENDDO
?
'最大的数是:
',D
?
'最小的数是:
',X
SETTALKON
13、本程序实现口令验证。
输入次数在3次以内,给予重输的提示,超过3次,则进入死循环。
SETTALKOFF
CLEA
I=1
DOWHIL.T.
?
'请输入口令='
******1******
SETCONSOLE SETCONSOLEOFF
ACCEPTTOKL
******2******
SETCONSOLE SETCONSOLEON
IFKL='21211'
?
'欢迎使用本系统!
'
EXIT
ENDIF
IFI>3
DOWHIL.T.
ENDDO
ENDIF
I=I+1
?
'口令第'+STR(I,1)+'错,再试一次!
'
ENDDO
SETTALKON
14、本程序实现:
输入三个正数,判定是否构成一个三角形,如果构成一个三角形,则返回.T.,否则返回.F.。
另外通过参数的引用将三角形的面积传回。
*主程序
SETTALKOFF
INPUT'X1='TOX1
INPUT'X2='TOX2
INPUT'X3='TOX3
******1******
?
TARER(X1,X2,X3) ?
TARER(@X1,X2,X3)
?
X1
SETTALKON
*自定义函数
FUNCTARER
PARAA,B,C
******2******
IFA>B>C IFA
S=(A+B+C)
A=SQRT(S*(S-A)*(S-B)*(S-C))
RETU.T.
ELSE
A=0
RETU.F.
ENDIF
15、本程序实现:
从键盘输入学生的学号,在表GRADE.DBF中计算该生的平均成绩,并说明成绩的档次(优、良、中、及格和不及格)。
表结构如下:
GRADE
学号 课程号 成绩
C,6 C,4 N,3
SETTALKOFF
CLEA
USEGRADE
C='不及格 及格 中 良 优'
ACCEPT'输入学号='TOX
LOCAFOR学号=X
IFFOUND()
******1******
TOTAL成绩TOCJ AVER成绩TOCJFOR学号=X
IFCJ<60
R=0
ELSE
R=INT(CJ/10)-5
ENDIF
******2******
DC=STR(C,6) DC=SUBSTR(C,6*R+1,6)
?
X,CJ,DC
ELSE
?
'查无此人!
'
ENDIF
USE
SETTALKON
16、本程序用于计算S=1+2+3+…+10的和。
SETTALKOFF
S=0
I=0
******1******
DOWHILI<=10 DOWHILI<10
I=I+1
S=S+I
******2******
ENDFOR ENDDO
?
S
SETTALKON
17、本程序在表FILE中增加一条记录,并在名称字段写入“总计”,在今日早报和钱江晚报字段写入订报总数。
表结构:
FILE
编号 名称 今日早报 钱江晚报
N,2 C,10 N,6 N,6
SETTALKOFF
USEFILE
MLD=0
MDD=0
DOWHIL.NOT.EOF()
MLD=MLD+今日早报
MDD=MDD+钱江晚报
SKIP APPENDBLANK
ENDDO
******1******
SKIP
******2******
REPLNAMETO'总计' REPL名称WITH'总计',今日早报WITHMLD,钱江晚报WITHMDD
USE
SETTALKON
18、本程序将表STU.DBF中的成绩小于60分的人显示出来。
表结构:
STU.DBF
学号 姓名 成绩
C,5 C,8 N,3
SETTALKOFF
CLEA
USESTU
?
'------------------------------------------'
?
' 不及格学生名单 '
?
'------------------------------------------'
?
'学号 姓名 成绩'
******1******
GOBOTTOM GOTOP
DOWHIL.NOT.EOF()
IF成绩<60
?
学号+SPACE(5)+姓名+SPACE(5)+STR(成绩,3)
ENDIF
SKIP
ENDDO
?
'---------------------------------------------'
******2******
?
'当前日期'+CTOD(DATE()) ?
'当前日期'+DTOC(DATE())
USE
SETTALKON
19、本程序把输入的字符串倒置后输出(如:
'ABCD'倒置后的字符串为'DCBA')。
SETTALKOFF
C=SPACE(0)
ACCEPT'请输入字符串='TO ST
I=LEN(ST)
DOWHILI>0
Q=SUBST(ST,I,1)
******1******
C=Q+C C=C+Q
******2******
I=I+1 I=I-1
ENDDO
?
C
SETTALKON
20、本程序实现任意查询功能。
SETTALKOFF
CLEA
ACCEPT'请输入表名:
(扩展名略)' TOFNAME
******1******
IF.NOT.FILE(FNAME) IF.NOT.FILE(&FNAME..DBF)
WAIT'此表不存在'
ELSE
USE&FNAME
ZDSM=FCOUNT()