Visual FoxPro 6.0学习笔记十二

第十二章循环结构程序设计

一、利用DO WHILE ……ENDDO语句构造循环

1.计算S=1+2+3+……+100累加和

SET TALK OFF

CLEAR

SUM=0

COUNTER=1

DO WHILE COUNTER<=100

        SUM=SUM+COUNTER

        COUNTER=COUNTER+1

ENDDO

?"S=",SUM

SET TALK ON

RETURN

运行结果为:

2.计算S=1+1/3+1/5+1/7……+1/99

SET TALK OFF

CLEAR

SUM=0

COUNTER=1

DO WHILE COUNTER<=99

        SUM=SUM+1/COUNTER

        COUNTER=COUNTER+2

ENDDO

?"S=",SUM

SET TALK ON

RETURN

运行结果为:

3.显示STUDENT表中入学成绩在540分以上的记录

CLEAR

USE STUDENT

DO WHILE NOT EOF()
    IF 入学成绩>=540
        DISPLAY
        WAIT "按任意键继续"
        SKIP
    ELSE
        SKIP
    ENDIF
ENDDO
USE
RETURN

运行结果为:

3.在员工表中查找员工信息

SET TALK OFF
CLEAR
USE Rsda.dbf
DO WHILE .T.
    CLEAR
    ACCEPT "请输入员工编号:" TO ZHGNO
    LOCATE FOR 编号=ZHGNO
    IF .NOT.EOF()
        DISPLAY 编号,姓名,部门代码,职称,基本工资
    ELSE
        ?"查无此人!"
    ENDIF
    WAIT "" TO P
    IF UPPER(P)<>"Y"
        USE
        EXIT
    ENDIF
ENDDO
SET TALK ON
RETURN

运行结果为:

二、利用FOR…ENDFOR语句构造循环

1.求出100~999之间的所有水仙花数

SET TALK OFF
CLEAR
FOR I=100 TO 999
    a=MOD(I,10)
    b=MOD(I-a,100)/10
    c=(I-a-10*b)/100
    IF I=a^3+b^3+c^3
        ?I
    ENDIF
ENDFOR
SET TALK ON
RETURN

运行结果为:

2.将给定字符串反序输出显示

CLEAR
STORE "DCBA4321" TO X
Y=SPACE(0)
FOR I=LEN(X) TO 1 STEP -1
    Y=Y+SUBSTR(X,I,1)
ENDFOR
?X+"的反序为:"+Y
RETURN

运行结果为:

3.计算1!+2!+3!+……10!的计算

SET TALK OFF
CLEAR
SUM=0
FOR I=1 TO 10
    X=1
    FOR J=1 TO I
        X=X*J
    ENDFOR
    SUM=SUM+X
ENDFOR
?"1!+2!+……+10!=",SUM
SET TALK ON
RETURN

运行结果为:

单层循环实现:

CLEAR
JC=1
S=0
I=1
DO WHILE I<=10
    JC=JC*I
    S=S+JC
    I=I+1
ENDDO
?"1!+2!+……+10!=",S
RETURN

运行结果为:

4.输入10个数,将其按由小到大的顺序排序
CLEAR
DIMENSION A(10)
FOR I=1 TO 10
    INPUT "请输入数据:" TO A(I)
ENDFOR
FOR I=1 TO 9
    FOR J=I+1 TO 10
        IF A(I)>A(J)
            T=A(I)
            A(I)=A(J)
            A(J)=T
        ENDIF
    ENDFOR
ENDFOR
?"排序后数据的顺序:"
FOR I=1 TO 10
    ??A(I)
ENDFOR
RETURN

运行结果为:

三、用SCAN……ENDSCAN设计循环

SET TALK OFF
CLEAR
USE 员工
SCAN FOR 性别="女"
    DISPLAY 编号,姓名,性别,部门代码,基本工资
    WAIT
ENDSCAN
USE
SET TALK ON
RETURN

运行结果为:

思考与练习

2.关于EXIT与LOOP的说明:

执行LOOP命令时结束本次循环,进入下一循环。
执行EXIT命令时结束循环,执行END ** 下面命令。

