2003VFP程序改错题2-1

更新时间:2024-03-29 10:49:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1.下列程序实现字母转换:输入字符串中出现英文字母均转化为顺序排列在该字母后面的第五个字母(26个字母相接顺序排列).

CLEAR

SET TALK OFF ACCEPT TO B L=LEN(B) C=\

FOR I=1 TO L A=SUBSTR(B,I,1) &&********1*******

A=?? DO CASE CASE A>=\ A=CHR(ASC(A)+5) CASE A>=\ A=CHR(ASC(A)-21) &&*******2********

A=CHR(ASC(A)-26) ENDCASE C=C+A ENDFOR ?B+\SET TALK ON

.2.从键盘输入一个实数M,求出该数的整数位数、小数位数和整体输入位数。 SET TALK OFF CLEAR

INPUT \IF X=0 ?\小数位数为:0,整数位数为:0,\该数的实际输出位数为:1。\ENDIF

ZS=INT(ABS(X)) ZSW=0

DO WHILE ZS>0 ZS=INT(ZS/10) &&********1****** ZS=MOD(ZS/10) ZSW=ZSW+1 ENDDO XSW=0

DO WHILE INT(X)#X

X=X*10 / X=10*X &&********2****** X=MOD(X,10) XSW=XSW+1 ENDDO

FJW=IIF(X<0,1,0)+IIF(XSW=0,0,1)

?\整数位数为:\小数位数为:\?\该数的实际输出位数为:\

SET TALK ON

3..将学生表中的指定学生的奖学金增加100元

学生表:学号(C ),姓名(C),奖学金(N)

SET TALK OFF

CLEAR USE 学生 ACCEPT \请输入学生学号:\

LOCATE FOR 学号=XH / LOCA FOR XH=学号/ LOCATE FOR ALLT(学号)=ALLT(XH) / LOCA FOR ALLT(XH)=ALLT(学号) &&*****1***** SEEK学号=XH IF !EOF()

REPL 奖学金 WITH 100 &&*****2***** REPLACE ALL 奖学金 WITH 100 ?学号,姓名,奖学金 ELSE ?\没有找到!\ ENDIF USE SET TALK ON

4. 判断输入的年份是否是闰年.(能被4整除但不能被100整除,或能被100整除且能被400整除).

SET TALK OFF CLEAR

INPUT ‘Y=’ TOY &&*****1***** ACCEPT \

IF (Y%4=0 AND Y0<>0) OR (Y0=0 AND Y@0=0) /IF (Y%4=0 AND Y0!=0) OR (Y0=0 AND Y@0=0) IF (MOD(Y,4)=0 AND Y0<>0) OR (MOD(Y,100)=0 AND MOD(Y,400)=0)/IF (MOD(Y,4)=0 AND Y0!=0) OR (MOD(Y,100)=0 AND MOD(Y,400)=0) &&*****2***** IF (Y%4 AND Y!0) AND (Y0 AND Y!@0) ?Y,\是闰年!\ELSE

?Y,\不是闰年!\ENDIF

SET TALK ON

5查找学生表中指定班级(如951班)的奖学金总额.

学生.DBF

学号 姓名 性别 奖学金 C,6 C,8 L,1 N,6 SET TALK OFF CLEAR USE 学生

INPUT ?请输入班级? TO BJ

LOCATE FOR LEFT(学号,3)=BJ

******1****** IF EOF()

******2******

SUM 奖学金 TO C

?BJ+?班奖学金总额是:?+STR(C,8,2) ENDIF

SET TALK ON

1. IF !EOF() / IF FOUND() / IF NOT EOF() / IF EOF()=.F. 2. SUM 奖学金 TO C FOR LEFT(学号,3)=BJ/ SUM 奖学金 TO C FOR BJ= LEFT(学号,3)

5. 将键盘输入的阿拉伯数字(1-9)转化为中文大写数字(一到九)

SET TALK OFF CLEAR

C=?一二三四五六七八九? INPUT ?请输入数字? TO X ******1******

D=SUBSTR(C,2*X+1,1) ******2****** ?X+?转化为?+D SET TALK ON

1. D=SUBSTR(C,2*X-1,2)

2. ? STR(X,1) +’转化为’+D / ? STR(X) +’转化为’+D /X, ’转化为’,D 6. 查找学生表中有奖学金的同学信息.

学生.DBF

学号 姓名 奖学金 C,6 C,8 N,4

SET TALK OFF CLEA USE 学生

******1****** DO WHILE EOF() IF 奖学金>0

?学号,姓名,奖学金 ENDIF SKIP

******2****** ENDSCAN USE

SET TALK ON

1. DO WHILE NOT EOF() / DO WHILE ! EOF() /DO WHILE EOF()=.F. 2. ENDDO

7. 查找学生表中男生和女生的奖学金总额.

学生表: 学号(C,6 ), 性别(L,1),奖学金(N,8,2)

假设男生性别为T SET TALK OFF CLEAR JE1=0 JE2=0 USE 学生

DO WHILE NOT EOF() ******1****** IF !性别

JE1=JE1+奖学金 ELSE

JE2=JE2+奖学金 ENDIF

******2****** SKIP -1 ENDDO

??男生奖学金总额为:?,JE1 ??女生奖学金总额为:?,JE2 USE

SET TALK ON

1. IF 性别 / IF性别=.T. 2. SKIP /SKIP 1 8. 打印口诀表的程序如下:

1*1=1

1*1=1 1*2=2

1*1=1 1*2=2 1*3=3

1*1=1 1*2=2 1*3=3 1*4=4 SET TALK OFF CLEAR ?

FOR I=1 TO 4 ******1****** FOR J=1 TO 4

??STR(1,2)+?*?+STR(J,2)+?=?+STR(1*J,2) ENDFOR ******2****** ??

ENDFOR

1. FOR J=1 TO I 2. ?

9. 编写工资的分发金额张数(100元,1元的张数).假设工资金额为正整数.

SET TALK OFF CLEA

INPUT ?请输入工资金额:? TO JE STORE 0 TO A1,A2 IF JE>=100

******1****** A1=INT(JE,100) ******2****** JE=MOD(JE/100) ENDIF A2=JE

??100元张数是:?,A1 ??1元张数是:?,A2 SET TALK ON 1. A1=INT(JE/100)

2. JE=MOD(JE,100) / JE=JE0

10. 打印倒三角形图案(假设图案中心距屏幕位置为10).

* * * * * * * * *

SET TALK OFF

CLEAR

******1****** FOR I=3 TO 1 ******2******

?SPACE(10)

FOR J=1 TO 2*I-1 ??'*' ENDFOR

ENDFOR

SET TALK ON

1. FOR I=3 TO 1 STEP -1 2. ?SPACE(10-I)

11. 将学生表中学号前3位为?951?的学生奖学金加50元. 学生表: 学号(C,6 ), 性别(L,1),奖学金(N,8,2) SET TALK OFF CLEA USE 学生

*******1******** DO WHILE EOF()=.T. IF LEFT(学号,3)=?951?

REPL 奖学金 WITH 奖学金+50 ENDIF

*******2******* LOOP ENDDO USE

SET TALK ON