4.输入一个年号,判断其是否为闰年。

SET TALK OFF
CLEAR
INPUT "请输入一个年号:" TO YEAR_NUM
DO CASE
    CASE MOD(YEAR_NUM,4)=0 AND MOD(YEAR_NUM,100)<>0
        ?STR(YEAR_NUM)+"是闰年"
    CASE MOD(YEAR_NUM,400)=0
        ?STR(YEAR_NUM)+"是闰年"
    OTHERWISE
        ?STR(YEAR_NUM)+"不是闰年"
ENDCASE
SET TALK ON
RETURN

运行结果为:

5.编写程序计算e

SET TALK OFF
CLEAR
e=1
X=1
Z=1
DO WHILE 1/Z>=0.000001
    Y=1
    Z=1
    DO WHILE Y<=X
        Z=Z*Y
        Y=Y+1
    ENDDO
    e=e+1/Z    
    X=X+1
    
ENDDO
?"e的值为:",e
SET TALK ON
RETURN

运行结果为:

6.编写程序产生20项斐波那契数列

CLEAR

DIMENSION F(20)

FOR I=1 TO 20

        IF I=1 OR I=2

                F(I)=1

                ??STR(F(I))+SPACE(2)

        ELSE

                F(I)=F(I-1)+F(I-2)

                ??STR(F(I))+SPACE(2)

        ENDIF

ENDFOR

RETURN     

运行结果为:

7.求1到100之间所有整数的平方和并输出结果

CLEAR

S=0

X=1

DO WHILE X<=100

        S=S+X^2

        X=X+1

ENDDO

?"1到100之间所有整数的平方和为:",S

RETURN

运行结果为:

8.STORE 1 TO X

STORE 0 TO Y

DO WHILE X<=20

        IF INT(X/2)<>X/2

                X=X+1

                Y=Y+1

                LOOP

        ELSE

                X=X+1

        ENDIF

ENDDO

?X,Y

解析:X=1时,INT(X/2)=0,X/2=0.5,两者不相等,X=X+1=2,Y=Y+1=1,进入下次循环;

X=2时,INT(X/2)=1,X/2=1,两者相等,仅执行X=X+1=3,Y仍为1;

X=3时,INT(X/2)=1,X/2=1.5,两者不相等,X=X+1=4,Y=Y+1=2,进入下次循环;

X=4时,INT(X/2)=2,X/2=2,两者相等,仅执行X=X+1=5,Y仍为2;

X=5时,INT(X/2)=2,X/2=2.5,两者不相等,X=X+1=6,Y=Y+1=3,进入下次循环;

X=6时,INT(X/2)=3,X/2=3,两者相等,仅执行X=X+1=7,Y仍为2;

X=7时,INT(X/2)=3,X/2=3.5,两者不相等,X=X+1=8,Y=Y+1=3,进入下次循环;

X=8时,INT(X/2)=4,X/2=4,两者相等,仅执行X=X+1=9,Y仍为3;

X=9时,INT(X/2)=4,X/2=4.5,两者不相等,X=X+1=10,Y=Y+1=4,进入下次循环;

X=10时,INT(X/2)=5,X/2=5,两者相等,仅执行X=X+1=11,Y仍为4;

以此类推,此时Y在计数的是1-20之间奇数的个数。

故X=21,Y=10

运行结果为:

9.STORE 0 TO N,S

DO WHILE .T.

        N=N+1

        S=S+N

        IF N>=10

                EXIT

        ENDIF

ENDDO

?"S="+STR(S,2)

解析:计算S=1+2+3+4+5+6+7+8+9的和

运行结果为:

10.成绩表SCORE中课程编号是0001且成绩为80分以上的人数的统计(浏览了表格之后发现没有编号为0001的课程,临时改成了10004)

USE SCORE
S=0
DO WHILE NOT EOF()
    IF 课程编号="10004" AND 成绩>80
        S=S+1
    ENDIF
    SKIP
ENDDO
?"课程编号为10004且成绩高于80分的有"+STR(S)+"人"
RETURN

运行结果为:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值