1. DO WHILE EOF()=.F. / DO WHIL NOT EOF() / DO WHIL ! EOF() 2. SKIP /SKIP 1

11从键盘输入5个整数,求出最大数和最小数. SET TALK OFF CLEA

INPUT ?请输入第一个整数? TO A ********1******** STORE 0 TO M1,M2 FOR I=1 TO 4

INPUT ?请输入下一个整数:? TO A ********2*******

IF M1>A M1=A ENDIF IF M2>A M2=A ENDIF ENDFOR

??最大数是:?, M1 ??最小数是:?,M2 SET TALK ON

1. STORE A TO M1,M2 2 .IF M1M1

12.根据输入数据,计算不大于该数的偶数累加和. SET TALK OFF CLEA

INPUT '请输入两位以上的正整数:' TO N STORE 0 TO X,Y ********1******** DO WHILE N

IF INT(X/2)=X/2 Y=Y+X ELSE

*********2******* EXIT ENDIF ENDDO ?Y

SET TALK ON

1. DO WHILE N>=X / DO WHILE X<=N 2. LOOP

13.下列程序为口令验证程序.口令随系统日期发生变化,允许输入三次口令. SET TALK OFF CLEA

K0=DAY(DATE())+MONTH(DATE()) I=0

DO WHILE .T. SET CONS OFF

ACCEPT ?请输入口令:? TO K1 SET CONS ON I=I+1

********1******** IF K1=K0 .OR. I=3 EXIT ELSE

??请重新输入口令: ? *********2****** SKIP ENDIF ENDDO

SET TALK ON

1. IF K1=STR(K0,2) .OR. I=3 / IF ALLT(K1)=STR(K0,2) OR. I=3 2. LOOP

14.将学生表和成绩表建立临时关联,显示学生的学号,姓名,课程号,成绩等字段内容.

SET TALK OFF SELE 1 USE 学生 SELE 2

USE 成绩 ALIAS CJ INDEX ON 学号 TO XH SELE 1

**********1**********

SET RELA TO 学号 INTO 成绩 **********2********

?学号,姓名,B->课程号,成绩.成绩 SET TALK ON

1. SET RELA TO 学号 INTO CJ / SET RELA TO 学号 INTO B

2. ?学号,姓名,B->课程号,CJ->成绩 / ?学号,姓名,B.课程号,CJ.成绩/?学号,姓名,CJ->课程号,CJ.成绩/?学号,姓名,CJ->.课程号,CJ->.成绩

15.下面主程序MAIN.PRG通过调用完成阶乘运算子程序计算S=K!+(K+1)!+(K+2)!+…..M! *MAIN.PRG SET TALK OFF

INPUT ?请输入K的值? TO K INPUT ?请输入M的值? TO M STORE 0 TO S,A ******1****** I=M

DO WHILE I<=M ******2*****

DO SUB WITH K,M S=S+A I=I+1 ENDDO ??S=?,S

SET TALK ON

*SUB.PRG PARA P,N P=1

FOR L=1 TO N P=P*L ENDFOR RETU

1. I=K

2. DO SUB WITH A,I

16. 在屏幕上显示如下图形:

1 222 33333 4444444 555555555

SET TALK OFF CLEA

FOR I=1 TO 5 ?SPACE(10-I)

*********1******** FOR J=1 TO 2*I

**********2*******

??STR(J,1) ENDFOR ENDFOR

SET TALK ON

1. FOR J=1 TO 2*I-1 2. ??STR(I,1)

17以下程序实现四则运算. SET TALK OFF CLEA

INPUT ?请输入第一个数:? TO A *******1**********

ACCEPT ?请输入第二个数? TO B ACCEPT ?请输入运算符? TO C DO CASE CASE C=?+?

D=A+B CASE C=?/? D=A/B CASE C=?-? D=A-B CASE C=?*? D=A*B

********2****** ENDDO ?D

SET TALK ON

1. INPUT ‘请输入第二个数’ TO B /INPUT TO B 2. ENDCASE

18.按姓名查询学生表中的学生信息,可连续查询. SET TALK OFF USE 学生 DO WHILE .T.

ACCEPT ?请输入姓名? TO XM

*****1******

SEEK FOR 姓名=XM IF FOUND() ?学号,姓名 ENDIF

WAIT ?要继续查询吗?? TO YN *****2******

IF UPPER(YN)=?N? LOOP ELSE EXIT ENDIF ENDDO

SET TALK ON

1. LOCATE FOR 姓名=XM / LOCATE FOR XM=姓名 / LOCATE FOR ALLT(姓名)=XM / LOCATE FOR XM=ALLT(姓名)

2. IF UPPER(YN)=’Y’ / IF YN=’Y’ OR YN=’y’/IF LOWER(YN)=’y’

19. 从键盘输入单价和数量,计算金额,若购买数量大于等于100,则9折优惠, 若购买数量大于等于1000,则8折优惠。 SET TALK OFF CLEA

INPUT ?请输入单价? TO DJ INPUT ?请输入数量? TO SL DO CASE

*******1*******

CASE SL>=100 JE=DJ*SL*0.9 CASE SL>=1000 JE=DJ*SL*0.8

*******2******** WISE

JE=DJ*SL ENDCASE ?JE

SET TALK ON

1. CASE SL>=100 AND SL<1000 2. OTHERWISE /CASE SL<100

20.求1-1000之内既能被3整除,又能被7整除的数之和. SET TALK OFF CLEAR

S=0

FOR I=1 TO1000 *******1******

IF INT(I,3)=I/3 AND INT(I,7)=I/7 S=S+I ENDIF

*******2****** ENDDO ? S

SET TALK ON

1. IF INT(I/3)=I/3 AND INT(I/7)=I/7 / IF MOD(I,3)=0 AAND MOD(I,7)=0 / IF I%3=0 AND I%7=0

2. ENDFOR

21.用永真循环实现向学生表中添加空白记录,其中学号,姓名,性别和出生年月四个字段内容从键盘输入.

SET TALK OFF CLEA USE 学生 DO WHILE .T.

INPUT ?请输入学号? TO XH INPUT ?请输入姓名? TO XM INPUT ?请输入性别? TO XB

INPUT ?请输入出生年月? TO CSNY **********1********* APPEND

REPL 学号 WITH XH,姓名 WITH XM,性别 WITH XB, 出生年月 WITH CSNY WAIT ?继续输入吗?? TO YN IF UPPER(YN)=?N? ********2******* LOOP ENDIF ENDDO SET TALK ON

1.APPEND BLANK 2. EXIT

22.统计输入字符串中数字、字母、空格和其它符号个数。 SET TALK OFF CLEA

ACCEPT ?请输入字符串? TO X STORE 0 TO S1,S2,S3,S4

**********1*********** FOR I=1 TO X

Y=SUBSTR(X,I,1) DO CASE

CASE UPPER(Y)>=?A? AND UPPER(Y)<=?Z? S1=S1+1

***********2*************

CASE Y>=0 AND Y<=9

S2=S2+1

CASE Y=SPACE(1) S3=S3+1 OTHERWISE S4=S4+1 ENDCASE ENDFOR ?S1,S2,S3,S4 SET TALK ON

1. FOR I=1 TO LEN(X) / FOR I=1 TO LEN(ALLT(X)) 2. CASE Y>=’0’ AND Y<=’9’

23.从键盘输入20个数,统计正数,负数,0个数. SET TALK OFF CLEAR

STORE 0 TO S1,S2,S3 FOR I=1 TO 20 INPUT TO X

********1*******

IF X>=0 S1=S1+1 ELSE IF X<0 S2=S2+1 ELSE

S3=S3+1 ENDIF *******2***** ENDF ENDFOR

??正数个数是:?,S1 ? ?负数个数是:?,S2 ??0的个数是:?,S3 SET TALK ON

1. IF X>0 / IF 0

24.求一个十进制整数N的各位数字之和.如231 :2+3+1=6 SET TALK OFF CLEA

INPUT TO N S=0

DO WHILE .T. *****1*****

A=MOD(N/10) S=S+A

N=INT(N/10) IF N=0

******2****** LOOP ENDIF ENDDO ?S

SET TALK ON

1. A=MOD(N,10) / A=N 2. EXIT

25.求M!末位0的个数. SET TALK OFF CLEAR

INPUT TO M ******1****** T=0

FOR I=1 TO M T=T*I ENDFOR S=0

DO WHILE .T. N=MOD(T,10) IF N=0 S=S+1 ENDIF

********2******* T=T/10 IF T=0 EXIT ENDIF

ENDDO

??0的个数?,S SET TALK ON

1. T=1

2. T=INT(T/10)

26.设计程序,分别计算圆的面积、圆周长。

SET TALK OFF

CLEAR

??***********圆计算程序********? ??1---计算圆面积 ? ??2—计算圆周长 ? ??3—退出 ? ??******************************? DO WHILE .T.

INPUT ?请选择? TO X

INPUT ?请输入圆半径:? TO Y

DO CASE CASE X=1

DO SUB1 WITH Y CASE X=2

********1*******

DO SUB2 WITH X

OTHERWISE EXIT ENDCASE ENDDO

SET TALK ON

*SUB1 PARA M

*****2******** S=PI( )*M*2 ?S RETU

*SUB2 PARA M S=2*M*PI( ) ?S RETU

1. DO SUB2 WITH Y

2. S=PI()*M^2 / S=3.14*M*M / S=PI()*M*M / S=3.14*M^2

27.通过子程序调用求(M!+N!)/(MN+MM) *MAIN.PRG SET TALK OFF CLEAR

*******1****** SET PROC TO INPUT ?M=? TO M INPUT ?N=? TO N S1=M S2=N

DO P1 WITH S1 DO P2 WITH S2

S=(S1+S2)/(M*N+M*M) ?S

SET TALK ON

PROC P1 PARA Y T=1

FOR I=1 TO Y T=T*I ENDFOR

********2****** T=Y RETU ENDPROC

1. SET PROC TO MAIN 2. Y=T

28.求数学公式S=K!+(K+1)!+…..+M!(K

FOR I=K TO M T=1

********1******* FOR J=1 TO M T=T*J ENDFOR

********2******* S=S+I ENDFOR ?S

SET TALK ON

1. FOR J=1 TO I 2. S=S+T

29通过子程序调用求M!/N!(M-N)! *MAIN.PRG SET TALK OFF CLEAR

INPUT ?请输入M的值? TO M INPUT?请输入N的值? TO N STORE 0 TO S1,S2,S3 DO P1 WITH M,S1 DO P1 WITH N,S2 DO P1 WITH M-N,S3 S=S1/S2*S3

SET TALK ON

*P1.PRG

********1******* PARA Y,X T=1

FOR I=1 TO X ******2****** T=T*X ENDFOR Y=T RETU

1. PARA X,Y 2. T=T*I

30 编写自定义函数,判定给定正整数是否为偶数,是返回.T.,否则返回.F.. SET TALK OFF CLEAR

INPUT ?X=? TO X IF X>0

******1******* IF X

?X,?是偶数!?

ELSE

?X,?不是偶数!? ENDIF ENDIF

SET TALK ON

FUNC JOS PARA Y

******2********** IF Y/2=Y/2 RETU .T. ELSE RETU .F. ENDIF ENDFUNC

1. IF JOS(X)

2. IF INT(Y/2)=Y/2 /IF MOD (Y,2)=0 / IF Y%2=0

31编写自定义函数,实现成绩表中成绩的档次. SET TALK OFF CLEAR USE 成绩

ACCEPT ?请输入学号? TO XH LOCATE FOR 学号=XH IF FOUND()

******1*******8 DC=CJDC ?XH,CJ,DC ENDIF

SET TALK ON

FUNC CJDC PARA X DO CASE

CASE X>=90 DC=?优? CASE X>=80 DC=?良? CASE X>=70 DC=?中? CASE X>=60 DC=?及格? OTHERWISE

DC=?不及格? ENDCASE

******2****** RETU

ENDFUNC

1. DC=CJDC(CJ) 2. RETU DC

32. 将命令按钮组的命令按钮的CAPTION属性依次设为添加、删除、前翻、后翻、退出。

SET TALK OFF

CLEAR

C=?添加删除前翻后翻退出? ******1******

FOR I=1 TO THISFORM.COMMANDGROUP1.BUTTONS ******2******

THISFORM.COMMANDGROUP1.BUTTON(I).CAPTION=SUBSTR(C,4*I-3,4) ENDFOR

SET TALK ON

1. FOR I=1 TO THISFORM.COMMANDGROUP1.BUTTONCOUNT/ FOR I=1 TO 5 2. THISFORM.COMMANDGROUP1.BUTTONS(I).CAPTION=SUBSTR(C,4*I-3,4)

33.求1!+2!+3!+…..+N!的值不超过10的20次幂和临界值N. SET TALK OFF CLEAR

*****1*****

S=1 STORE 1 TO T,N

DO WHILE S<=1E+20 T=T*N S=S+T

*****2*****

N=N+2 ENDDO ?\

SET TALK ON

1. S=0 2. N=N+1

34.求X+3X+5X+7X+…+(2*N+1)X的值. SET TALK OFF CLEAR

INPUT \INPUT \S=0 T=1

******1****

FOR I=1 TO (2*N+1) STEP 1 *****2****** T=T*X S=S+T ENDFOR

?\ SET TALK ON

1. FOR I=1 TO (2*N+1) STEP 2 2. T=I*X

35.将日期表达式中的月份转换为大写形式.(如11月----十一月) SET TALK OFF INPUT TO X M=MONTH(X)

C=\○一二三四五六七八九十\S=\

******1***** IF M>0

S= SUBSTR(C,2*M+1,2) ELSE

******2********

S= '十'+SUBSTR(C,2*INT(M,10)+1,2) ENDIF S=S+\月\?S

SET TALK ON

1. IF M<=10

2. S= '十'+SUBSTR(C,2*MOD(M,10)+1,2)

36. 将日期表达式中的年份转换为大写形式.(如1999年----一九九九年)

SET TALK OFF INPUT TO Y Y=YEAR(Y)

C=\○一二三四五六七八九十\S=\

FOR I=1 TO 4

********1********* P=MOD(Y/10)

**********2******** S=S+SUBS(C,2*P+1,2) Y=INT(Y/10) ENDFOR S=S+\年\?S

SET TALK ON

1. P=MOD(Y,10)

2. S=SUBS(C,2*P+1,2)+S

37.下列程序实现智能算式的计算. SET TALK OFF CLEAR

DO WHILE .T.

ACCEPT '请输入算式:' TO EXP FOR I=1 TO 2

INPUT '请输入正确答案: ' TO AN *******1******** IF AN=EXP

?'答案正确!' EXIT ELSE

?'再输入答案一次!' ENDIF ENDFOR IF I>2

*********2********

?'正确答案为:'+EXP+'='+&EXP ENDIF

WAIT '要继续输入吗?/YN' TO YN IF UPPER(YN)='Y' CLEAR

LOOP ELSE EXIT ENDIF

ENDDO SET TALK OFF

1. IF AN=&EXP /IF AN=EVALUATE(EXP) /IF AN=(EXP)

2. ? '正确答案为:'+EXP+'='+STR(&EXP,20,2)/ '正确答案为:'+EXP+'='+STR((EXP),20,2)/ '正确答案为:'+EXP+'='+STR(EVALUATE(EXP),20,2) /?'正确答案为:',EXP,’=’,STR(&EXP,20,2)

38假定银行一年期储蓄的计息方法是:实际存期超过一年,则其中一年按年利率7.8%计息,其余时间按活期利率2.8%计息;实际存期未满一年,则按活期利率2.8%计息;一年按365天计算。计算公式为:利息=本金*利率*存款天数/365。

数据库”LXK.DBF”的结构如下: 帐号:ZH(C,8) 日期:RQ(D,8) 金额:JE(N,10,2)

*****BX.PRG***** SET TALK OFF USE LXK CLEAR

ACCEPT “请输入帐号:” TO NUMBER LOCA FOR ZH=NUMBER IF !EOF()

? “找不到帐号” ELSE

*******1********* IF RQ>365

LX= JE*0.078 ELSE

LX=JE*(DATE()-RQ)/365*0.028 ENDIF

***********2******** BX=LX

? “本息总计=$”+LTRIM(STR(BX,10,2))+”元” ENDIF

SET TALK ON

1. IF (DATE()-RQ)>365

2. BX=JE+LX

39.已知某工资表,对工资进行等级制定.若工资大于1000元为?一级?,工资在500元和1000元之间为?二级?,其余为?三级?.最后统计一级人数。 工资.DBF结构: 工资(N,8,2) 级别(C,6)

SET TALK OFF USE 工资

DO WHILE !EOF() IF 工资>1000

REPL 级别 WITH ?一级? ELSE

******1******

IF 工资>=500 OR 工资<=1000 REPL 级别 WITH ?二级? ELSE

REPL 级别 WITH ?三级? ENDIF ENDIF ENDDO

*******2******

RECOUNT TO C FOR 级别=?一级? ?C

SET TALK ON

1. IF 工资>=500 AND 工资<=1000 2. COUNT TO C FOR 级别=’一级’

40.通过参数A,B,C接受一元二次方程ax2+bx+c=0的三个系数,并求解这个方程;如果有实根,通过参数X1和X2返回它的两个根,函数的返回值为.T.;如果没有实根或出现其他异常情况,函数返回.F. FUNC CJ

PARA A,B,C,X1,X2 IF a=0

RETU .F. ENDIF

DLT=b*b-4*a*c IF DLT<0

*******1****** RETU .T. ENDIF

X1=(-b+SQR(DEL))/(2*a) ********2*********

X2=(-b+SQR(DEL))/(2*a) RETU .T. ENDFUNC

1. RETU .F. / RETU .N.

2. X2=(-b-SQR(DEL))/(2*a) ( 注: 本题/是除号)

41.已知学籍数据库,包含学生表,成绩表和课程表. 学生表结构:学号(C ),姓名(C ),性别(L),奖学金(N) 成绩表结构:学号(C ),课程号(C ),成绩(N) 课程表结构;课程号(C ),课程名(C )

下面程序的功能是:根据查看学生?王平?的某课程的成绩.

SET TALK OFF CLEAR SELE 1 USE 学生

LOCATE FOR 姓名=?王平? SELE 2 USE 成绩

*******1*******

LOCATE FOR姓名=?王平 SELE 1

******2******** ?学号,姓名,成绩 SET TALK ON

1. LOCATE FOR 学号=学生.学号 / LOCATE FOR 学号=A.学号

2. ?学号,姓名,B.成绩 / ?学号,姓名,成绩.成绩 / ?学号,姓名,B->成绩 /?学号,姓名,成绩->成绩

42. 已知学籍数据库,包含学生表,成绩表和课程表. 学生表结构:学号(C ),姓名(C ),性别(L),奖学金(N) 成绩表结构:学号(C ),课程号(C ),成绩(N) 课程表结构;课程号(C ),课程名(C )

下面程序的功能是:根据查看学号为?951001?的某课程的成绩 SET TALK OFF CLEAR SELE 1 USE 学生

*******1******* SEEK ?951001? SELE 2

USE 成绩 ALIAS CJ

LOCATE FOR学号=?951001? SELE 1

******2********

?学号,姓名,成绩.成绩 SET TALK ON

1. LOCATE FOR学号=’951001’

2. ?学号,姓名,CJ.成绩 / ?学号,姓名,CJ->成绩 / ?学号,姓名,B.成绩 / ?学号,姓名,B->.成绩

43.已知某工资表GZ.DBF,根据用户输入的岗位查找记录,如果找到则显示,否则给出错误提示信息.

工资表结构:职工号(C),姓名(C),岗位(C ),奖金(N)

SET TALK OFF CLEAR YN=?Y? USE GZ

*******1******** DO WHILE .T. CLEAR

ACCEPT ?请输入岗位? TO GW LOCATE FOR 岗位=GW ******2******* IF EOF()

DISPLAY ELSE

??没有?+GW+?岗位人员? ENDIF

WAIT ?继续查询否?? TO YN ENDDO USE

SET TALK ON

1. DO WHILE UPPER(YN)=’Y’ /DO WHILE YN=’Y’ /DO WHILE YN=’y’ 2. IF FOUND() /IF !EOF() /IF NOT EOF()/IF EOF()=.F.

44.设有学生表(学号,姓名,民族)和成绩表(学号,成绩),要在它们之间建立逻辑连接,然后为每个少数民族考生成绩增加5分,最后显示全体考生的学号,姓名和成绩. SET TALK OFF

CLEAR SELE 1 USE 学生

*********1*************

INDEX ON 学号 SELE 2 USE 成绩

SET RELA TO 学号 INTO A ***********2*************

REPL 成绩 WITH 5 FOR 民族=?少数民族? LIST 学号,成绩,A.姓名 SET TALK ON

1. INDEX ON 学号 TO XH

2. REPL 成绩 WITH 成绩+5 FOR A.民族=’少数民族’/ REPL 成绩 WITH 成绩+5 FOR 学生.民族=’少数民族’

45. 已知学生表,成绩表和课程表的结构如下:

学生表结构:学号(C ),姓名(C ),性别(L),奖学金(N) 成绩表结构:学号(C ),课程号(C ),成绩(N) 课程表结构;课程号(C ),课程名(C )

用SQL语句检索待补考的学生名单,并将查询结果放在JE.DBF中,并按成绩由高到低排列。

SET TALK OFF CLEAR

SELE 学生.学号,姓名,成绩,课程号,课程名; FROM 学生,成绩,课程;

***************1***********

WHERE 学生.学号=成绩.学号 OR 成绩.课程号=课程.课程号 AND 成绩<60; INTO TABLE JE;

**************2*********** ORDER BY 成绩

SET TALK ON

1. WHERE 学生.学号=成绩.学号 AND 成绩.课程号=课程.课程号 AND 成绩<60 2. ORDER BY 成绩 DESC

46. 已知学生表,成绩表和课程表的结构如下:

学生表结构:学号(C ),姓名(C ),性别(L),奖学金(N) 成绩表结构:学号(C ),课程号(C ),成绩(N) 课程表结构;课程号(C ),课程名(C )

用SQL语句检索?951?班的学生学习情况,并将查询结果放在JE.DBF中,并按成绩由高到低排列。

SET TALK OFF CLEAR

SELE 学生.学号,姓名,成绩,课程号,课程名;

FROM 学生,成绩,课程;

***************1***********

WHERE 学生.学号=成绩.学号 AND 成绩.课程号=课程.课程号 AND LEFT(学号,3)=951;

**************2***********

INTO SCREEN JE;

ORDER BY 成绩 DESC

SET TALK ON

1. WHERE 学生.学号=成绩.学号 AND 成绩.课程号=课程.课程号 AND LEFT(学号,3)=’951’;

2. INTO TABLE JE /INTO CURSOR JE

47打印以下图形: 1

1 1

1 2 1

1 3 3 1 1 4 6 4 1

SET TALK ON CLEAR

DIME A(5,5) A=0

FOR I=1 TO 5 ?SPACE(10-I) FOR J=1 TO I

*******1******** IF I=J AND J=1 A(I,J)=1

ELSE

******2*********

A(I,J)=A(I-1,J-1)+A(I-1,J-1) ENDIF

??STR(A(I,J),2)

ENDFOR ENDFOR SET TALK ON

1. IF I=J OR J=1

2. A(I,J)=A(I-1,J-1)+A(I-1,J)

48.通过ADDITEM方法向组合框COMBO1中添加学生表的姓名. ***********1**************

THISFORM.COMBO1.ROWSOURCE=?学生? THISFORM.COMBO1.ROWSOURCETYPE=0 SCAN

THISFORM.COMBO1.ADDITEM(姓名) ********2****** ENDDO

1. THISFORM.COMBO1.ROWSOURCE=’’ 2. ENDSCAN

49.通过设置表格(GRID1)中的列的BACKCOLOR属性,实现偶数列为红色,奇数列为绿色.

**********1****************

FOR I=1 TO THISFORM.GRID1.BUTTONCOUNT *********2*************** IF MOD(I/2)=I/2

THISFORM.GRID1.COLUMNS(I).BACKCOLOR=RGB(255,0,0) ELSE

THISFORM.GRID1.COLUMNS(I).BACKCOLOR=RGB(0,255,0) ENDIF ENDFOR

1. FOR I=1 TO THISFORM.GRID1.COLUMNCOUNT 2. IF INT(I/2)=I/2 / IF MOD(I,2)=0 / IF I%2=0

50..通过ADDITEM方法向组合框COMBO1中添加学生表的班级号(学号前3位),不能有重复记录..

THISFORM.COMBO1.ROWSOURCE=??

THISFORM.COMBO1.ROWSOURCETYPE=0 ********1***************

INDEX ON LEFT(学号,3) TO XH SCAN

THISFORM.COMBO1.ADDITEM(LEFT(学号,3)) ENDSCAN

********2*********** SET RELATION TO THISFORM.REFRESH

1. INDEX ON LEFT(学号,3) TO XH UNIQUE 2. SET INDEX TO

51输入一个学生姓名和年龄,查找并显示所有相同姓名和年龄的学生的学号、姓名和出生年月 ,学生表结构:学号(C ),姓名(C ),性别(L),奖学金(N),出生年月(D)。 SET TALK OFF CLEAR USE 学生

ACCEPT \输入学生姓名=\INPUT \输入学生的年龄=\********1*********

LOCATE FOR 姓名=NAME AND 年龄=AGE DO WHIL NOT EOF() ? 学号,姓名,出生年月 ********2******** SKIP ENDDO USE

SET TALK ON

1. LOCATE FOR 姓名=NAME AND YEAR(DATE())-YEAR(出生年月)=AGE 2. CONT

52.输入一个学生姓名,查找并显示所有相同姓名的学生的学号、姓名和出生年月 学生表结构:学号(C ),姓名(C ),性别(L),奖学金(N),出生年月(D)

SET TALK OFF USE 学生

**********1*********** INDEX ON 学号 TO XH

ACCEPT \输入学生姓名=\SEEK NAME

DO WHIL NOT EOF() ? 学号,姓名,出生年月 ************2******* CONT ENDDO USE

SET TALK ON

1. INDEX ON 姓名 TO XM

2. SKIP

53.已知工资.DBF结构为职工号(C ),职称(C ), 工资(N ),姓名(C ),出生年月(D). (1)显示1960年3月2日前(含3月2日)出生的、职称为工程师的 职工的姓名、出生年月和工资。

(2)计算职工的平均工资存入变量PG中

SET TALK OFF CLEAR USE 工资

***********1***************

LOCA FOR 出生年月>{^1960-03-02} OR 职称=?工程师? DO WHIL NOT EOF() ? 姓名,出生年月,工资 CONT ENDDO

**********2********** SUM 工资 TO PG ? PG

SET TALK ON

1. LOCA FOR 出生年月<={^1960-03-02} AND 职称=’工程师 2. AVER 工资 TO PG

54.编制一个表单完成对学生表的内容浏览显示功能.要求表单内容以1秒为间隔自动刷新,即自动顺序向后翻记录,当翻到表尾时,自动回到首记录循环翻动.假设时钟TIMER1的INTERVAL为1000,试编写其TIMER事件.

SELE 学生 *****1****** SKIP -1 IF EOF() GO TOP ENDIF

********2******** THIS.REFRESH

1. SKIP / SKIP 1

2. THISFORM.REFRESH

55.某表单上放置一个容器(CONTAINER1),容器内有5个文本框(TEXT1-TEXT5),下面程序将文本框的初值设为1-5. DIMENSION A(5)

FOR I=1 TO 5

******1********* A=I

ENDFOR

FOR I=1 TO THISFORM.CONTAINER1.CONTROLCOUNT *******2********

THISFORM.CONTAINER1.TEXT(I).VALUE=A(I) ENDFOR

THISFORM.REFRESH

1. A(I)=I

2. THISFORM.CONTAINER1.CONTROLS(I).VALUE=A(I)

56.表单上有一页框(PAGEFRAME1),该页框有2页(PAGE1-PAGE2),试编写页框的CLICK事件,当激活第1页时,表单背景色为红色;激活第2页时,表单背景色为绿色.

DO CASE

**********1*********** CASE THIS.VALUE=1

THISFORM.BACKCOLOR=RGB(255,0,0) OTHERWISE

THISFORM.BACKCOLOR=RGB(0,255,0) ENDCASE

********2********* THIS.RELEASE

1. CASE THIS.ACTIVEPAGE=1 /CASE THISFORM.PAGEFRAME1.ACTIVPAGE=1 2. THISFORM.REFRESH

57. 编制一个表单完成对学生表的内容浏览显示功能.假设表单上的控件均与表字段绑定,设置命令按钮组(COMMANDGROUP1),内含前翻、后翻、退出三个按钮。当记录翻至表头、表尾时,自动设置相应按钮不可访问。试编写命令按钮组的CLICK事件。

DO CASE

CASE THIS.VALUE=1 SKIP -1 IF BOF()

THIS.COMMAND1.ENABLED=.F. ENDIF

********1*********

THIS.BUTTON(2).ENABLED=.T.

CASE THIS.VALUE=2 SKIP IF EOF()

THIS.COMMAND2.ENABLED=.F.

ENDIF

THIS.COMMAND1.ENABLED=.T. CASE THIS.VALUE=3

***********2*********** THIS.RELEASE ENDCASE

THISFORM.REFRESH 1. THIS.COMMAND2.ENABLED=.F. / THIS.BUTTONS(2).ENABLED=.F./ THISFORM.COMMANDGROUP1.COMMAND2.ENABLED=.F./THISFORM.COMMANDGROUP1.BUTTONS(2).ENABLED=.F.

2. THISFORM.RELEASE

58.从键盘输入N个正整数(N从键盘输入,N>0),输出其中的偶数和奇数和. SET TALK OFF CLEAR

INPUT ?N=? TO N S1=0 S2=0

FOR I=1 TO N

INPUT ?请输入正整数? TO M ********1******* IF INT(N/2)=N/2 S1=S1+1 ELSE S2=S2+1 ENDIF ENDFOR

??偶数和是:?,S1 ******2***** ??奇数和是:?+S2 SET TALK ON

1. IF INT(M/2)=M/2 / IF MOD(M,2)=0 / IF M%2=0 2. ? ’奇数和是:’+STR(S2) /’奇数和是:’,S2

59.编写一个口令判断程序,要求从键盘输入口令并判断口令是否与系统口令(学生.DBF中的姓名字段的值)完全一致,如果一致显示欢迎信息.否则给出错误提示(输入次数最多三次!)

SET TALK OFF CLEAR

USE 学生 I=1

DO WHIL .T.

? '请输入口令='

SET CONSOLE OFF ACCEPT TO KL

SET CONSOLE ON ******1******

LOCATE FOR ALLT(口令)=KL IF FOUND()

? '欢迎使用本系统!' EXIT ELSE I=I+1 IF I>3 EXIT ENDIF

? '口令第'+STR(I,1)+'错,再试一次!' ******2****** EXIT ENDIF ENDDO SET TALK ON .

1. LOCATE FOR ALLT(姓名)=KL/ LOCATE FOR KL= ALLT(姓名) /LOCATE FOR 姓名=KL

2. LOOP

60.本程序计算下列表达式的值,变量X,Y的值由键盘输入。 *

о

* Z=3sin37+XY/(X-Y) *

SET TALK OFF CLEAR

ACCEPT 'X=' TO X ********1******** ACCEPT 'Y=' TO Y IF VAL(X)=Y ? '输入有错' ELSE

********2******** Z=3SIN37+XY/(X-Y)

? Z ENDIF

SET TALK ON

1. INPUT ‘Y=’ TO Y

2. Z=3*SIN(37*PI()/180)+X*Y/(X-Y) / Z=X*Y/(X-Y)+ 3*SIN(37*PI()/180)

61.本程序计算从58一直乘到30的积。

SET TALK OFF CLEA

*********1******** S=0

********2******* FOR I=58 TO 30 S=S*I ENDFOR ? S

SET TALK ON

1. S=1

2. FOR I=58 TO 30 STEP -1 /FOR I=30 TO 58

62.*本程序实现把表学生.dbf中姓名为“张三”的学生学号改为“98000012”。 * 学生.DBF结构:

* 学号 姓名 性别 出生年月 * C,8 C,8 L,1 D,8

SET TALK OFF DIME A(4) USE 学生

LOCA FOR 姓名='张三' *******1********* IF FOUND SCATT TO A

*********2******** A='98000012\ GATH FROM A ELSE

?'找不到该学生' ENDIF USE

SET TALK ON

1. IF FOUND() / IF NOT EOF() / IF !EOF() / IF EOF()=.F. 2. A(2)=’98000012’

63.*本程序实现把表学生.dbf中所有记录显示出来。 * 学生.DBF

* 学号 姓名 性别 出生年月 * C,8 C,8 L,1 D,8

* 其中,性别逻辑真为女,逻辑假为男。

* 要求:显示时按性別分别显示“男”或“女”。 *

SET TALK OFF USE 学生

DO WHIL NOT EOF() ********1*********

? 学号+姓名+性別+出生年月 SKIP

************2******** END DO USE

SET TALK ON

1. ? 学号+姓名+IIF(性別,’男’,’女’)+DTOC(出生年月) / 女’),出生年月 2. ENDDO

64. *本程序找出所有奖学金相同的记录。 *

SET TALK OFF CLEA USE STU

INPUT '奖学金=' TO X ******1****** SEEK X

DO WHIL NOT EOF() DISP

******2****** SKIP ENDDO USE

SET TALK ON

1. LOCA FOR奖学金=X / LOCA FOR X=奖学金 2. CONT

? 学号,姓名,IIF(性別,’男’,’

65. *本程序的功能是:从学生.dbf中找出成绩最高的学生,显示姓名、成绩 SET TALK OFF USE 学生 XM=姓名 CJ=成绩

DO WHILE !EOF() *******1****** IF FOUND() CJ=成绩 XM=姓名 ENDIF

*******2***** CONT ENDDO ?XM,CJ USE

SET TALK ON

1. IF CJ<成绩 / IF 成绩>CJ 2. SKIP

66.*本程序显示下面图形(行数为5时) * A * BB * CCC * DDDD * EEEEE

SET TALK OFF CLEAR

INPUT\请输入行数:\ FOR I=1 TO N ?SPACE(20-I) ******1****** FOR J=1 TO 2*I-1 ******2******

?CHR(ASC(\ ENDFOR ENDFOR

SET TALK ON

1. FOR J=1 TO I

2. ?? CHR(ASC(‘A’)+I-1)

67.*本程序能查询显示出所有相同职称的记录。 *

SET TALK OFF CLEAR USE ZG

INDEX ON 职称 TO IZC ******1****** DO WHILE !EOF() I=0

ACCEPT \请输入职称:\ LOCA FOR 职称=ZC DO WHILE !EOF() IF FOUND() I=I+1 ELSE

?\无\ ENDIF

******2****** SKIP ENDDO

?ZC+\有\人\

WAIT\是否继续?(Y/N)\ IF UPPER(YN)=\ LOOP ELSE EXIT ENDIF ENDDO USE

SET TALK ON

1. DO WHILE .T. 2. CONT

68、*本程序显示下面图形(行数为5时) * 12345 * 1234 * 123 * 12 * 1

SET TALK OFF CLEAR

INPUT\

FOR I=N TO 1 STEP-1 ?SPACE(10) ***1*** FOR J=I TO 1 ***2*** ?? J

ENDFOR ENDFOR

SET TALK ON

1. FOR J=I TO 1 STEP -1 2. ?? STR(6-J,1)

69.* 本程序实现把表学生.dbf中姓名为“张三”的学生改名为“李四”。 * 学生.DBF

* 学号 姓名 性别 出生年月 * C,8 C,8 L,1 D,8

SET TALK OFF USE 学生

LOCA FOR 姓名='张三' *******1********* IF EOF

*********2******** 姓名='李四' DISP ELSE

?'找不到该学生' ENDIF USE

SET TALK ON

1. IF !EOF() / IF NOT EOF() / IF FOUND() /IF EOF()=.F. 2. REPL姓名 WITH '李四'

70、*显示所有输入的出生日期以后出生的记录。 *

SET TALK OFF

CLEAR USE 学生

INPUT \请输入出生日期:\ INDEX ON 出生日期 TO ICS ***1***

SEEK FOR 出生日期<=X DO WHILE !EOF() DISP ***2*** SKIP ENDDO USE

SET TALK ON

1. LOCA FOR 出生日期>X 2. CONT

71*把所有职称相同的记录显示出来,并按出生日期排序。 * ls.dbf

* 职工号 姓名 出生日期 职称 * C,6 C,8 D,8 C,8 SET TALK OFF CLEAR USE LS ***1***

INDEX ON 职称+ STR(出生日期)TO IZG ACCEPT\请输入职称:\ ***2*** FIND X

DO WHILE !EOF() IF FOUND() DISP ENDIF SKIP ENDDO USE

SET TALK ON

1. INDEX ON 职称+ DTOC(出生日期) TO IZG 2. FIND &X / SEEK X

72本程序统计WORD表中LETTER字段中字符数小于等于10的记录数。

* WORD.DBF * LETTER

* C,20 SET TALK OFF

USE WORD I=0

***1***

DO WHILE .T. ***2***

IF LEN(LETTER)<10 I=I+1 ?LETTER ENDIF SKIP

ENDDO ? I

SET TALK ON

1. DO WHILE !EOF() / DO WHIL NOT EOF() 2. IF LEN(ALLT(LETTER))<=10

73本程序查询所有年龄相同的记录。 * zg.dbf

* 学号 姓名 年龄 * C,6 C,8 N,3 SET TALK OFF USE ZG ***1***

INDEX ON 年龄/D TO IZGY DO WHILE .T.

INPUT \请输入年龄:\ ***2*** SEEK &X IF FOUND() DISP ELSE

?\查无此人!\ ENDIF

WAIT\是否继续查询(Y/N)\ IF UPPER(YN)=\ LOOP ELSE EXIT ENDIF ENDDO USE

/ DO WHILE EOF()=.F. SET TALK ON

1. INDEX ON 年龄 TAG IZGY 2. SEEK X / FIND &X

74.下面是一段自定义函数,把两位数字转换成中文数字. PARA X

C=\○一二三四五六七八九十\ S=??

DO CASE CASE X<=10

S=S+SUBSTR(C,2*X+1,2) CASE X<=19

S=S+\十\ OTHERWISE ****1****

S=S+SUBSTR(C,2*INT(X/10)+1,2)+IIF(MOD(X,10)=0,? 十?,SUBSTR(C,2*MOD(X,10)+1,2)) ENDCASE ****2**** RETURN

S=S+SUBSTR(C,2*INT(X/10)+1,2)+\十\RETU S

75、本程序对表中姓名相同的一些重复记录进行删除(姓名索引文件为CYXM). SET TALK OFF CLEAR

USE CYTP INDEX CYXM DO WHIL NOT EOF() XM=姓名

********1******** LOCA FOR 姓名=XM *******2******* DO WHIL NOT EOF() DELE SKIP ENDDO ENDDO PACK USE

SET TALK ON

1. SKIP

2. DO WHIL NOT EOF() AND姓名=XM / DO WHILE !EOF() AND 姓名=XM / DO WHILE NOT EOF() ANDALLT(姓名)=XM / DO WHILE !EOF() AND ALLT(姓名)=XM

76、本程序显示下面格式图形。 A

A AB

A AB ABC

A AB ABC ABCD

A AB ABC ABCD ABCDE SET TALK OFF CLEA

FOR I=1 TO 5 ?

FOR J=1 TO I ****1**** FOR K=1 TO I ****2**** ??CHR(65+K) ENDFOR ??SPACE(2) ENDFOR ENDFOR

SET TALK ON

1. FOR K=1 TO J 2. ??CHR(64+K)

77、本程序从键盘输入学生的学号,在“成绩”表中计算该生的平均成绩,并说明成绩的档次(优、良、中、及格和不及格)。 SET TALK OFF CLEA USE 成绩

S='不及格 及格 中 良 优' ACCEPT '请输入学生的学号=' TO XH LOCA FOR 学号=XH IF !FOUND() ? '查无此人' ELSE

AVER 成绩 TO CJ FOR 学号=XH IF CJ<60 R=0

ELSE

******1****** R=CJ ENDIF

*******2******

DC=SUBSTR(C,6*R-1,6) ? XH,CJ,DC ENDIF USE

SETTALK ON

1. R=INT(CJ/10)

2. DC=SUBSTR(S,6*R+1,6)

78、本程序输入学生学号,计算平均成绩。 * 学生.DBF 成绩.DBF

* 学号 姓名 性别 学号 课程号* C,5 C,8 L,1 C,5 C,3

SET TALK OFF CLEA USE 学生 A=1

******1****** DO WHIL .T.

ACCEPT '输入学号=' TO XH IF FOUND() A=2 ELSE

? '无该学号' ENDIF ENDDO NA=姓名 USE 成绩

******2******

AVER 成绩 TO ST

?'学号 姓名 平均成绩' 学号,NA,ST USE

SET TALK ON

1. DO WHILE A=1 / DO WHIL A=1 2. AVERAGE 成绩 TO ST FOR 学号=XH

成绩N,3

79、本程序实现输入任意表名,显示该表中所有字段名。

SET TALK OFF CLEA

ACCEPT '输入表名(不含扩展名)=' TO DF DF=DF+'.DBF' ******1****** IF FILE('DF')

*******2****** USE DF

FOR I=1 TO FCOUNT() ? FIELDS(I) ENDFOR ELSE

? '无该表名' ENDIF

SET TALK ON

1. IF FILE(DF) / IF FILE('&DF') 2. USE (DF) / USE &DF

80、本程序用于计算圆面积。 SET TALK OFF CLEAR

INPUT '圆半径=' TO R ******1****** DO SS WITH R ? '圆面积=', R SET TALK ON

*SS.PRG

******2****** PARA S S=PI()*X*X X=S

RETU X

1. R=SS(R) / R=SS(@R) 2. PARA X

81、本程序用于判别输入三个数是否构成三角形。

SET TALK OFF CLEA

INPUT 'X=' TO X INPUT 'Y=' TO Y INPUT 'Z=' TO Z *******1******* IF SS

? '构成三角形' ELSE

? '不构成三角形' ENDIF

SET TALK ON

*SS.PRG

PARA A1,A2,A3 IF A1>A2+A3 RETU .T. ELSE

IF A2>A1+A3 RETU .T. ELSE

IF A3>A1+A2 RETU .T. ENDIF ENDIF ENDIF

*******2****** RETU

1. IF SS(X,Y,Z) 2. RETU .F.

82、本程序计算S=X1+X2+···+XN的值。 SET TALK OFF CLEA

INPUT 'N=' TO N ******1****** I=1

DO WHIL I<=N INPUT 'X=' TO X I=I+1

S=S+X*I

ENDDO

******2****** ? 'S='+S

SET TALK ON

1. STOR 0 TO S,I / STOR 0 TO I,S 2. ? 'S='+STR(S) / ? 'S=',S

83、把任意一个英文大写字母转换为相应的小写字符。 SET TALK OFF CLEA

ACCEPT '输入英文大写字母=' TO X ******1****** IF ASC(X)>97 S=X ELSE

*******2******* S=STR((VAL(X)+32) ? X+'的小写字符为'+S ENDIF

SET TALK ON

1. IF ASC(X)>=97

2. S=CHR(ASC(X)+32)

84、本程序实现自动算术测试功能,按ESC键退出。 SET TALK OFF SET ESCA TP OFF DO WHIL .T.

ACCEPT '请输入算术式子=' TO X INPUT '请输入算术式子答案=' TO AN *******1****** IF AN=X ? '答案正确' ELSE

? '答案错误' ENDIF

*******2****** IF INKEY()=13 EXIT ENDIF ENDDO

SET ESCAPE ON SET TALK ON

1. IF AN=&X / IF &X=AN 2. IF INKEY()=27

85、把“MM/DD/YY”形式输入的日期型变量转换成“YYYY年MM月DD日”形式。 SET TALK OFF

SET STRICTDATE TO 1 ******1******

ACCEPT '输入日期=' TO X Y1=YEAR(X) M1=MONTH(X) D1=DAY(X) ******2******

X=Y1+'年'+M1+'月'+D1+'日' ? X

SET TALK ON

1. INPUT '输入日期=' TO X / INPUT TO X

2. X=STR(Y1,4)+'年'+STR(M1,2)+'月'+STR(D1,2)+'日' /Y=Y1,’年’,M1,’月’,D1,’日’

86、 本程序计算∑A1+∑A2+∑A3的值(∑AI=1+2+3+···+AI)。 SET TALK OFF CLEAR

******1****** T=0

FOR I=1 TO 3

INPUT 'N=' TO N DO SS WITH N,X T=T+X ENDFOR ? T

SET TALK ON

*SS.PRG

******2****** PARA A1,A2 Z=1

FOR J=1 TO A2 Z=Z+J ENDFOR A1=Z

RETU

1. STOR 0 TO T,X / STOR 0 TO X,T 2. PARA A2,A1

87、本程序实现任意查询功能。 SET TALK OFF CLEA

ACCEPT '输入表名(不含扩展名)' TO DB DB=ALLT(DB)+'.DBF' IF FILE(DB)

******1******

FOR I=1 TO COUNT() ? FIELDS(I) ENDF

ACCEPT '' TO X USE (DB)

******2****** LIST FOR X ELSE

? '找不到该表' ENDIF

SET TALK ON

1. FOR I=1 TO FCOUNT()

2. LIST FOR &X / DISP FOR &X

88、本程序用于判别输入数据的类型(只判别数值型和字符型两类)。 SET TALK OFF CLEA

DO WHIL .T. INPUT '' TO X DO CASE

******1****** CASE TYPE('X')='c' ? X,''是字符型” EXIT

******2******

CASE VARTYPE('X')='n' ? X,''是数值型” EXIT OTHER LOOP ENDC ENDDO

SET TALK ON

1. CASE TYPE('X')='C' 2. CASE VARTYPE(X)='N'

89、本程序计算正整数M(从键盘输入)内的偶数及偶数和。 SET TALK OFF CLEA

INPUT 'M=' TO M ******1****** S=0

DO WHIL I<=M ******2****** IF MOD(I/2)=0 ? I S=S+I

ENDIF I=I+1

ENDDO ? S

SET TALK ON

1. STOR 0 TO S,I / STOR 0 TO I,S

2. IF MOD(I,2)=0 / IF I%2=0 / IF INT(I/2)=I/2 / IF I/2=INT(I/2)

90、求当1!+3!+5!+···+n!的值不超过10^20时的临界值及n的值。 SET TALK OFF CLEA

STOR 1 TO S,N ******1******

DO WHIL S<=20E+10 T=T*(N+1)*(N+2) S=S+T N=N+2 ENDDO

******2****** ? \

SET TALK ON

1. DO WHIL S<=1E+20 2. ? \

91、本程序根据输入数据,判断是否偶数。

SET TALK OFF CLEAR YN='Y'

*******1****** DO WHIL YN

INPUT '输入自然数=' TO N ******2****** IF N%2 ? '是偶数' ELSE

? '不是偶数' ENDIF

WAIT '还要输入其它自然数(Y/N)' TO YN ENDDO

SET TALK ON

1. DO WHIL YN=’Y’ / DO WHILE UPPER(YN)=’Y’ 2. IF N%2=0 / IF MOD(N,2)=0 / IF INT(N/2)=N/2

92、输入日期,求对应星期几。 SET TALK OFF CLEA

*****1*****

ACCEPT '输入日期=' TO X A='天一二三四五六' ******2*****

B=SUBSTR(A,DOW(X)+1,2) ? DTOC(X)+'是'+B

SET TALK ON

1. INPUT '输入日期=' TO X 2. B=SUBSTR(A,2*DOW(X)-1,2)

93、实现两个个位数相加的计算题。 SET TALK OFF CLEA

A=INT(9*RAND()) B=INT(9*RAND()) *****1***** ?A+'+'+B+'='

INPUT '请输入答案=' TO X ******2****

IF A+B=&X ? '回答正确'

ELSE

? '回答错误' ENDIF

SET TALK ON

1. ? STR(A,2)+’+’+STR(B,2)+’=’ 2. IF A+B=X / IF X=A+B

94、从键盘上输入N个数据,找出其中最小值。 SET TALK OFF CLEA

INPUT 'N=' TO N INPUT 'A=' TO A ******1****** DO WHIL I<=N INPUT 'B=' TO B ******2****** IF B

SET TALK ON

1. FOR I=1 TO N-1 2. IF B>A / IF A

95、从键盘上输入N个数据,找出其中最大值。 SET TALK OFF CLEA

INPUT 'N=' TO N INPUT 'X=' TO X *******1******* X=A

******2****** FOR I= 1 TO N

INPUT 'X=' TO X IF A

SET TALK ON

本文来源:https://www.bwwdw.com/article/abnr.html

Top